我需要有一个脚本,该脚本可以检查具有证书的多个服务器的特定服务状态。我面临的主要问题是每个服务器的服务列表都不同。例如,在一台服务器中它是Web服务,另一台是数据库服务等。我想在第一列中保留服务器名称的csv文件,在另一列中保留其相关服务。脚本需要对此进行验证并继续运行。预期的输出为CSV。到现在为止,我做了很多事情,超出了范围。.希望有人可以帮助我。
$CSVData = import-csv ".\Service.csv"
$Servernames = $CSVData.Servername | sort -unique
$Cred = Get-Credential
foreach ($server in $Servernames) {
$Services = $CSVData | Where {$_.Servername -eq $Server} | Select service
foreach ($Service in $Services) {
write-host $Server
$Serv = $Service.service
Get-WMIObject -computer $server -credential $cred -Query "Select * From Win32_Service WHERE Name Like '$Serv'" | select Name, state
}
}
有什么建议吗?还有助于将输出格式化为CSV
答案 0 :(得分:1)
$CSVData = import-csv ".\Service.csv"
$Servernames = $CSVData.Servername | sort -unique
$output = @()
$Cred = Get-Credential
foreach ($server in $Servernames) {
$Services = $CSVData | Where {$_.Servername -eq $Server} | Select service
foreach ($Service in $Services) {
write-host $Server
$Serv = $Service.service
#$ServStat = Get-WMIObject -computer $server -credential $cred -Query "Select * From Win32_Service WHERE Name Like '$Serv'" | select displayname, state
$ServStat = Get-WMIObject -Query "Select * From Win32_Service WHERE Name Like '$Serv'" | select displayname, state
$Info =New-object -Typename PSObject
$Info | Add-Member -MemberType NoteProperty -Name "Hostname" -value $Server
$Info | Add-Member -MemberType NoteProperty -Name "ServiceName" -value $ServStat.DisplayName
$Info | Add-Member -MemberType NoteProperty -Name "ServiceStatus" -value $ServStat.state
$Output +=$Info
}
}
$Output | export-csv ".\Result.csv" -notype
这是我找到的解决方案,建议是否还有改进的空间
答案 1 :(得分:0)
执行此操作的多种方法。
您可以从包含服务器名称和服务的machines.csv
文件开始:
server,service
server1,WinRM
server2,WinRM
...
然后,您可以使用Import-CSV
导入此CSV文件:
$computers = Import-Csv -Path .\machines.csv
然后通过使用Get-Service
在远程计算机上运行Invoke-Command
来检查服务状态:
foreach ($computer in $computers) {
$cred = Get-Credential -Message "Enter username and password for $($computer.Server)"
Write-host "$($computer.Service) Service checking on $($computer.Server)" -b "green" -foregroundcolor "red"
$serviceParams = @{
"ComputerName" = $computer.Server
"Command" = {Get-Service -Name $using:computer.Service}
"Credential" = $cred
}
$service = Invoke-Command @serviceParams
Write-Host "$($computer.Service) Service on $($computer.Server) : $($service.Status)" -b "green" -foregroundcolor "red"
}