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