【问题标题】:How to list all the services running with a service account in a server using Powershell如何使用 Powershell 列出服务器中使用服务帐户运行的所有服务
【发布时间】:2011-09-07 17:29:46
【问题描述】:

我想使用 powershell 更新在多个服务器上以一个帐户运行的所有服务的密码。我尝试了 Get-process、Get-WMIObject cmdlet,但这两个命令没有使用 serviceaccount。有没有办法通过将服务帐户,密码作为参数传递给脚本来更新使用帐户运行的所有服务的密码。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    要使用特定帐户获取服务列表,您可以执行以下操作:

    Get-WmiObject "win32_service" -Filter "StartName='domain\\user'"
    

    要更改这些密码,您可以:

    Get-WmiObject "win32_service" -Filter "StartName='domain\\user'" | 
    %{$_.StopService();$_.Change($null,$null,$null,$null,$null,$null,$null,"blah");}
    

    从这里:http://www.send4help.net/change-remote-windows-service-credentials-password-powershel-495

    【讨论】:

    • 我认为这行不通。 Get-WmiObject 不支持 StartName
    • 它就像一个魅力!接受这个答案。它可以满足您的需要
    • @Ram490 - StartName 基于返回的对象,根据您查询的内容,它可以是不同的类型。
    【解决方案2】:

    试试这个:

    Function GLOBAL:GET-PROCESSUSER ( $ProcessID ) {
    
        (GET-WMIOBJECT win32_process  –filter “Handle=$ProcessID”).GetOwner().User
    
    }
    
    $svcs = Get-Process | Select-Object name, starttime, ID
    
    $a = @()
    
    
    foreach ($svc in $svcs)
    { 
               if ( $svc.name -ne "Idle" -and $svc.name -ne "System")
               {           
    
    
               $al = New-Object System.Object
               $al | Add-Member -type NoteProperty -name Name -Value $svc.name
               $al | Add-Member -type NoteProperty -name Owner -Value ( get-processuser $svc.id)
    
               $a += $al
               } 
    }
    
    $a
    

    评论后编辑:

    $a = (GET-WMIOBJECT win32_service) | ? { $_.startname -eq "domain\\username"} | %{$_.StopService();$_.Change($null,$null,$null,$null,$null,$null,$null,"newpassword");}
    

    【讨论】:

    • 谢谢。除了 starttime,脚本列出了使用不同帐户运行的所有服务。非常感谢。但是如何更新使用特定服务帐户运行的服务的密码?
    • 嗨克里斯蒂安..我刚刚分析了你的脚本。它仅列出计算机上正在运行的服务。但是当我们更新在服务帐户下运行的服务的密码时,我们需要同时考虑正在运行的服务和未运行的服务。在这种情况下,我们如何使用 Powershell 来实现这一点。
    【解决方案3】:

    这就是你们需要的

    Get-WMIObject Win32_Service | Where-Object {$_.startname -ne "localSystem" }| Where-Object {$_.startname -ne "NT AUTHORITY\LocalService" } |Where-Object {$_.startname -ne "NT AUTHORITY\NetworkService" } |select startname, name 
    

    【讨论】:

      【解决方案4】:

      是的 - 这似乎是最好的方法

      Get-WMIObject Win32_Service | Where-Object {($_.startname -ne "NT AUTHORITY\LocalService") -and ($_.startname -ne "NT AUTHORITY\NetworkService") -and ($_.startname -ne "localSystem") } `
      |select @{ Name = "Service Account " ; Expression = { ( $_.startname ) } }, `
      @{ Name = "Service Dispaly Name " ; Expression = { ( $_.name ) } }, StartMode,State, Status | FT -AutoSize
      

      【讨论】:

      • 欢迎来到 StackOverflow!请提供带有参考资料的具体答案。如果您有任何建议或需要澄清,请发表评论。我们有关于How to write a good answer 的指导方针。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多