2016-02-09 4 views
1

Я работал сегодня вечером, чтобы перезаписать существующий скрипт проверки работоспособности сервера, чтобы сохранить его значения в хэш-таблице, и эта часть работает нормально. Тем не менее, я хочу, чтобы результаты попадали в CSV-файл, и этот файл был заполнен только серверами, где я отметил их как требующие действия. В настоящее время они генерируют идентификатор события 7011 или не проходят тест ping на Test-Connection.hashtable filter/select

Вот код:

$CheckServer = @{} 
$Servers = (Get-Content $Dir\Test.txt) 
foreach ($Server in $Servers) { 
    $CheckServer.EventID7011 = Get-Eventlog -LogName System -ComputerName $Server -Newest 1 | 
     Where-Object {$_.EventId -eq 7011} | select Message 
    if ($CheckServer.EventID -ne $Null) { 
     $CheckServer.Server = "$Server" 
     $CheckServer.ActionReq = "Yes" 
    } 

    $CheckServer.Ping = Test-Connection -ComputerName $Server -Count 1 -Quiet 
    if (! $CheckServer.Ping) { 
     $CheckServer.Server = "$Server" 
     $CheckServer.ActionReq ="Yes" 
     $CheckServer.Ping = "Offline" 
    } else { 
     $CheckServer.Server = "$Server" 
     $CheckServer.ActionReq = "No" 
     $CheckServer.Ping = "Online" 
    } 

    New-Object -TypeName PSObject -Property $CheckServer | 
     Export-Csv "ScanResults.csv" -NoTypeInformation -Append 
} 

мне нужен правильный код в конце концов, как он стоит, скрипт отлично работает для сбора/хранения данных в хэш-массиве $CheckServer, но я бы например, выбирать только те серверы, для которых требуется действие. Итак, если я сканирую 100 серверов, и 2 из них находятся в состоянии отказа ping, я хочу только те, которые были выбраны и отправлены в Export-Csv.

+0

Куда вы застряли? Вы можете фильтровать с помощью 'Where-Object' и экспортировать его в csv с помощью' Export-Csv' –

+0

Thx для быстрого ответа - я не включил код, который я пытался использовать за последние несколько часов - я просто оставил его незавершенным. Теперь он отлично работает, чтобы отображать ВСЕ результаты, но я хочу показывать только те серверы, на которых я ранее устанавливал «ActionReq = Да», когда они терпят неудачу при подключении к тестированию, или регистрировать идентификатор события sys 7011. – Kenny

ответ

0

Вам необходимо сохранить объекты в списке, прежде чем вы сможете их фильтровать и экспортировать. Смотрите строки с комментариями в коде:

$CheckServer = @{} 
$serverObjects = @() # create a list of server objects 
$Servers = (get-content $Dir\Test.txt) 
ForEach ($Server in $Servers) { 

$CheckServer.EventID7011 = get-eventlog -LogName System -ComputerName 
$Server -newest 1 | where-object {$_.eventID -eq 7011} |select message 
If ($CheckServer.EventID -ne $Null) { 
$CheckServer.Server="$Server" 
$CheckServer.ActionReq = "Yes"} 

$CheckServer.Ping = Test-Connection -ComputerName $Server -count 1 -quiet 
if (! $CheckServer.Ping) { 
    $CheckServer.Server="$Server" 
    $CheckServer.ActionReq ="Yes" 
    $CheckServer.Ping= "Offline"} 

Else { 
    $CheckServer.Server="$Server" 
    $CheckServer.ActionReq ="No" 
    $CheckServer.Ping= "Online"} 

    # Add the server object to the list 
     $serverObjects += New-Object -TypeName PSObject -Property $CheckServer 
    } 
} 
# now filter it: 
$serverObjects | where ActionReq -eq "Yes" | Export-Csv -Path "...." 
+0

О, хватит! Так просто! Большое спасибо, я пропустил его один раз, и он сработал! Я собираюсь добавить еще несколько тестов к нему, так как он работает с дополнительными тестами и отчитывается позже сегодня - выглядит очень многообещающим до сих пор, поэтому много! – Kenny

+0

youre добро пожаловать, удачи –

1

Если вы хотите только серверы, которые не реагируют на Test-Connection на выходе все равно было бы гораздо проще просто использовать Where-Object фильтр списка серверов:

Get-Content "$Dir\Test.txt" | 
    Where-Object { -not (Test-Connection -Computer $_ -Count 1 -Quiet) } | 
    Select-Object @{n='Server';e={$_}}, @{n='ActionReq';e={'Yes'}}, 
        @{n='Ping';e={'Offline'}} | 
    Export-Csv 'ScanResults.csv' -NoType -Append 
+0

Thx для этого, Ansgar. Я постараюсь включить этот код, а также, выглядит лучше, чем то, что у меня было. – Kenny

+0

Получил его работу с несколькими модификациями, я собираюсь попытаться добавить дополнительные тесты для скрипта, я увижу, какой код работает лучше всего, и выберите «лучший ответ», thx all – Kenny

Смежные вопросы