Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - ping компьютеров из *.csv

Ответить
Настройки темы
PowerShell - ping компьютеров из *.csv

Новый участник


Сообщения: 47
Благодарности: 0

Профиль | Отправить PM | Цитировать


Привет всем.
Стоит следующая задача: Необходимо отследить компьютеры, которые не выключаются на ночь.
Есть User_Comp.csv следующего содержания:
Код: Выделить весь код
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
"pager","name","title","department"
"IVANOV_PC","Иванов Иван Иванович","Заместитель начальник","Отдел начальников"
"PC_BARANOV","Баранов Михаил Петрович","Главный надзиратель","Отдел надзирателей"
,"Горьков Михаил Денисович","Советник слесаря","Отдел слесарей"
"PETROV","Петров Максим Альбертович","Слесарь","Отдел слесарей"
В поле "pager" содержится имя компьютера (но не всегда. Если нет, то пропускать), которое и необходимо пинговать. Если пингуется, то записывать в новый *.csv-файл:
Код: Выделить весь код
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
"pager","IP","name","title","department"
"PC_BARANOV","IP","Баранов Михаил Петрович","Главный надзиратель","Отдел надзирателей"
"PETROV","IP","Петров Максим Альбертович","Слесарь","Отдел слесарей"
Если не пигуется, то ничего не записывать в новый *.csv-файл (имя **csv-файла должно быть: дата_время.csv).

Ранее пользовался скриптом, который пингует все компьютеры (которые лежат в определенной 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, скриптом.

Отправлено: 08:22, 07-04-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Всё начиналось с простого пинга, а теперь строим ракетный комплекс.

Цитата JimmLight:
почему-то не выходит "canonicalName". »
А где вы задали переменную $canonicalname? Она, естественно, пустая.

Полагаю, что если вы пытаетесь решать довольно сложные задачи на Powershell, неплохо бы немножко его изучить, а не просто копипастить код с форума.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:04, 14-04-2021 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 47
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
А где вы задали переменную $canonicalname? Она, естественно, пустая.
Исправил. Выделил цветом, в коде.
Код: Выделить весь код
$CurrentDate = Get-Date
$CurrentDate = $CurrentDate.ToString('dd-MMMM-yyy_HH-mm-ss')
$csv = "C:\Scripts\Ping_Computers\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"=$Computer.CanonicalName
                "date"=$CurrentDate
}
        $Obj=New-Object -Type PsObject -Property $p
        $Results.Add($Obj)
   }
}
$Results | Export-Csv  -Encoding UTF8 -Delimiter ";" -Path $csv
Цитата:
Всё начиналось с простого пинга, а теперь строим ракетный комплекс.
Ну да...
Цитата:
... неплохо бы немножко его изучить, ...
Чем и занимаюсь.

Отправлено: 13:13, 14-04-2021 | #22


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Цитата JimmLight:
$Computer.CanonicalName »
$computer - это часть $computers, как можно понять из кода:
Код: Выделить весь код
foreach ($computer in $Computers)
А $Computers - это
Код: Выделить весь код
Import-Csv "C:\Scripts\Ping_Computers\User_Comp.csv"
У вас в csv есть поле CanonicalName?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:39, 14-04-2021 | #23


Новый участник


Сообщения: 47
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
У вас в csv есть поле CanonicalName? »
Да.
С этим я разобрался.
И с тем, чтобы заменить "/" на "";"" (издевательство конечно, но работает).
Теперь необходимо удалить последнее значение, которое содержит ФИО пользователя.

Вот что получилось:
Код: Выделить весь код
$CurrentDate = Get-Date
$CurrentDate = $CurrentDate.ToString('dd.MM.yyy HH.mm')
$CurrentDateCsv = Get-Date
$CurrentDateCsv = $CurrentDateCsv.ToString('dd.MM.yyy HH:mm')
$csv = "C:\Scripts\Ping_Computers\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]@{
                "date"=$CurrentDateCsv
                "Pager"=$Computer.Pager
                "IP"=$IP
                "name"=$Computer.Name
                "title"=$Computer.Title
                "department"=$Computer.Department
                "canonicalName"=$Computer.CanonicalName
}
        $Obj=New-Object -Type PsObject -Property $p
        $Results.Add($Obj)
   }
}
$Results | Export-Csv  -Encoding UTF8 -Delimiter ";" -Path $csv
Get-ChildItem $csv | ForEach-Object { (Get-Content -Path $_.FullName) -replace '/', '";"' | Set-Content -Path $_.FullName }

Последний раз редактировалось JimmLight, 14-04-2021 в 14:26.


Отправлено: 14:09, 14-04-2021 | #24



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - ping компьютеров из *.csv

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Экспорт данных из CSV в CFG Lezenford Скриптовые языки администрирования Windows 11 12-10-2016 15:17
PowerShell - [решено] Переименование компьютеров домена netdom+csv nokogerra Скриптовые языки администрирования Windows 5 07-11-2014 10:14
CMD/BAT - [решено] Периеминование файла doc.csv в Документ_дата_время.csv kagorec Скриптовые языки администрирования Windows 2 29-03-2014 18:40
Любой язык - Перенести данные из csv в html OverSense Скриптовые языки администрирования Windows 2 14-02-2014 22:11
CMD/BAT - Из csv в xls с помощью батника OverSense Скриптовые языки администрирования Windows 1 13-02-2014 18:38




 
Переход