使用Import-CSV执行Invoke-Command时出现WinRM错误的排查
问题:PowerShell远程批量执行脚本报错排查
问题描述
我编写了一个简单脚本,使用Invoke-Command(简称icm)在多台远程节点上执行Cmd命令。所用CSV文件包含host和stub两列,无空格等异常内容。脚本代码如下:
import-csv test.csv | foreach-object { $host = $_.host $stub = $_.stub icm -computername $host -scriptblock {cmd /c c:\path\to\executable.exe <executable switches> $stub } }
其中$stub是该可执行文件的输入参数之一。手动在PowerShell提示符中输入$host和$stub的值执行上述命令可正常运行,但通过Import-CSV读取参数执行时,会抛出WinRM错误。
错误信息
[system.management.automation.internal.host.internalhost] 连接远程服务器失败,错误信息如下:WinRM 无法处理请求。使用 Kerberos 身份验证时出现以下错误:找不到网络路径。 可能的原因包括: - 指定的用户名或密码无效。 - 在未指定身份验证方法和用户名时使用了 Kerberos。 - Kerberos 接受域用户名,但不接受本地用户名。 - 远程计算机名称和端口的服务主体名称 (SPN) 不存在。 - 客户端和远程计算机位于不同的域中,且两个域之间不存在信任关系。 检查上述问题后,请尝试以下操作: - 检查事件查看器中与身份验证相关的事件。 - 更改身份验证方法;将目标计算机添加到 WinRM TrustedHosts 配置设置中,或使用 HTTPS 传输。 请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 - 有关 WinRM 配置的详细信息,请运行以下命令:winrm help config。有关更多信息,请参阅 about_Remote_Troubleshooting 帮助主题。 + CategoryInfo : OpenError: (:) [], PSRemotingTransportException + FullyQualifiedErrorId : PSSessionStateBroken Cannot overwrite variable Host because it is read-only or constant. At C:\temp\bulk_rereg.ps1:2 char:6 + $host <<<< = $_.host + CategoryInfo : WriteError: (Host:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable
问题原因与解决办法
1. 内置只读变量冲突
$host是PowerShell的内置只读变量,用于表示当前主机会话对象,无法被用户赋值。你在脚本中尝试将CSV读取的主机名赋值给$host,直接触发了Cannot overwrite variable Host because it is read-only or constant错误。这会导致后续Invoke-Command使用的不是CSV中的主机名,而是内置的$host对象,进而引发WinRM连接失败。
解决:将变量名改为非内置名称,比如$hostname:
$hostname = $_.host
2. 远程脚本块无法访问本地变量
远程执行的scriptblock运行在独立的会话中,默认无法直接引用本地的$stub变量,这会导致远程执行的可执行文件得不到正确的参数。
解决:使用PowerShell的$using:语法,在远程脚本块中引用本地变量:
icm -computername $hostname -scriptblock {cmd /c c:\path\to\executable.exe <executable switches> $using:stub }
修正后的完整脚本
import-csv test.csv | foreach-object { $hostname = $_.host $stub = $_.stub icm -computername $hostname -scriptblock {cmd /c c:\path\to\executable.exe <executable switches> $using:stub } }
内容的提问来源于stack exchange,提问作者dbutts
相关产品推荐
相关产品推荐

