![]() |
ping компьютеров из *.csv
Привет всем.
Стоит следующая задача: Необходимо отследить компьютеры, которые не выключаются на ночь. Есть User_Comp.csv следующего содержания: Код:
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser Код:
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser Ранее пользовался скриптом, который пингует все компьютеры (которые лежат в определенной OU) в домене: Скрытый текст
# Enter CSV file location $CurrentDate = Get-Date $CurrentDate = $CurrentDate.ToString('MM-dd-yyyy_hh-mm-ss') $csv = "C:\Temp\Ping_$CurrentDate.csv" # Add the target OU in the SearchBase parameter $Computers = Get-ADComputer -Filter * -SearchBase "OU=SuperComputers,DC=domain,DC=ru" | Select Name | Sort-Object Name $Computers = $Computers.Name $Headers = "ComputerName,IP Address" $Headers | Out-File -FilePath $csv -Encoding UTF8 -Delimiter ";" foreach ($computer in $Computers) { Write-host "Pinging $Computer" $Test = Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue -ErrorVariable Err if ($test -ne $null) { $IP = $Test.IPV4Address.IPAddressToString $Output = "$Computer,$IP" $Output | Out-File -FilePath $csv -Encoding UTF8 -Append } Else { $Output = "$Computer,$Err" $output | Out-File -FilePath $csv -Encoding UTF8 -Append } cls } Но теперь чуть другая задача. Подсобите, plz, скриптом. |
Powershell:
Код:
$t = get-date |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Но некоторые компьютеры пингуются (проверено вручную). |
Вставьте код в Powershell ISE и проверьте работоспособность.
Путь к User_Comp.csv правильный? |
Цитата:
|
У меня почему-то работает.
Код:
Import-Csv "D:\temp\User_Comp.csv" |? pager Команда Код:
Test-Connection [заведомо пингующийся комп] -Count 1 -Quiet |
|
Интересно. Пингуется, но test-connection выдаёт false?
|
|
test-connection это и есть по сути пинг.
А что он выдаёт без ключа -quiet? |
Цитата:
Цитата:
Код:
S C:\1.System> Test-Connection "test_pc" -Count 1 |
cmd:
Код:
C:\>ping test_pc Код:
PS C:\1.System> Test-Connection test_pc -Count 1 -Quiet Код:
PS C:\1.System> Test-Connection test_pc |
У вас почему-то неправильно работает эта команда, вот описание той же проблемы, но без решения: https://stackoverflow.com/questions/...ection-mystery
Попробуйте на другом компе. |
Вот отличный скрипт, который делает, что нужно.
Скрытый текст
$CurrentDate = Get-Date $CurrentDate = $CurrentDate.ToString('MM-dd-yyyy_hh-mm-ss') $csv = "C:\Ping_$CurrentDate.csv" $Results=New-Object System.Collections.Generic.List[PSObject] $Computers=Import-Csv -Path "C:\User_Comp.csv" $Computers = $Computers| where-object {$_.pager -ne ""} foreach ($computer in $Computers) { Write-host "Pinging $($Computer.pager)" $Test = Test-Connection -ComputerName $($Computer.pager) -Count 1 -ErrorAction SilentlyContinue -ErrorVariable Err if ($test -ne $null) { $IP = $Test.IPV4Address.IPAddressToString $p=[ordered]@{ "Pager"=$Computer.Pager "IP"=$IP "name"=$Computer.Name "title"=$Computer.Title "department"=$Computer.Department } $Obj=New-Object -Type PsObject -Property $p $Results.Add($Obj) } } $Results | Export-Csv -Encoding UTF8 -Delimiter ";" -Path $csv 1. Можно ли добавить в начало файла "C:\Ping_$CurrentDate.csv" дату / время создания? 2. Каким образом, можно реализовать список исключений? Т.е. есть список исключений - C:\Temp\exceptions_ping.csv, следующего формата: Код:
“pager”,“IP”,“name”,“title”,“department” |
Цитата:
И удивительно, что Test-Connection почему-то заработал правильно (хотя тут применён обходной вариант). Если кто-нибудь сможет мне объяснить, почему он не работал в моём варианте, буду благодарен. Цитата:
Код:
$ex = (import-csv "C:\Temp\exceptions_ping.csv").pager |
Код:
$ex = (import-csv "C:\Temp\exceptions_ping.csv").pager Цитата:
Можно ли добавить в начало / конец самого файла "C:\Ping_$CurrentDate.csv" дату / время создания? |
Нежелательно, т. к. нарушается структура файла. Проще всего так:
Код:
$p=[ordered]@{ |
Добавил в *.csv-файл "canonicalName", но в:
Код:
$csv = "C:\Pings\Ping_$CurrentDate.csv" Код:
$CurrentDate = Get-Date Код:
domain.ru/OrganizationUnit_1/OrganizationUnit_2/OrganizationUnit_3/OrganizationUnit_4/OrganizationUnit_5/OrganizationUnit_6/OrganizationUnit_7/User Код:
$csv = "C:\Pings\Ping_$CurrentDate.csv" Код:
"Pager";"IP";"name";"title";"department";"OrganizationUnit_1";"OrganizationUnit_2";"OrganizationUnit_3";"OrganizationUnit_4";"OrganizationUnit_5";"OrganizationUnit_6";"OrganizationUnit_7";"date" Код:
$csv = "C:\Pings\Ping_$CurrentDate.csv" Код:
$csv = "C:\Pings\By_week\Ping_$CurrentDate.csv" |
Всё начиналось с простого пинга, а теперь строим ракетный комплекс.
Цитата:
Полагаю, что если вы пытаетесь решать довольно сложные задачи на Powershell, неплохо бы немножко его изучить, а не просто копипастить код с форума. |
Цитата:
Код:
$CurrentDate = Get-Date Цитата:
Цитата:
|
Цитата:
Код:
foreach ($computer in $Computers) Код:
Import-Csv "C:\Scripts\Ping_Computers\User_Comp.csv" |
Цитата:
С этим я разобрался. И с тем, чтобы заменить "/" на "";"" (издевательство конечно, но работает). Теперь необходимо удалить последнее значение, которое содержит ФИО пользователя. Вот что получилось: Код:
$CurrentDate = Get-Date |
Время: 08:08. |
Время: 08:08.
© OSzone.net 2001-