Size: a a a

PowerShellRus - о Powershell (и не только) на русском

2020 February 26

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
# Список компов
$computerNameList = Get-ADComputer -Filter '(samAccountName -like "RND*")' -Properties @('DNSHostName') |
   ForEach-Object { return $_.DNSHostName } |
   Sort-Object -Descending


# Обработка компов
$count_max = $computerNameList.Count
$count_cur = 0
$resultList = @()  
ForEach ($computerName in $computerNameList)
{
   $count_cur++
   Write-Host "$($count_cur) of $($count_max) : $($computerName)"
   $computerStatus = '<Unknown>'
   if ( -not (Test-Connection -ComputerName $computerName -Count 2 -Quiet) )
   {
       $computerStatus = 'Unavailable'
   }
   else
   {
       try
       {
           $products = $null
           $products = @( Get-WmiObject -ComputerName $computerName -Class 'Win32_Product' -Filter "NAME LIKE 'ESET Management Agent%'" -ErrorAction Stop )
           if ($products.Count -ne 0)
           {
               $computerStatus = 'Installed'
           }
           else
           {
               $computerStatus = 'Not_installed'
           }
       }
       catch
       {
           $computerStatus = 'Error_connecting'
       }
   }

   $resultObject = $null
   $resultObject = New-Object -TypeName 'PSObject' -Property @{
       'ComputerName' = $computerName
       'Status' = $computerStatus
       }
   $resultList += @($resultObject)
}

# Выгрузка результатов
   $resultList |
       Where-Object { $_.Status -eq 'Not_installed' } |
       Export-Csv -LiteralPath 'C:\2\result.csv' -NoTypeInformation -Delimiter ([System.Char]0x09) -Encoding UTF32
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Alexey D. Filimonov 🎠
# Список компов
$computerNameList = Get-ADComputer -Filter '(samAccountName -like "RND*")' -Properties @('DNSHostName') |
   ForEach-Object { return $_.DNSHostName } |
   Sort-Object -Descending


# Обработка компов
$count_max = $computerNameList.Count
$count_cur = 0
$resultList = @()  
ForEach ($computerName in $computerNameList)
{
   $count_cur++
   Write-Host "$($count_cur) of $($count_max) : $($computerName)"
   $computerStatus = '<Unknown>'
   if ( -not (Test-Connection -ComputerName $computerName -Count 2 -Quiet) )
   {
       $computerStatus = 'Unavailable'
   }
   else
   {
       try
       {
           $products = $null
           $products = @( Get-WmiObject -ComputerName $computerName -Class 'Win32_Product' -Filter "NAME LIKE 'ESET Management Agent%'" -ErrorAction Stop )
           if ($products.Count -ne 0)
           {
               $computerStatus = 'Installed'
           }
           else
           {
               $computerStatus = 'Not_installed'
           }
       }
       catch
       {
           $computerStatus = 'Error_connecting'
       }
   }

   $resultObject = $null
   $resultObject = New-Object -TypeName 'PSObject' -Property @{
       'ComputerName' = $computerName
       'Status' = $computerStatus
       }
   $resultList += @($resultObject)
}

# Выгрузка результатов
   $resultList |
       Where-Object { $_.Status -eq 'Not_installed' } |
       Export-Csv -LiteralPath 'C:\2\result.csv' -NoTypeInformation -Delimiter ([System.Char]0x09) -Encoding UTF32
Спасибо. Буду разбирать. Такое количество  {} блоков с сумма сводит меня )
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Получается я скрипт просто запускаю с админскими правами и жду ?
источник

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
У меня не так много компутеров. Да и в принципе хочется разобраться как правильно писать
Ну по минуте на каждый.
От обратного - это выгружать Win32_Product ( целиком ) на сетевую шару + датавремя + имя компа
Потом собирать уже со своей стороны и разбирать как надо

Со стороны компа:

@{
   'ProductList' = @( Get-WmiObject -Class 'Win32_Product' | Select-Object @('Name', 'Vendor', 'Version', 'Caption', 'IdentifyingNumber'))
   'ComputerName'  = $env:COMPUTERNAME
   'DateTime'      = [DateTime]::UtcNow
} | Export-Clixml -LiteralPath "\\server.domain.local\dataCollector\computer\Win32_Product.$([System.Guid]::NewGuid().ToString()).dat" -Depth 5


Со стороны сервера -
$computerDataList = Get-ChildItem -LiteralPath '\\server.domain.local\share\computer\' -Filter 'Win32_Product.*.dat' | ForEach-Object { return Import-Clixml -LiteralPath $_.FullName }
$computerDataList |
   Where-Object { $_.ComputerName -like 'RNG*' } |
   Where-Object { @($_.ProductList | Where-Object { $_.Caption -like 'Eset*' }).Count -eq 0 } |
   Export-Csv -LiteralPath 'C:\2\Results.csv'  -NoTypeInformation -Delimiter ([System.Char]0x09) -Encoding UTF32
источник

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
Получается я скрипт просто запускаю с админскими правами и жду ?
Тип того. Только путь в конце поправь, а то обидно будет )
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Alexey D. Filimonov 🎠
Тип того. Только путь в конце поправь, а то обидно будет )
Уже обидно 😁
источник

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
Уже обидно 😁
Там переменные с нормальным Scope, так что они в памяти останутся
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Dr. L.S.Dee
А вообще, КМК, вы тут SCCM изобретаете.
Я просто хочу хоть маломальски разбираться что творится под капотом, а не юзать с коробки )
источник

4

4c74356b41 in PowerShellRus - о Powershell (и не только) на русском
источник

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
Я просто хочу хоть маломальски разбираться что творится под капотом, а не юзать с коробки )
SCCM это другой уровень.
А "мало компов" это сколько?
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Alexey D. Filimonov 🎠
SCCM это другой уровень.
А "мало компов" это сколько?
38 клиентских , серваков 6 виндовых
источник

M

Maru in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
38 клиентских , серваков 6 виндовых
быстрей будет отправить гонца, который зафоткает все)
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Maru
быстрей будет отправить гонца, который зафоткает все)
Мы не ищем легких путей
источник

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
Мы не ищем легких путей
Кстати поляк же? Откуда русский знаешь?
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Alexey D. Filimonov 🎠
Кстати поляк же? Откуда русский знаешь?
с чего я поляк )
источник

AF

Alexey D. Filimonov 🎠 in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
с чего я поляк )
Ну, судил по фамилии и использованию W вместо V ( в польском нет V )
источник

4

4c74356b41 in PowerShellRus - о Powershell (и не только) на русском
просто не умеет транслитилировать
источник

WW

Wadik Wadkovich in PowerShellRus - о Powershell (и не только) на русском
Alexey D. Filimonov 🎠
Ну, судил по фамилии и использованию W вместо V ( в польском нет V )
Не, это просто мой уровень английского "normalno" )
источник

D

Dr. L.S.Dee in PowerShellRus - о Powershell (и не только) на русском
Alexey D. Filimonov 🎠
Ну, судил по фамилии и использованию W вместо V ( в польском нет V )
Может, немецкий учил и привык, что "V" читается как "Ф".
источник

D

Dr. L.S.Dee in PowerShellRus - о Powershell (и не только) на русском
Wadik Wadkovich
Не, это просто мой уровень английского "normalno" )
Wolodin?
источник