如何通过PowerShell获取Windows服务的登录账户?
解决PowerShell查看服务登录账户的问题
嘿,作为PowerShell新手碰到这种情况太正常了!你已经搞定了服务状态检查的部分,现在只需要补上获取登录账户的逻辑就行。
首先得说清楚:Get-Service cmdlet确实没办法直接拿到服务的登录账户信息,你搜到的Get-WmiObject是个路子,但更推荐用**Get-CimInstance**(它是WMI的现代替代,兼容性和性能更好)。
下面是修改后的完整代码,我帮你把检查登录账户的部分加上了:
$serviceName = '<my service name>' $status = "" # 检查服务是否存在 If (Get-Service $serviceName -ErrorAction SilentlyContinue) { $service = Get-Service $serviceName # 检查服务运行状态 If ($service.Status -eq 'Running') { $status = "$serviceName found and is running." } Else { $status = "$serviceName found, but it is not running." } # 获取服务的登录账户(用Get-CimInstance) $serviceCim = Get-CimInstance -ClassName Win32_Service -Filter "Name='$serviceName'" $logonAccount = $serviceCim.StartName # 把登录账户信息加到状态里 $status += "`nLog On As account: $logonAccount" } Else { $status = "$serviceName not found." } write-host "Status: $status`n" pause
关键说明:
Win32_Service类里的StartName属性就是服务的登录账户,不管是本地账户还是AD域账户都能拿到。- 如果坚持要用
Get-WmiObject,可以把Get-CimInstance那行换成:$serviceWmi = Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'" $logonAccount = $serviceWmi.StartName - 你还可以加个判断,检查登录账户是否符合预期的AD账户,比如:
$expectedAccount = 'DOMAIN\YourADAccount' If ($logonAccount -eq $expectedAccount) { $status += "`n✅ Logon account matches expected AD account." } Else { $status += "`n❌ Logon account does NOT match expected AD account. Expected: $expectedAccount" }
这样就能完美实现你的需求:先检查服务是否存在、是否运行,再验证它的登录账户是不是正确的AD账户啦!
内容的提问来源于stack exchange,提问作者Tom M.
相关产品推荐
相关产品推荐

