Как получить имя компьютера с помощью PsCustomObject?
В настоящее время у меня есть скрипт, который пингует список серверов и проверяет состояние служб, работающих на каждом сервере. Я хочу написать в log.csv.
Я хочу показать, какие компьютеры находятся в автономном режиме, и показать, какая служба находится в состоянии Остановлено.
Как я могу получить имя компьютера или машины с помощью PSCustumObject? В выводе CSV есть строка с надписью offline, но перед ним нет имени компьютера.
$serviceList = Get-Content C:\services.txt
$results = Get-Content C:\servers.txt | ForEach-Object {
if (Test-Connection -ComputerName $_ -BufferSize 16 -Count 1 -EA 0 -Quiet) {
foreach ($service in $serviceList) {
if ($s=get-service -computer $_ -name $service -ErrorAction SilentlyContinue)
{
$s | select MachineName, ServiceName, Status, StartType
} else {
# "$_ - Service '$service' does not exist."
}
}
} else {
$status = Write-Output "Offline"
}
[pscustomobject][ordered]@{
Machine = $_
Status = $status
}
}
$results | Export-CSV C:\log.csv -notypeinformation -Append
1 ответ
Когда вы выводите результаты из Get-Service
вы выбираете MachineName
:
$s | select MachineName, ServiceName, Status, StartType
Затем для автономного компьютера вы строите объект, используя Machine
:
[pscustomobject][ordered]@{
Machine = $_
Status = $status
}
Вам нужно обновить свой пользовательский объект до MachineName
поэтому он соответствует свойствам, которые вы выбрали выше.
Также необходимо перейти в else{}
(замена $status = Write-Output "Offline"
) поэтому он вызывается только когда компьютер находится в автономном режиме.
Затем вы получите ожидаемый результат:
MachineName ServiceName Статус StartType ----------- ----------- ------ --------- локальный спулер localhost DusmSvc работает автоматически localhost DeviceInstall остановлен вручную noname Оффлайн
Обновленный код с бонусным обновлением для несуществующих сервисов:
$serviceList = Get-Content C:\services.txt
$results = Get-Content C:\servers.txt| ForEach-Object {
if (Test-Connection -ComputerName $_ -BufferSize 16 -Count 1 -EA 0 -Quiet) {
foreach ($service in $serviceList) {
if ($s = get-service -computer $_ -name $service -ErrorAction SilentlyContinue) {
$s | select MachineName, ServiceName, Status, StartType
}
else {
[pscustomobject][ordered]@{
MachineName = $_
ServiceName = $service
Status = "NotFound"
}
}
}
}
else {
[pscustomobject][ordered]@{
MachineName = $_
Status = "Offline"
}
}
}
$results | Export-CSV C:\log.csv -notypeinformation -Append