如何通过 PowerShell 使用非管理员用户停止未连接到域的远程服务器上的服务

如何通过 PowerShell 使用非管理员用户停止未连接到域的远程服务器上的服务

我已经开始编写脚本来实现这一点:

$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

相关内容