首先测试你是否能让Powershell从笔记本电脑或其他机器上远程执行你的目标。
使用下面的Powershell脚本来测试你的WinRM连接和自签名证书,注意测试Powershell脚本中的-SkipCNCheck-SkipCACheck PSSession选项。如果您使用的是自签名证书,这些选项是必不可少的,您还需要在 "在目标机器上运行Powershell "模板(第3版)的 "会话选项 "中提供相同的开关。
注意
:我只用了一个本地主机IP作为例子,以免意外地使用了一个真实的IP。
$password = ConvertTo-SecureString 'password goes here' -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ('yourDomain\yourDomainUserId', $password)
$sessionOptions = New-PSSessionOption -SkipCNCheck -SkipCACheck
$remote_session = new-pssession -computername 127.0.0.1 -UseSSL -credential $credential -SessionOption $sessionOptions
Invoke-Command -session $remote_session -ScriptBlock { Get-Culture }
还要确保你已经设置了一个WinRM监听器来监听目标机的外部IP,并在该监听器上注册自签名的证书缩略图。使用WinRM命令来做到这一点(使用你的实际外部公共IP),例如。
winrm create winrm/config/Listener?Address=IP:127.0.0.1+Transport=HTTPS @{Hostname="some.hostname.outhere.net"; CertificateThumbprint="[YOUR CERT THUMBPRINT]ABCDEF0247283798137030174027"}
还有一点,在 "在目标机器上运行Powershell "模板的 "机器 "字段中使用机器的外部公共IP来代替FQDN或DNS名称。如果你使用的是自签名的证书,你必须这样做。
一旦你的测试Powershell脚本在远程机器上使用自签名证书进行连接和握手,你几乎可以保证 "在目标机器上运行Powershell "也能成功。
其他需要检查的事项。
确保你已经使用通配符 "*"作为服务器名称或IP来设置TrustedHosts。在你有了基本的连接后,你可以回去微调你的安全性。
你可能需要一个域级GPO来允许WinRM服务不受阻碍地运行,这取决于你的目标机器是一台工作站还是一台加入了域的机器。
如果一切都失败了,在你的目标机上下载并安装Wireshark,设置一个IP过滤器,只监听客户服务器的IP,并分析流量,大多数情况下,这将提示你什么被拒绝以及为什么。
希望这有帮助。