我正在尝试实施PowerShell远程处理(用于在远程服务器上执行PowerShell脚本)。 我的远程服务器正在运行Windows Server 2008和PowerShell v2。
从提升权限的PS控制台,我执行了以下cmdlet:
Enable-PSRemoting
返回控制台:
已将WinRM设置为在此计算机上接收请求。
已经在该计算机上设置了WinRM进行远程管理。
在客户端计算机上提升的PowerShell会话中,我执行了以下cmdlet:
Enter-PSSession –ComputerName [remote_server_name]
这次,返回控制台:
Enter-PSSession:连接到远程服务器[remote_server_name]失败,并显示以下错误消息: 客户端无法连接到请求中指定的目标。验证目标上的服务正在运行并且正在接受请求。有关在目标(通常是IIS或WinRM)上运行的WS-Management服务的信息,请查阅日志和文档。如果目标是WinRM服务,请在目标上运行以下命令以分析和配置WinRM服务:“ winrm quickconfig”。有关更多信息,请参见about_Remote_Troubleshooting帮助主题。
在第1行:1个字符:1
+ Enter_PSSession –ComputerName [远程服务器名称]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p >
+ CategoryInfo:无效/参数:([[remote_server_name]:string)[Enter-PSSession],PSRemotingTransportException
+ FullyQualifiedErrorId:CreateRemoteRunspaceFailed
我按照错误消息建议执行了“ winrm quickconfig”。再次返回控制台:
已将WinRM设置为在此计算机上接收请求。
已经在该计算机上设置了WinRM进行远程管理。
重试
Enter-PSSession –ComputerName [remote_server_name]
从客户端计算机再次输入相同的错误。
我再次检查了WinRM服务是否正在远程服务器上运行。 已为TCP协议,本地端口5985和所有远程端口配置了Windows远程管理(HTTP-In)防火墙规则。
即使我执行
Get-Service WinRM –ComputerName [remote_server_name]
从客户端计算机上,我们看到返回到控制台,确认WinRM服务确实在远程服务器上运行:
状态名称DisplayName
------ ---- -----------
运行WinRM Windows远程管理(WS-Manag…
在远程计算机上执行以下命令
WinRM Enumerate WinRM/Config/Listener
返回控制台,说明正确的端口已打开:
Listener [Source =“ GPO”]
地址= *
端口= 5985
已启用主机名= true
URLPrefix = wsman
CertificateThumbprint ListeningOn = null
但是,执行
$remoteServer = [test_server_name]
$port = 5985
$connection = New-Object System.Net.Sockets.TcpClient($remoteServer, $port)
if ($connection.Connected) {
Write-Host "Success"
}
else {
Write-Host "Failed"
}
返回以下错误消息:
新对象:使用“ 2”作为参数调用“ .ctor”的异常:“由于目标计算机主动拒绝了它,所以无法建立连接[remote_server_ipaddress]:5985”
在第4行:15个字符处
+ ...连接= New-Object System.Net.Sockets.TcpClient($ ipaddress,$ port ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
+ CategoryInfo:InvalidOperation:(:) [New-Object],MethodInvocationException
+ FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
我有另一台远程服务器,运行带有PowerShell v4的Windows Server 2012 R2。我已在此框中启用PS远程处理而没有问题,并且可以从同一客户端远程执行PS脚本。
那么,我想念什么? PowerShell版本之间是否存在兼容性问题?
我的客户端PC运行PowerShell 5,运行正常的远程服务器运行PowerShell 4,发生故障的远程服务器运行PowerShell 2。
有见识,指导,意见非常欢迎。感谢您的关注。
更新:
此后,我已经将两个测试VM上的.Net Framework更新为.Net 4.7.2,并在受影响的VM上安装了PowerShell 4(与功能正常的框相同)。
在比较我的工作VM和受影响的计算机之间与WinRM相关的注册表项时,我发现了关键:
HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ WSMAN \ Service
在正常运行的VM上,我发现了一个32位的“允许远程请求”,其分配值为1。受影响的计算机的注册表中缺少该条目。我添加了它,重新启动了计算机,重试了连接请求。
仍然,同样的问题仍然存在。
答案 0 :(得分:0)
您的主机似乎一直拒绝客户端计算机。
尝试通过执行以下操作获取主机的凭据:
$c = Get-Credential
New-CimSession -ComputerName [name] -Credential $c
然后输入您的主机名和密码。
如果仍然不起作用,请尝试将客户端作为授权用户手动添加到主机上。