Вот получилось у меня как-то так:
Get-EventLog -LogName System | where {$_.eventID -eq 6005} | ?{$_.timegenerated -gt [datetime]::Today} | fl *timegenerated*
но я не могу докумекать как сделать, чтобы теперь параметр out-file ложил его в определенный csv, где будет в одну колонку записывать %computername%, а во вторую колонку результат выполнения вышеуказанной команды. Кто-то подскажет? Да и как-то можно решить с одновременной записью множества юзеров в 1 файл csv?
но я не могу докумекать как сделать, чтобы теперь параметр out-file ложил его в определенный csv, где будет в одну колонку записывать %computername%, а во вторую колонку результат выполнения вышеуказанной команды. Кто-то подскажет? Да и как-то можно решить с одновременной записью множества юзеров в 1 файл csv?
Зачем одновременная запись, если ты обходишь компы? У тебя должен быть список компов, ты его откуда-то берешь. Либо из AD, либо из своего списка.
Потом циклом этот список перебираешь, выполняешь на компе из списка свою команду и результат кладешь в файл.
Как-то так, не проверял:
$computers = @'
comp01
comp02
comp03
'@ -split "`r`n"
$comps = @( $computers | Foreach-Object { return Get-ADComputer $_ } )
ForEach ($c in $comps) {
$text = Get-EventLog -ComputerName $c -LogName System | where {$_.eventID -eq 6005} | ?{$_.timegenerated -gt [datetime]::Today} | fl *timegenerated*
$line = "$($c)`t$($text)"
Out-File -Append -FilePath 'С:\ListCompiters.csv' -Encoding UTF32 -InputObject $line
}
Updated: 15 November 2017, 13:27:45
UTF32 для того, чтобы CSV можно было открыть сразу в Excel.
У тебя должен быть список компов, ты его откуда-то берешь
Я использую одну систему под названием Lansweeper, она мне генерирует список нужных компов и она запускает этот скрипт на каждом компе из списка. По этому мне не нужно в скрипте указывать список или откуда-то ссылаться на него, а нужно чтобы скрипт просто генерировал выполнение указанной команды и результат ложил в шару учитывая что скрипт будет запускаться на каждом компе отдельно. Ссылаясь на это немного подправил скрипт, получилось так:
ForEach ($c in $env:computername) {
$text = Get-EventLog -LogName System | where {$_.eventID -eq 6005} | ?{$_.timegenerated -gt [datetime]::Today} | fl *timegenerated*
$line = "$($c)`t$($text)"
Out-File -Append -FilePath '\\telerate\TEMP\akuc\ListCompiters.csv' -Encoding UTF32 -InputObject $line
}
Получилось так что в сгенерированном csv первое поле правильно указывает название компа, а второе поле выдает я так понимаю ошибку формата powershel: "Microsoft.PowerShell.Commands.Internal.Format.FormatStartData"
Пока пытаюсь понять что не так было указано.
Updated: 15 November 2017, 16:45:32
"Microsoft.PowerShell.Commands.Internal.Format.FormatStartData"
Это решил ключем Out-String, но теперь у меня результат в разных строках :)
Ссылаясь на это немного подправил скрипт, получилось так:
Цикл-то зачем тогда, в этом случае?
Просто так:
$text = Get-EventLog -LogName System | where {$_.eventID -eq 6005} | ?{$_.timegenerated -gt [datetime]::Today} | fl *timegenerated*
$line = "$($env:computername)`t$($text)"
Out-File -Append -FilePath '\\telerate\TEMP\akuc\ListCompiters.csv' -Encoding UTF32 -InputObject $line
Updated: 15 November 2017, 17:48:06
Это решил ключем Out-String, но теперь у меня результат в разных строках
Не, это не так надо.
Updated: 15 November 2017, 17:51:03
Вот так:
$text = @(Get-EventLog -LogName System -Source EventLog -EntryType Information | where {$_.eventID -eq 6005} | ?{$_.timegenerated -gt [datetime]::Today} | Foreach-Object {return $_.TimeGenerated} )
$line = "$($env:computername)`t$($text)"
Out-File -Append -FilePath 'D:\ListComputers.csv' -Encoding UTF32 -InputObject $line
И фильтр лучше добавить в get-eventlog -Source и что там еще возможно, а то медленно работает, весь System лопатит.
Вот так как-то совсем быстро получается:
Get-EventLog -LogName System -Source EventLog -EntryType Information -Newest 10 | Where-Object {$_.eventID -eq 6005} | ?{$_.timegenerated -gt [datetime]::Today}
Updated: 16 November 2017, 14:50:28
А-а, нет. Это он просто 10 последних логов берет в принципе, а не тех, которые нам нужны. Только просто -Source EventLog -EntryType Information добавить, хотя бы, всё меньше искать.