Get-SystemInfo: Tüm Bilgisayarların Sistem Yapılandırmasını Listeleme (systeminfo)


Önceki blog yazılarımdan birinde PowerShell: Tüm Etki Alanı Bilgisayarlarında systeminfo'yu çalıştırarak ortamınızı belgeleme Systeminfo'yu çalıştırarak tüm Etki Alanı Bilgisayarlarının önemli sistem bilgilerinin nasıl listeleneceğini anlatmıştım. Şimdi bunu bir fonksiyona yapıştırmak istiyorum. Bu fonksiyonun adı Get-SystemInfo olacaktır. Bu ne sürpriz. Ben gerçekten yaratıcı bir insanım. ? Ve işte burada.

Amaç

Yaklaşım, ilgili tüm İşletim Sistemi bilgilerini tüm Etki Alanı Bilgisayarlarından ve/veya Etki Alanı Sunucularından veya bir veya daha fazla bilgisayardan toplamaktır. Şunun gibi görünmeli:

Daha önce de belirttiğim gibi, önceki bir blog yazımda bazı şeyler hazırlamıştım. Şimdi büyük bir adım daha ileri gitmek istiyorum.

Get-SystemInfo

Parametreler

Get-SystemInfo bir kapsam veya bilgisayar adı tanımlamanıza olanak sağlar. CTRL+Boşluk tuşlarına basmak tüm seçenekleri listeler. Bunlardan ikisi özellikle ilginç.

Parametrelere daha yakından bakış…

Tamam, itiraf etmeliyim ki hata ve hata durumlarına pek önem veren profesyonel bir geliştirici değilim. Ama biraz yardım etmeye çalışıyorum. Kapsam parametresinin açıklamasına dikkat edin.

Veya Get-SytemInfo -Scope yazıp CTRL+Space tuşlarına basmanız yeterlidir.

Bu da beni bir sonraki bölüme getiriyor: Get-SystemInfo ile oynamak. Parametre değerlerini unutmayın. Şimdi devreye giriyorlar... ve harekete geçiyorlar...

Get-SystemInfo İş Başında: Kapsam Tanımlama

Tüm Sunucuları Sorgula

Tüm Etki Alanı Denetleyicilerini sorgula

Tüm İstemci Bilgisayarları Sorgula (WinRM etkinleştirilmelidir, tüm istemci işletim sistemlerinde varsayılan olarak devre dışıdır)

WinRM'yi Grup İlkeleriyle etkinleştirmek için bkz.:

Grup İlkeleri: Windows İstemci İşletim Sistemleri için WinRM'yi Etkinleştirme (Windows 10, Windows 8, Windows 7)

Tüm Bilgisayarları Sorgula

Hoşuna gitti mi? Devam edelim, bu son değil…

Get-SystemInfo İş Başında: Bilgisayar Adı Tanımlama

Yalnızca Tek Bilgisayarda Çalıştırma

Birden fazla bilgisayarda çalışıyor (virgülle ayırın)

Bu da beni bu blog yazısının son kısmına getiriyor. Aslında en önemli şey. Fonksiyonun kendisi.

İşlev

Kodu bir Etki Alanı Denetleyicisinde veya RSAT yüklü bir bilgisayarda çalıştırdığınızdan emin olun.

function Get-SystemInfo {
param
(
[parameter(HelpMessage='Enter the following values: LocalHost, ServerOnly, DCOnly, ClientOnly or AllComputer')]
[ValidateSet('LocalHost', 'ServerOnly', 'DCOnly', 'ClientOnly', 'AllComputer')]
$Scope, $ComputerName
)
$header='Host Name','OS','Version','Manufacturer','Configuration','Build Type','Registered Owner','Registered Organization','Product ID','Install Date','Boot Time','System Manufacturer','Model','Type','Processor','Bios','Windows Directory','System Directory','Boot Device','Language','Keyboard','Time Zone','Total Physical Memory','Available Physical Memory','Virtual Memory','Virtual Memory Available','Virtual Memory in Use','Page File','Domain','Logon Server','Hotfix','Network Card','Hyper-V'
If ($Scope -eq 'ServerOnly') {
Invoke-Command -ComputerName (Get-ADComputer -Filter {operatingsystem -like '*server*'}).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView
}
elseif ($Scope -eq 'DCOnly') {
Invoke-Command -ComputerName (Get-ADDomainController -Filter *).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView
}
elseif ($Scope -eq 'LocalHost')
{systeminfo /FO CSV | Select-Object -Skip 1 | ConvertFrom-Csv -Header $header | Out-GridView
}
elseif ($Scope -eq 'ClientOnly') {
Invoke-Command -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView
}
elseif ($Scope -eq 'AllComputer') {
Invoke-Command -ComputerName (Get-ADComputer -Filter *).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView
}
elseif ($ComputerName) {
Invoke-Command -ComputerName $ComputerName {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView
}
}

Senaryo zamanla büyüdü. Takipçilerimden biri bana çok sayıda If ve elseif yerine switch ile çalışmanın daha iyi olacağını belirtti. Tavsiye için teşekkür ederim. İşte anahtarlı fonksiyon. Böylece bazı satırları kaydedebiliriz.


function Get-SystemInfo {
param
(
[parameter(HelpMessage='Enter the following values: LocalHost, ServerOnly, DCOnly, ClientOnly or AllComputer')]
[ValidateSet('LocalHost', 'ServerOnly', 'DCOnly', 'ClientOnly', 'AllComputer')]
$Scope, $ComputerName
)
$header='Host Name','OS','Version','Manufacturer','Configuration','Build Type','Registered Owner','Registered Organization','Product ID','Install Date','Boot Time','System Manufacturer','Model','Type','Processor','Bios','Windows Directory','System Directory','Boot Device','Language','Keyboard','Time Zone','Total Physical Memory','Available Physical Memory','Virtual Memory','Virtual Memory Available','Virtual Memory in Use','Page File','Domain','Logon Server','Hotfix','Network Card','Hyper-V'
switch ($Scope)
{
'ServerOnly' {Invoke-Command -ComputerName (Get-ADComputer -Filter {operatingsystem -like '*server*'}).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView}
'DCOnly' {Invoke-Command -ComputerName (Get-ADDomainController -Filter *).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView}
'LocalHost' {systeminfo /FO CSV | Select-Object -Skip 1 | ConvertFrom-Csv -Header $header | Out-GridView}
'ClientOnly' {Invoke-Command -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView}
'AllComputer' {Invoke-Command -ComputerName (Get-ADComputer -Filter *).Name {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView}
}
If ($ComputerName) {
Invoke-Command -ComputerName $ComputerName {systeminfo /FO CSV | Select-Object -Skip 1} -ErrorAction SilentlyContinue | ConvertFrom-Csv -Header $header | Out-GridView
}
}

Kalıcı hale getirin

Yaklaşımımı beğendiyseniz PowerShell ISE'yi açın. İşlevi ISE oturumunuza kopyalayın. C:\Program Files\Windows PowerShell\Modules konumunda bir klasör oluşturun ve kodu psm1 dosyası olarak kaydedin. Dosya adınızla klasör adınızın eşleştiğinden emin olun.

PowerShell'i kapatın. PowerShell'i tekrar açın. Komut artık tüm kullanıcılar tarafından kullanılabilir. Get-SystemInfo ile eğlenin!

İlgili makaleler