5

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

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

8 回答 8

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

我会先尝试顶部的。我会测试,但我现在无法访问任何可以进行适当测试的东西。

于 2012-09-20T16:15:29.920 回答
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

这对我有用,它为我提供了文本文件中的每台计算机,它会查找服务。

于 2016-05-14T22:37:50.753 回答
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

}
于 2016-06-08T14:59:53.783 回答
1

遵循旧版本 PowerShell 的内存限制限制,我需要刷新我的代码:

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

新代码:

`$servers = Get-Content "computers.txt" Foreach ($servers in $servers) {

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

}`

于 2017-09-27T12:18:40.560 回答
1
$servers = Get-Content .\servers.txt
Foreach ($server in $servers) {
  "$server"
  Get-Service -ComputerName $Server -name -like "*vault*"
  "-------------------"
}
于 2016-08-10T14:18:31.460 回答
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

于 2017-12-15T23:06:59.120 回答
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
于 2016-05-18T07:30:04.750 回答
-1

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

$servers = Get-Content .\servers.txt
Foreach ($server in $servers) {
"$server"
Get-Service *vault*
"-------------------"
}
于 2016-05-13T18:03:50.583 回答