воскресенье, 9 сентября 2018 г.

PowerShell - inventory from a file

PowerShell - inventory from a file with a list of computers

Иногда системному администратору нужно получить инвентарный список компьютеров сети.
Для этого существуют различные программы, но даже платные коммерческие имеют недостатки, например, многие из них требуют установить агента на все компьютеры.
И тут иногда возникает вопрос, а на какие компютеры нам нужно поставить агентов. Т.е., даже в таком случае может возникнуть необходимость составить предварительный список компьютеров. Что говорить о тех случаях, когда у фирмы просто нет средств на покупку такой программы, да и зачем стрелять из пушки по воробьям, если вам нужно всего-лишь составить список компьютеров с их именами, IP-адресами и версией OS.
Именно такой случай мы и рассмотрим. А для этого вместе пошагово создадим небольшой скрипт, который с легкостью позволит это сделать.
Так выглядит конечный результат.

==Beginning of Script==
### Inventory from a file by vladisla2000.

$AllComputersNames = Get-Content C:\Scripts\input.txt
# Creating of Array
$ArrayTable = New-Object System.Collections.ArrayList

# Looping of all the names from C:\Scripts\input.txt file.
ForEach ($ComputerName in $AllComputersNames)
{
# The main line of the script which gets all the information from AD and puts it to a variable.
$ComputerOS = Get-ADComputer -Identity $ComputerName - Properties * | Select-Object Name,IPv4Address,OperatingSystem
# Extraction of the properties to the different variables.
$IPV4 = $ComputerOS.IPv4Address
$OS_System = $ComputerOS.OperatingSystem
# Creating of the new object.
$Computerinfo  = New-Object -Type PSObject
# Filling the object with information from variables.
$Computerinfo | Add-Member -MemberType NoteProperty -Name "ServerName" -Value "$ComputerName" -Force
$Computerinfo | Add-Member -MemberType NoteProperty -Name "IP Address" -Value "$IPV4" -Force
$Computerinfo | Add-Member -MemberType NoteProperty -Name "OS System" -Value "$OS_System" -Force
# Filling the array with information from $Computerinfo variable.
$ArrayTable.Add($Computerinfo) | Out-Null
# Clearing of $ComputerOS variable
$ComputerOS = ""
}

#Showing Array on a screen for checking.
$ArrayTable
# Exporting Array to an Excel file.
$ArrayTable | Export-Csv C:\Scripts\output.csv
# Clearing of $ArrayTable.
$ArrayTable = ""
==End of Script==

Теперь рассмотрим процесс построения скрипта.
В любом скрипте существует главная строка, которая и делает основную работу. От нее и нужно плясать.

Здесь строка такая.
$ComputerOS = Get-ADComputer -Identity $ComputerName -Properties * | Select-Object Name,IPv4Address,OperatingSystem

Для облегчения эксперимента стоит заменить переменную $ComputerName на имя конкретного компьютера.
$ComputerOS = Get-ADComputer -Identity MyComputer -Properties * | Select-Object Name,IPv4Address,OperatingSystem

Вместо MyComputer вы, конечно же, вставите имя известного вам компьютера.
После выполнения строки вставьте переменную $ComputerOS в командную строку и полюбуйтесь результатом.


Главное сделано. Теперь вам осталось две задачи:
- применить строку к имеющемуся списку компьютеров,
- вывести результат в файл Excel.
Но об этом позже...

Комментариев нет:

Отправить комментарий