Назад | Перейти на главную страницу

Список остановленных серверов PSExec

У меня есть унаследованная мной система, в которой использовался простой скрипт psexec и список серверов для автоматического отключения серверов в списке, если будет достигнут температурный порог или у ИБП осталось всего несколько минут заряда батареи. Это было выполнено диспетчером устройств AVTech. Он больше не работает (и, вероятно, не работал с тех пор, как я здесь). Если я выполняю сценарий вручную из административной командной строки (Windows Server 2012 r2), я получаю эту ошибку

The filename, directory name, or volume label syntax is incorrect.

Рассматриваемый сценарий выглядит так

c:\avtech\psexec @c:\avtech\scripts\serverlist.txt c:\windows\system32\shutdown.exe -s -f -t 0 >"c:\avtech\log\shutdownlog.txt 2>&1

а файл serverlist.txt в настоящее время является файлом только с одной записью

server.domain.local

Если я заменю фактическое имя сервера на файл serverlist.txt, он будет работать нормально

C:\Windows\system32>C:\AVTECH\psexec \\server.domain.local c:\windows\system32\shutdown.exe -s -f -t 0 >c:\shutdownLog.txt 2>&1

Так что все работает нормально, если я не получить psexec из этого списка серверов. И, да, путь к списку серверов правильный.

Без сомнения, где-то здесь есть простая и очевидная ошибка, но мой опыт работы с такими вещами довольно слаб, есть идеи?

Вместо того, чтобы возиться с psexec для этого, почему бы просто не позвонить shutdown.exe непосредственно с /m переключатель?

shutdown.exe -m \\server.domain.local -s -f -t 0

Вы даже можете сохранить список серверов в одном файле с помощью команды for. Увидеть для документации если вы хотите использовать разделитель не по умолчанию (пробел и табуляция):

for /f %%SERVER in (c:\avtech\scripts\serverlist.txt) do (
    shutdown.exe -m %%SERVER -s -f -t 0
)

Могу я рекомендовать PsShutdown? Похоже, вам больше нравится PsTools, но я не думаю, что PsExec - подходящий инструмент.

Для shutdown -m вы можете перебрать его с помощью для цикла Я полагаю?

Я обычно использую это так:

psexec.exe \\LAB-PC1 -u LAB-Pc01\admin -p S3cret! -i -d cmd /c shutdown /r /f /t 1 

Разрыв командной строки:

(часть psexec)

  • -i Интерактивный сеанс
  • -d не ждать завершения процесса

(часть cmd)

  • cmd оболочка Windows на удаленном хосте
  • / c Выполнить команду, а затем выйти из Вот
  • выключение Windows команда выключения
  • / r restart (/ h, если вы хотите завершить работу)
  • / f Принудительное завершение работы, не дожидаясь процессов
  • / t 1 таймаут в 1 секунду

Вы можете заменить my \ LAB-PC1 на свой @ server-list.txt и применить его к списку хостов

РЕДАКТИРОВАТЬ

C:\Users\LabAdmin\Desktop\push_software_installer>SO-psexec-server-list.cmd
C:\Users\LabAdmin\Desktop\push_software_installer>\\lab.local\central-store\Software\psTools\psexec
@server-list.txt -u LABDOMAIN\administrador -p S3cret!! -i -d cmd /c w32tm /monitor > output.txt

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

Starting cmd on LAB-PC1...e on LAB-PC1...
cmd started on LAB-PC1 with process ID 30820.     <====
Couldn't access LAB-PC2-disabled:
O identificador Ú invßlido.
Couldn't access LAB-PC3-disabled:
O identificador Ú invßlido.
Couldn't access LAB-PC4-disabled:
O identificador Ú invßlido.
Couldn't access LAB-PC5-disabled:
O identificador Ú invßlido.
Connecting to LAB-PC5-disabled...
C:\Users\LabAdmin\Desktop\push_software_installer>`

Мой server-list.txt

LAB-PC1
LAB-PC2-disabled
LAB-PC3-disabled
LAB-PC4-disabled
LAB-PC5-disabled

Примечание: язык моего лабораторного ПК - PT-PT

С моей стороны работает :)

Надеюсь, поможет