Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.
Data publikacji: 31-03-2022 | Autor: | Bartosz Bielawski |
Active Directory stanowi swoisty szkielet przechowujący informacje m.in. o użytkownikach, serwerach, stacjach roboczych czy dostępach. Dzięki zintegrowanym poświadczeniom dane zgromadzone w AD mogą być źródłem informacji o urządzeniach, z którymi bez trudu połączymy się w ramach tej domeny. Będzie to szczególnie przydatne w momencie przeprowadzania inwentaryzacji dołączonych do domeny urządzeń.
Wpierwszej kolejności musimy zadbać o zebranie informacji o urządzeniach, które będziemy inwentaryzować. W zależności od zakresu planowanej inwentaryzacji możemy zdecydować się na pobranie informacji o wszystkich komputerach w domenie, komputerach dodanych do wybranej grupy w ramach Active Directory lub korzystających z danej wersji systemu Windows. W każdym z tych przypadków listę urządzeń możemy pobrać, wykorzystując polecenie Get-ADComputer:
# Wszystkie komputery...
Get-ADComputer
# Komputery znajdujące się w wybranej grupie
$grupa = (Get-ADGroup Inwentaryzacja).DistinguishedName
Get-ADComputer -LdapFilter "(memberof=$grupa)"
# Komputery korzystające z wybranej wersji systemu Windows
Get-ADComputer -LdapFilter "(operatingSystem=Windows Server 2016 Standard)"
Metody połączenia
Kolejny krok to połączenie się z interesującymi nas komputerami i pobranie potrzebnych informacji. Możemy tego dokonać na kilka sposobów w zależności od tego, jak skonfigurowane są urządzenia w naszej sieci. Najbardziej oczywistą technologią, z której możemy skorzystać w trakcie inwentaryzowania informacji o komputerach w ramach domeny Active Directory, jest WMI lub CIM. Jeśli w naszej sieci znajdują się wyłącznie urządzenia korzystające z wersji Windows Server 2012/Windows 8 (lub nowszej), to korzystając z WMI, pobrać możemy niemal wszystkie informacje, które mogą być pomocne, tj.: informacje o systemie operacyjnym, pamięci, procesorze, dyskach twardych, kartach sieciowych czy kontrolerach pamięci masowej. Możemy przy tym skorzystać zarówno z poleceń uniwersalnych (takich jak Get-CimInstance), jak i modułów korzystających z CDXML i oferujących dostęp do WMI lub CIM z wykorzystaniem składni poleceń PowerShella:
# Tworzymy sesję CIM
$sesja = New-CimSession -ComputerName $komputer
# Pobieramy informację o dyskach
Get-Disk -CimSession $sesja
# Ta sama informacja, korzystając z polecenia Get-CimInstance
$parametery = @{
Namespace = 'ROOT/Microsoft/Windows/Storage'
ClassName = 'MSFT_Disk'
CimSession = $sesja }
Get-Disk @parametery
PowerShell remoting
Kolejną metodą, z której możemy skorzystać w trakcie inwentaryzacji danych o komputerach w naszej sieci, jest PowerShell remoting. Pomocne
będą przede wszystkim domyślne końcówki PowerShella. Możemy je bardzo łatwo udostępnić lub skonfigurować z wykorzystaniem polityk grupowych (GPO), tak by każdy pracujący w naszej sieci system umożliwiał tego rodzaju połączenia. Ułatwia to zarówno zdalną administrację (jeśli na przykład potrzebujemy dokonać zdalnie zmian w systemie), jak i zbieranie informacji o komputerach znajdujących się w naszej sieci.
Tu również mamy kilka opcji. Przede wszystkim możemy skorzystać z polecenia, które pobiera bardzo szeroki wachlarz informacji o komputerze, na którym zostało uruchomione Get-ComputerInfo. Polecenie to, korzystając z różnych technologii, pobiera około 180 właściwości komputera, w tym takie informacje jak rodzaj systemu, strefę czasową, numer seryjny, ilość pamięci operacyjnej i wiele innych. Przykładowy rezultat z wyszczególnieniem kilku właściwości:
Get-ComputerInfo
WindowsBuildLabEx : 19041.1.amd64fre.vb_release.191206-1406
WindowsCurrentVersion : 6.3
WindowsEditionId : Core
WindowsInstallationType : Client
WindowsInstallDateFromRegistry : 25/03/2021 02:11:31
WindowsProductName : Windows 10 Home
BiosCaption : UX363JA.303
CsCaption : DESKTOP-2CF8TC1
CsManufacturer : ASUSTeK COMPUTER INC.
CsModel : ZenBook UX363JA_UX363JA
CsProcessors : {Intel(R) Core(TM) i5-1035G4 CPU @ 1.10GHz}
OsBootDevice : DeviceHarddiskVolume1
OsSystemDevice : DeviceHarddiskVolume3
OsSystemDirectory : C:Windowssystem32
OsCurrentTimeZone : 60
OsTotalVisibleMemorySize : 8072888
Druga możliwość to opracowanie własnej funkcji lub skryptu, który uruchamiać będziemy na wszystkich komputerach, które chcemy zinwentaryzować. Co dość istotne, skrypt może znajdować się na urządzeniu, na którym przeprowadzać będziemy inwentaryzację:
$system = Get-CimInstance -ClassName Win32_OperatingSystem
$typInstalacji = Get-ItemPropertyValue `
-LiteralPath 'HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion'`
-Name InstallationType
$komputer = Get-CimInstance -ClassName Win32_ComputerSystem
[PSCustomObject]@{
OS = $system.Caption
BuildNumber = $system.BuildNumber
TypInstalacji = $typInstalacji
Producent = $komputer.Manufacturer
Model = $komputer.Model
RAM = $komputer.TotalPhysicalMemory
}
[...]
Autor zawodowo zajmuje się informatyką. Jest Microsoft MVP w dziedzinie PowerShella, blogerem oraz jednym z moderatorów forum dotyczącego skryptów w serwisie TechNet. Autor książki „Windows PowerShell 5.1 Biblia”.
Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.
Transmisje online zapewnia: StreamOnline