我正在尝试通过PowerShell在远程服务器上运行批处理脚本。非常直截了当:
$password = ConvertTo-SecureString "password" -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ("domain\user", $password)
$sesh= new-pssession -computername "MSSCA" -credential $cred
invoke-command -session $sesh -scriptblock {
cmd.exe /C "C:\install.bat"
}
Remove-PSSession $sesh
这似乎随机失败,出现以下错误
在远程计算机上,运行powershell命令winrm quickconfig
以配置远程管理服务,通知我它已设置为接收请求/远程管理。
只有在运行此命令后invoke-command
才能正常运行。怎么样?我甚至没有配置任何东西。我该如何解决这个问题?
答案 0 :(得分:4)
查看winrm
的帮助(顺便说一下,这是Windows exe,而不是Powershell命令):
> winrm help quickconfig
Windows Remote Management Command Line Tool
winrm quickconfig [-quiet] [-transport:VALUE] [-force]
Performs configuration actions to enable this machine for remote management.
Includes:
1. Start the WinRM service
2. Set the WinRM service type to auto start
3. Create a listener to accept request on any IP address
4. Enable firewall exception for WS-Management traffic (for http only)
也许您的远程计算机启用了4个步骤的某些子集,但在运行该实用程序之前,并非一次性完成所有这些步骤。特别是,听众配置过去给我带来了麻烦。你可以在下面使用之前/之后检查监听器配置(在远程盒子上以管理员身份运行):
dir wsman:\localhost\listener
您还可以尝试运行Enable-PSRemoting
(必须以管理员身份运行),其中包括其他日志记录。
答案 1 :(得分:2)
之前我遇到过这个问题,最终成了脚本执行策略。在受影响的主机上使用Set-ExecutionPolicy cmdlet。出于测试目的,请使用此命令参数:
Set-ExecutionPolicy Unrestricted
我强烈建议您不要将设置保留为Unrestricted,但它对确定可能的原因很有用。
供参考: