У меня есть унаследованная мной система, в которой использовался простой скрипт 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)
(часть cmd)
Вы можете заменить 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
С моей стороны работает :)
Надеюсь, поможет