![如何通过 PowerShell 使用非管理员用户停止未连接到域的远程服务器上的服务](https://linux22.com/image/670327/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20PowerShell%20%E4%BD%BF%E7%94%A8%E9%9D%9E%E7%AE%A1%E7%90%86%E5%91%98%E7%94%A8%E6%88%B7%E5%81%9C%E6%AD%A2%E6%9C%AA%E8%BF%9E%E6%8E%A5%E5%88%B0%E5%9F%9F%E7%9A%84%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E6%9C%8D%E5%8A%A1.png)
我已经开始编写脚本来实现这一点:
$SecurePassword = ConvertTo-SecureString –String $Password –AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, $SecurePassword
$sess = New-PSSession -ComputerName $IPAddress -Credential $Credential
Invoke-Command -Session $sess -ScriptBlock {Get-Service}
Remove-PSSession -Session $sess
但我收到此连接错误:
New-PSSession : [xx.xx.xx.xx] 连接到远程服务器 xx.xx.xx.xx 失败,并显示以下错误消息:WinRM 无法完成该操作。请验证指定的计算机名称是否有效、计算机是否可通过网络访问以及 WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外会限制对同一本地子网内的远程计算机的访问。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
- 为了尝试使脚本正常运行,我
Enable-PSRemoting
在客户端和远程服务器上都运行了该命令。 - 由于远程服务器不是域的一部分,我已将服务器的 IP 地址添加到
TrustedHosts
客户端服务器上。
我一直在使用这页面以及其他许多页面尝试解决此问题,据我所知,它应该可以正常工作(或至少没有连接问题)。
- 我连接到远程服务器的用户是不是管理员,但是是 的一部分
Remote Managers Group
。 - 我也听从了这授予服务访问权限的问题。我认为还没到这一步,但为了完整性我想提一下。
任何答复、建议、提议等都非常感谢。谢谢。
答案1
问题出在远程服务器上的防火墙设置上。以下HOW TO ADD A FIREWALL EXCEPTION
部分状态about_Remote_Troubleshooting
:
Enable-PSRemoting 尝试为 WS-Management 通信创建防火墙例外。在 Windows 的服务器版本上,它会为所有网络位置创建防火墙例外。
确实如此。但是,如果网络配置文件是私有的,则仅允许来自本地子网上的服务器的连接,而我的情况并非如此。在防火墙规则中添加额外的范围后,我能够连接到服务器。
我还有一个问题需要解决,因为我无法获取正在使用的服务列表Get-Service
,但我知道要停止的服务的名称,所以我可以将其替换为Stop-Service
。脚本现在如下所示:
$securePassword = ConvertTo-SecureString –String $password –AsPlainText -Force
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $userName, $securePassword
$sess = New-PSSession -ComputerName $ipAddress -Credential $credential
$scriptBlock = {
$serviceName = "SeriveName"
Stop-Service -Name $serviceName
}
Invoke-Command -Session $sess -ScriptBlock $scriptBlock
Remove-PSSession -Session $sess