Powershell 脚本错误
Powershell script errors out
我在这个论坛和其他论坛上引用了很多主题,但无法让这个脚本在 ps 或 bat 或 cmd 文件中以脚本形式工作。
这些命令在 PowerShell 中交互工作
PowerShell 代码:
#save creds
$creds=Get-Credential -Credential np\jcho
#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 Batch/CMD 文件代码:
powershell -noexit "& ""C:\Users\jcho\Downloads\remote_host_reboot_time.ps1"""
pause
错误信息:
C:\Users\jcho\Downloads>powershell -noexit "& ""C:\Users\jcho\Downloads\remote_host_reboot_time.ps1"""
At C:\Users\jcho\Downloads\remote_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
OS 和 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 变得如此复杂 script/use。
看来问题与字符编码有关。这总是一个令人讨厌的故障排除错误,因为事情总是“看起来”正常。
以下是确定特定脚本问题的方法:
在记事本++(或你最喜欢的编辑器,但我使用的是记事本++)中打开你的脚本。
然后在“编码”菜单下,select“ANSI”。您会看到,在您的情况下,“ComputerName”上的连字符不是标准的 ASCII 连字符。这可能是因为您从其他地方复制粘贴了您的脚本。
例如,当我将您的脚本复制到记事本++中的 UTF-8 文件中,然后将编码切换为 ANSI 时,我看到了:
New-CimSession –ComputerName
当我查找 –
的十六进制代码时,即 E28093
,我发现它是这样的:
Unicode 字符 'EN DASH' (U+2013)
https://www.fileformat.info/info/unicode/char/2013/index.htm
我在这个论坛和其他论坛上引用了很多主题,但无法让这个脚本在 ps 或 bat 或 cmd 文件中以脚本形式工作。
这些命令在 PowerShell 中交互工作
PowerShell 代码:
#save creds
$creds=Get-Credential -Credential np\jcho
#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 Batch/CMD 文件代码:
powershell -noexit "& ""C:\Users\jcho\Downloads\remote_host_reboot_time.ps1"""
pause
错误信息:
C:\Users\jcho\Downloads>powershell -noexit "& ""C:\Users\jcho\Downloads\remote_host_reboot_time.ps1"""
At C:\Users\jcho\Downloads\remote_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
OS 和 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 变得如此复杂 script/use。
看来问题与字符编码有关。这总是一个令人讨厌的故障排除错误,因为事情总是“看起来”正常。
以下是确定特定脚本问题的方法:
在记事本++(或你最喜欢的编辑器,但我使用的是记事本++)中打开你的脚本。
然后在“编码”菜单下,select“ANSI”。您会看到,在您的情况下,“ComputerName”上的连字符不是标准的 ASCII 连字符。这可能是因为您从其他地方复制粘贴了您的脚本。
例如,当我将您的脚本复制到记事本++中的 UTF-8 文件中,然后将编码切换为 ANSI 时,我看到了:
New-CimSession –ComputerName
当我查找 –
的十六进制代码时,即 E28093
,我发现它是这样的:
Unicode 字符 'EN DASH' (U+2013) https://www.fileformat.info/info/unicode/char/2013/index.htm