我只能获取命令以在文本文件中返回第一台计算机上的服务。对于这个任务,有没有比 for-each 更好的方法?
Get-Service *vault* -ComputerName (Get-Content c:\users\sean\desktop\js.txt) | select name,status,machinename | sort machinename | format-table -autosize
我只能获取命令以在文本文件中返回第一台计算机上的服务。对于这个任务,有没有比 for-each 更好的方法?
Get-Service *vault* -ComputerName (Get-Content c:\users\sean\desktop\js.txt) | select name,status,machinename | sort machinename | format-table -autosize
不带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
我会先尝试顶部的。我会测试,但我现在无法访问任何可以进行适当测试的东西。
$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
这对我有用,它为我提供了文本文件中的每台计算机,它会查找服务。
这就是我使用的。我从 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
}
遵循旧版本 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
}`
$servers = Get-Content .\servers.txt
Foreach ($server in $servers) {
"$server"
Get-Service -ComputerName $Server -name -like "*vault*"
"-------------------"
}
您可以通过以下方式获取 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
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
尼克的解决方案对我完全不起作用。我最终写了一个快速而肮脏的作品:
$servers = Get-Content .\servers.txt
Foreach ($server in $servers) {
"$server"
Get-Service *vault*
"-------------------"
}