在多台远程计算机上获取服务

时间:2012-09-20 16:07:45

标签: powershell

我只能获取命令以返回文本文件中第一台计算机上的服务。 对于这项任务,有没有比为每个人更好的方法?

Get-Service *vault* -ComputerName (Get-Content c:\users\sean\desktop\js.txt) | select name,status,machinename | sort machinename | format-table -autosize

8 个答案:

答案 0 :(得分:6)

在没有get-content的情况下尝试一下。试试这个:

Get-Service *vault* -ComputerName c:\users\sean\desktop\js.txt | select name,status,machinename | sort machinename | format-table -autosize

如果这不起作用,请尝试:

$Computers = Get-Content c:\users\sean\desktop\js.txt
Get-Service *vault* -computername $Computers | Select name,status,machinename |sort machinename |format-table -autosize

如果你渴望单行,那么试试这个:

Get-Content c:\users\sean\desktop\js.txt | Get-Service *vault* | Select name,status,machinename |sort machinename |format-table -autosize

我会先尝试顶级的。我会测试,但我现在无法访问任何可以进行正确测试的内容。

答案 1 :(得分:3)

$Computers = get-content .\desktop\test.txt
$Service = "Vault"

foreach ($computer in $computers) {
   $computer 

   $Servicestatus = get-service -name $Service -ComputerName $computer


}


$Servicestatus | select-object Name,Status,MachineName | format-table -Autosize

这适用于我,它为我提供了文本文件中的每台计算机,并且它会查找该服务。

答案 2 :(得分:2)

这就是我使用的。我从AD中的OU获取计算机列表。

Import-Module ActiveDirectory

$ou = "OU=Servers,DC=Domain,DC=com"

$servers = Get-ADComputer -Filter * -SearchBase $ou | select-object -expandproperty name

Foreach ($server in $servers){

    $Data = Get-Service -ServiceName *IIS*,*TomCat*,*httpd* -ComputerName $server | select machinename,name | sort machinename | format-table -AutoSize 

    Write($Data) | Out-File .\WebServices.txt -Append

}

答案 3 :(得分:1)

$servers = Get-Content .\servers.txt
Foreach ($server in $servers) {
  "$server"
  Get-Service -ComputerName $Server -name -like "*vault*"
  "-------------------"
}

答案 4 :(得分:1)

在使用旧版PowerShell的内存限制限制之后,我需要刷新我的代码:

旧代码: gwmi win32_service -computer $ allcomputers | Select-Object __SERVER,Name,state,startmode,StartName

新代码:

`$ servers = Get-Content“computers.txt” Foreach($ server in $ servers){

Get-WmiObject -Class WIN32_service -ComputerName $ server | Select-Object __SERVER,Name,state,startmode,StartName | Export-Csv -path“Report.CSV”-NoTypeInformation -Append

}`

答案 5 :(得分:1)

您可以通过以下方式获取AD域中所有服务的列表:

Get-ADComputer -Filter {OperatingSystem -Like “Windows 10*”} | ForEach-Object {Get-WmiObject -Class Win32_Service -Computer $_.Name}

关于此的更多有用示例(获取文本文件中列出的所有计算机的服务列表等): https://www.action1.com/kb/list_of_services_on_remote_computer.html

答案 6 :(得分:0)

Get-Service -ComputerName ...在PowerShell 2.0中有一个错误,它只返回第一台计算机。这已在较新版本中修复,因此如果您升级到PowerShell 3.0或更高版本,原始代码将正常工作。

作为解决方法,使用foreach循环为每台计算机运行Get-Service一次:

Get-Content c:\users\sean\desktop\js.txt |
ForEach-Object { Get-Service -Name *vault* -ComputerName $_ } |
Select-Object -Property Name, Status, MachineName |
Sort-Object -Property MachineName |
Format-Table -AutoSize

答案 7 :(得分:-1)

尼克斯的解决方案对我来说完全不起作用。我最后写了一个快速而肮脏的作品:

$servers = Get-Content .\servers.txt
Foreach ($server in $servers) {
"$server"
Get-Service *vault*
"-------------------"
}