PowerShell - ping компьютеров из *.csv

Аватара пользователя
DJ Mogarych

Re: PowerShell - ping компьютеров из *.csv

Сообщение DJ Mogarych »

Цитата DJ Mogarych:



Интересно. Пингуется, но test-connection выдаёт false?
PowerShell - ping компьютеров из *.csv




Да.




Цитата DJ Mogarych:



Интересно. Пингуется, но test-connection выдаёт false?
PowerShell - ping компьютеров из *.csv




Любой компьютер: хоть пингуется или не пингуется, всё равно выдаёт False.
Аватара пользователя
DJ Mogarych

Re: PowerShell - ping компьютеров из *.csv

Сообщение DJ Mogarych »

test-connection это и есть по сути пинг.

А что он выдаёт без ключа -quiet?
Аватара пользователя
JimmLight

Re: PowerShell - ping компьютеров из *.csv

Сообщение JimmLight »

Цитата DJ Mogarych:



Интересно. Пингуется, но test-connection выдаёт false?
PowerShell - ping компьютеров из *.csv




Именно.




Цитата DJ Mogarych:



А что он выдаёт без ключа -quiet?
PowerShell - ping компьютеров из *.csv




Пингуется.





Код:

Код: Выделить всё

S C:\1.System> Test-Connection "test_pc" -Count 1
Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms) 
------        -----------             -----------         -----------                              -----    -------- 
my_pc            test_pc           192.168.18.56                                                 32       0        
PS C:\1.System> Test-Connection "test_pc" -Count 1 -Quiet
False
Аватара пользователя
JimmLight

Re: PowerShell - ping компьютеров из *.csv

Сообщение JimmLight »

cmd:



Код:

Код: Выделить всё

C:\>ping test_pc
Обмен пакетами с test_pc.domain.ru [192.168.18.56] с 32 байтами данных:
Ответ от 192.168.18.56: число байт=32 время

PowerShell:



Код:

Код: Выделить всё

PS C:\1.System> Test-Connection test_pc -Count 1 -Quiet
False

PowerShell:



Код:

Код: Выделить всё

PS C:\1.System> Test-Connection test_pc
Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms) 
------        -----------     -----------      -----------                              -----    -------- 
my_pc            test_pc        192.168.18.56                                              32       0        
my_pc            test_pc        192.168.18.56                                              32       0        
my_pc            test_pc        192.168.18.56                                              32       0        
my_pc            test_pc        192.168.18.56                                              32       0
Аватара пользователя
DJ Mogarych

Re: PowerShell - ping компьютеров из *.csv

Сообщение DJ Mogarych »

У вас почему-то неправильно работает эта команда, вот описание той же проблемы, но без решения:
https://stackoverflow.com/questions/...ection-mystery




Попробуйте на другом компе.
Аватара пользователя
JimmLight

Re: PowerShell - ping компьютеров из *.csv

Сообщение JimmLight »

Вот отличный скрипт, который делает, что нужно.



Скрытый текст

[spoiler]$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[/spoiler]




1. Можно ли добавить в начало файла "C:\Ping_$CurrentDate.csv" дату / время создания?

2. Каким образом, можно реализовать список исключений? Т.е. есть список исключений - C:\Temp\exceptions_ping.csv, следующего формата:



Код:

Код: Выделить всё

“pager”,“IP”,“name”,“title”,“department”

который не должен попадать, в C:\Temp\Ping_$CurrentDate.csv.
Аватара пользователя
DJ Mogarych

Re: PowerShell - ping компьютеров из *.csv

Сообщение DJ Mogarych »

Цитата JimmLight:



отличный скрипт, который делает, что нужно
PowerShell - ping компьютеров из *.csv




Он по сути ничем не отличается от моего, только более многословен.

И удивительно, что Test-Connection почему-то заработал правильно (хотя тут применён обходной вариант).

Если кто-нибудь сможет мне объяснить, почему он не работал в моём варианте, буду благодарен.




Цитата JimmLight:



можно реализовать список исключений?
PowerShell - ping компьютеров из *.csv






Код:

Код: Выделить всё

$ex = (import-csv "C:\Temp\exceptions_ping.csv").pager
$Computers = Import-Csv "C:\User_Comp.csv" |? {$_.pager -and $_.pager -notin $ex}
Аватара пользователя
JimmLight

Re: PowerShell - ping компьютеров из *.csv

Сообщение JimmLight »

Код:

Код: Выделить всё

$ex = (import-csv "C:\Temp\exceptions_ping.csv").pager
$Computers = Import-Csv "C:\User_Comp.csv" |? {$_.pager -and $_.pager -notin $ex}

DJ Mogarych, работает. Спасибо.


Цитата DJ Mogarych:



Если кто-нибудь сможет мне объяснить, почему он не работал в моём варианте, буду благодарен.
PowerShell - ping компьютеров из *.csv




Подозреваю, что не работает лишь на моей "машине". Тестировал на других - работает. Спасибо.



Можно ли добавить в начало / конец самого файла "C:\Ping_$CurrentDate.csv" дату / время создания?
Аватара пользователя
DJ Mogarych

Re: PowerShell - ping компьютеров из *.csv

Сообщение DJ Mogarych »

Нежелательно, т. к. нарушается структура файла. Проще всего так:





Код:

Код: Выделить всё

$p=[ordered]@{
"Pager"=$Computer.Pager
"IP"=$IP
"name"=$Computer.Name
"title"=$Computer.Title
"department"=$Computer.Department
"date"=$CurrentDate
}
Аватара пользователя
JimmLight

Re: PowerShell - ping компьютеров из *.csv

Сообщение JimmLight »

Добавил в *.csv-файл "canonicalName", но в:



Код:

Код: Выделить всё

$csv = "C:\Pings\Ping_$CurrentDate.csv"

почему-то не выходит "canonicalName".



Код:

Код: Выделить всё

$CurrentDate = Get-Date
$CurrentDate = $CurrentDate.ToString('dd-MMMM-yyy_HH-mm-ss')
$csv = "C:\Pings\Ping_$CurrentDate.csv"
$Results=New-Object System.Collections.Generic.List[PSObject]
$ex = (import-csv "C:\Scripts\Ping_Computers\exceptions_ping.csv").pager
$Computers = Import-Csv "C:\Scripts\Ping_Computers\User_Comp.csv" |? {$_.pager -and $_.pager -notin $ex}
$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
                "canonicalName"=$canonicalName.canonicalName
                "date"=$CurrentDate
}
        $Obj=New-Object -Type PsObject -Property $p
        $Results.Add($Obj)
   }
}
$Results | Export-Csv  -Encoding UTF8 -Delimiter ";" -Path $csv

И еще один момент, как правило, "canonicalName" указывается в следующем формате:



Код:

Код: Выделить всё

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"

После этого удалить файлы (оставить только недельный).
Ответить

Вернуться в «Скриптовые языки администрирования Windows»