我正在尝试实现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]失败,并显示以下错误消息:客户端无法连接到请求中指定的目标。验证目标上的服务是否正在运行并且正在接受请求。查阅目标上运行的WS-Management服务的日志和文档,最常见的是IIS或WinRM。如果目标是WinRM服务,请在目标上运行以下命令以分析和配置WinRM服务:“winrm quickconfig”。有关详细信息,请参阅about_Remote_Troubleshooting帮助主题。
在行:1个字符:1
+ Enter_PSSession -ComputerName [remote_server_name]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:无效/参数:([remote_server_name]:string)[Enter-PSSession],PSRemotingTransportException
+ FullyQualifiedErrorId:CreateRemoteRunspaceFailed
我根据错误消息建议执行了“winrm quickconfig”。再一次,回到控制台:
WinRM已设置为在此计算机上接收请求。
WinRM已经设置为在此计算机上进行远程管理。
重试
Enter-PSSession –ComputerName [remote_server_name]
从客户端计算机返回相同的错误。
我仔细检查了WinRM服务是否在远程服务器上运行。 Windows远程管理(HTTP-In)防火墙规则配置为TCP协议,本地端口5985和所有远程端口。
即使我执行
Get-Service WinRM –ComputerName [remote_server_name]
从客户端机器,我们看到返回到控制台,确认WinRM服务确实在远程服务器上运行:
状态名称DisplayName
------ ---- -----------
运行WinRM Windows远程管理(WS-Manag ...
在远程计算机上执行以下命令
WinRM Enumerate WinRM/Config/Listener
返回到控制台,演示正确的端口是否打开:
听众[来源=“GPO”]
地址= *
港口= 5985
主机名Enabled = 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"
}
返回以下错误消息:
New-Object:使用“2”参数调用“.ctor”的异常:“由于目标机器主动拒绝它,因此无法建立连接[remote_server_ipaddress]:5985”
在行:4 char:15
+ ... connection = New-Object System.Net.Sockets.TcpClient($ ip address,$ port ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:InvalidOperation:(:) [New-Object],MethodInvocationException
+ FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
我有另一台远程服务器,运行带有PowerShell v4的Windows Server 2012 R2。我已经在这个盒子上启用了PS remoting而没有问题,可以从同一个客户端远程执行PS脚本。
那么,我错过了什么? PowerShell版本之间是否存在兼容性问题?
我的客户端PC正在运行PowerShell 5,我正常运行的远程服务器正在运行PowerShell 4,我的故障远程服务器正在运行PowerShell 2。
非常欢迎见解,指导,建议。谢谢你的期待。
更新:
我已经将测试虚拟机上的.Net Framework更新为.Net 4.7.2,并在受影响的虚拟机上安装了PowerShell 4(与正常运行的盒子相同)。
在比较我工作的VM和受影响的计算机之间的WinRM相关注册表项时,我找到了密钥:
HKLM \ SOFTWARE \微软\的Windows \ CurrentVersion \ WSMAN \服务
在工作虚拟机上,我找到了一个32位的“允许远程请求”,其值为1.受影响的计算机的注册表中缺少此条目。我添加了它,重启了机器,重试了连接请求。
不过,同样的问题仍然存在。
您的主机似乎一直拒绝客户端计算机。
尝试通过执行以下操作获取主机的凭据:
$c = Get-Credential
New-CimSession -ComputerName [name] -Credential $c
然后,输入您的主机用户名和密码。
如果仍然无效,请尝试在主机上手动将客户端添加为授权用户。