Как я уже говорил выше, Psshutdown отказывается работать в пакетном файле, но отлично работает в командной строке. В сценарии есть легкая логика, чтобы определить, какая группа ПК и т. Д. Вот сценарий:Psshutdown не работает в пакетных файлах
@ECHO OFF
cd "C:\temp\remote enable rdp"
goto :SET
:SET
set /p groupPC=pc or list?:
if %groupPC% == pc goto :PC
if %groupPC% == list goto :LIST
goto :SKIP
:PC
ECHO[
set /p pcName=Which PC?:
psshutdown -c -k \\%pcName% -r
PAUSE
goto :DONE
:LIST
ECHO[
set /p input=Which list?:
set list=%input%.txt
psshutdown @C:\Temp\Lists\%list% -r -f else goto :SKIP
PAUSE
goto :DONE
:SKIP
ECHO[
ECHO You probably typed something wrong. Starting from the top.
PAUSE
ECHO[
goto :SET
:DONE
ECHO Mischief Managed
TIMEOUT /t 10
EXIT /B
Каждый раз, когда я бегу либо логику PC или логику List подсказка просто показывает мне синтаксис PsShutdown использует. Я пробовал каждую конфигурацию синтаксиса, которую я могу найти в Интернете. Есть предположения?
Редактировать: Стоит отметить, что синтаксис @file, который я использую, работает почти дословно с помощью psexec.
«Осталось» от логики, которая остановила бы команду, если список не существовал. Так или иначе, он будет запускать «goto: SKIP», поэтому я его оставил. Я хотел удалить его перед вставкой. В имени файла нет пробелов. В результате используется имя ПК, которое также не имеет пробелов. Кажется, что что-то не похоже на сам пакетный файл, так как работа с той же командой в командной строке отлично работает. – SergeantDoc
Хм. Это странно. Просто угадывая здесь, но попробовали ли вы включить замедленное расширение переменной? Интересно, влияет ли это на то, как psshutdown проходит через компьютеры. – Jared