在远程主机上查找服务帐户

时间:2018-10-04 07:48:26

标签: powershell

请问您如何建议查找使用特定服务帐户启动Windows服务的所有服务器?

我正在使用以下代码在PowerShell中进行尝试:

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

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

gwmi : Access is denied. (Exception from HRESULT: 0x80070005 
(E_ACCESSDENIED))
At 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

screenshot

1 个答案:

答案 0 :(得分:-1)

在使用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中的版本。