#powershell #windows-10
#powershell #windows-10
Вопрос:
Я ссылался на многие темы на этом и других форумах, но не смог заставить этот скрипт работать в форме скрипта в ps или в файле bat или cmd.
Эти команды работают в PowerShell в интерактивном режиме
Код PowerShell:
#save creds
$creds=Get-Credential -Credential npjcho
#create session
$session = New-CimSession –ComputerName "server-a.np.domainx.com", "server-b.np.domainx.com" -Credential $creds
#query the data needed.
Get-CimInstance -ClassName win32_operatingsystem -CimSession $session | select csname, lastbootuptime
Код пакетного файла Windows / CMD:
powershell -noexit "amp; ""C:UsersjchoDownloadsremote_host_reboot_time.ps1"""
pause
Сообщение об ошибке:
C:UsersjchoDownloads>powershell -noexit "amp; ""C:UsersjchoDownloadsremote_host_reboot_time.ps1"""
At C:UsersjchoDownloadsremote_host_reboot_time.ps1:5 char:101
... rver-a.np.domainx.com", "server-b.np.domainx.com" -Credential $creds
~~~~~~~~~~~~~~~~~~~~
The string is missing the terminator: ".
CategoryInfo : ParserError: (:) [], ParseException
FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Версии ОС и PS:
Window 10
PS Version : 5.1.18362.1171
Когда я запускаю эти 3 команды PS в интерактивном режиме, я получаю следующий вывод, который я ожидаю от файлов сценариев
Хороший результат:
csname lastbootuptime
------ --------------
server-a 12/13/2019 12:30:37 AM
server-b 12/12/2019 12:01:53 AM
Я с удивлением вижу, что Windows powershell была сделана настолько запутанной для сценариев / использования.
Комментарии:
1. Почему бы не запустить файл PS1 через
powershell -File C:UsersjchoDownloadsremote_host_reboot_time.ps1
У меня такое чувство, что способ, которым вы его выполняете, используя двойные кавычки, иamp;
оператор вызывает ваши проблемы.2. Неважно, это не вызывает вашей проблемы, я смог воссоздать ее на своем компьютере.
Ответ №1:
Похоже, проблема связана с кодировкой символов. Это всегда досадная ошибка для устранения неполадок, потому что все всегда «выглядит» нормально.
Вот как вы можете определить проблему для вашего конкретного сценария:
Откройте свой скрипт в notepad (или в вашем любимом редакторе, но я использую notepad ).
Затем в меню «Кодирование» выберите «ANSI». Вы увидите, что в вашем случае дефис в «имя_компьютера» не является стандартным дефисом ASCII. Вероятно, это связано с тем, что вы скопировали свой скрипт из другого места.
Например, когда я копирую ваш скрипт в файл UTF-8 в notepad , затем переключаю кодировку на ANSI, я вижу это:
New-CimSession –ComputerName
Когда я ищу шестнадцатеричный код для –
, то есть E28093
, я нахожу, что это:
Символ Unicode короткое ТИРЕ (U 2013) https://www.fileformat.info/info/unicode/char/2013/index.htm
Комментарии:
1. Спасибо, Чад — я знал, что в этих строках что-то не так, но не был уверен, как мне это сделать, к счастью, я использую Notedpad , поэтому смог исправить это и его работу
2. Отлично сделано. Тире и одинарные / двойные кавычки являются частой причиной копирования / вставки
3. Длинные тире, тире и «умные» кавычки — все это распространенные проблемы с повреждением символов. Это часто вызывается Microsoft Word и другими программами для обработки текстов, но другие виды чрезмерно умных программ также могут быть источником этих проблем.
4. @BoogaRoo по крайней мере, с помощью интеллектуальных кавычек вы можете _условно_ визуально идентифицировать их. Хуже всего обстоят дела в подобных случаях, когда «короткое тире» выглядит так же, как обычное тире. Как разработчик базы данных, это проклятие моего существования, лол.