PowerShell远程连接问题

时间:2018-08-30 18:09:56

标签: powershell powershell-remoting winrm

我正在尝试实施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。受影响的计算机的注册表中缺少该条目。我添加了它,重新启动了计算机,重试了连接请求。

仍然,同样的问题仍然存在。

1 个答案:

答案 0 :(得分:0)

您的主机似乎一直拒绝客户端计算机。

尝试通过执行以下操作获取主机的凭据:

    $c = Get-Credential        
    New-CimSession -ComputerName [name] -Credential $c        

然后输入您的主机名和密码。

如果仍然不起作用,请尝试将客户端作为授权用户手动添加到主机上。