2011-09-07 37 views

回答

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");} 
+0

感谢。除starttime外,脚本列出了使用不同帐户运行的所有服务。非常感谢。但是如何更新使用相关服务帐户运行的服务的密码? – Ram490

+0

按照manojlds回答这个任务 –

+0

嗨基督教..我刚刚分析了你的剧本。它仅列出计算机上正在运行的服务。但是,当我们更新在服务帐户下运行的服务的密码时,我们需要考虑正在运行的服务并且不运行服务。在这种情况下,我们如何使用Powershell实现这一点。 – Ram490

9

要获得使用特定帐户的服务列表,你可以这样做:

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

+0

我认为这是行不通的。 Get-WmiObject不支持StartName – Ram490

+0

它就像一个魅力!接受这个答案。它可以满足您的需求 –

+0

@ Ram490 - 'StartName'基于返回的对象,根据您查询的内容可以是不同的类型。 – manojlds

1

这是你们需要

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 
相关问题