You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:37:48