首页 > 解决方案 > 在远程主机上查找服务帐户

问题描述

您能否建议如何找到使用特定服务帐户启动 Windows 服务的所有服务器?

我正在使用以下代码在 PowerShell 中尝试此操作:

Clear-Host
$address = Get-Content '.\asg connections.csv'
$serviceName = "startname='NT AUTHORITY\\LocalService'"
gwmi Win32_Service -Filter $serviceName -Computer $address

上面的代码适用于“localhost”,但对远程主机给出以下错误:

gwmi : 访问被拒绝。(来自 HRESULT 的异常:0x80070005
(E_ACCESSDENIED))
在 F:\Temp\powershell\play.ps1:30 char:1
+ gwmi win32_service -filter $serviceName -computer $address
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException
    + FullyQualifiedErrorId:System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

截屏

标签: powershell

解决方案


当您使用 PowerShell 远程处理时,您会隐式尝试使用您当前的 Windows 会话登录到目标计算机上的计算机的凭据。

看起来您对这些机器上的当前凭据集没有任何权利。

目标计算机是否与您当前的用户凭据加入了同一个域?
如果您有一组工作凭据,您可以使用这些凭据登录这些机器,您可以将其添加到您的命令中:

Clear-Host
#Promts you for the username and password you wish to save to a credential object
$Cred = Get-Credential
$address = Get-Content '.\asg connections.csv'
$serviceName = "startname='NT AUTHORITY\\LocalService'"
gwmi Win32_Service -Filter $serviceName -Computer $address -Credential $Cred

如果脚本需要自动运行,有几种不同的方法可以将凭证密码保存到只能由加密它的用户帐户解密的加密文本文件中,或者使用 Windows Credential Vault 中的构建。


推荐阅读