Get-ADComputer: PowerShell kullanarak AD bilgisayar nesneleri verilerini alma


Active Directory’den bilgi almak için kullanışlı PowerShell cmdlet’leri ile çalışmaya devam ediyoruz. Önceki yazılarımızda, AD kullanıcı hesapları hakkında bilgi almanızı sağlayan Get-AD User cmdlet’i hakkında örnekler vermiştik. Bugün, Get-ADComputer cmdlet’ini ve Active Directory etki alanındaki bilgisayar hesapları hakkında çeşitli bilgileri toplamak için Get-ADComputer cmdlet’ini nasıl kullanabileceğinizi göstereceğiz.

Powershell kullanarak, 120 günden uzun bir süredir etkin olmayan bilgisayar hesaplarının bir listesini alabilir ve bunları devre dışı bırakabilirsiniz.

Get-ADComputer cmdlet’ini kullanmadan önce, Windows PowerShell için Active Directory Modülü’nü aşağıdaki komutu kullanarak yüklemeniz gerekir.

Import-Module activedirectory

Get-ADComputer cmdlet’ini masaüstü işletim sistemlerinde kullanmak için RSAT’ı indirmeli ve kurmalısınız. AD-Powershell modülünü Denetim Masasından veya aşağıdaki komutu kullanarak etkinleştirebilirsiniz.

Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Get-ADComputer – Cmdlet Syntax

Get-Help komutuyla her zamanki gibi Get-ADComputer parametreleri hakkında yardım alabilirsiniz.

Get-Help Get-ADComputer

Etki alanındaki belirli bir bilgisayar hesabı hakkında bilgi almak için, bilgisayar adını -Identity parametresiyle belirtin.

Get-ADComputer -Identity DC01

Bu bilgisayarın AD kayıtlarında son kayıt tarihini bilmemiz gerekiyor, ancak bu bilgi komutun çıkışında görüntülenmiyor. Bilgisayar nesnesinin tüm kullanılabilir özelliklerini Active Directory’de görüntüleyelim.

Get-ADComputer -Identity DC01 -Properties *

Gördüğünüz gibi, bu bilgisayarın ağda son oturum açma tarihi, LastLogonDate – 08/14/2018 09:42:08 AM özniteliğinde belirtilmiştir.

Tüm gereksiz bilgileri kaldırarak sadece Name ve LastLogonDate özniteliklerini bırakalım.

Get-ADComputer -identity DC01 -Properties * | FT Name, LastLogonDate -Autosize

Ardından komutu, etki alanındaki tüm bilgisayarlar için son ağ kaydının süresi hakkındaki bilgileri görüntüleyecek şekilde değiştirmeniz gerekir. Bunu yapmak için, değiştirmek -Identity parametresini -Filter ile değiştirin.

Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Belirli bir OU’daki bilgisayar nesneleri hakkındaki bilgileri görüntülemek için, SearchBase parametresini kullanabilirsiniz.

Get-ADComputer -SearchBase ‘OU=Location,DC=Turkey,DC=Windows -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Sorgu sonuçlarını Sort komutunu kullanarak son oturum açma tarihine göre sıralabilirsiniz.

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Sıradaki komutla 120 gün veya daha uzun süre kullanılmayan bilgisayar hesaplarını devre dışı bırakabiliriz.

Get-Date’i kullanarak, değişkendeki mevcut tarihin değerini alabilir ve 120 gün içinde azaltabiliriz.

$date_with_offset= (Get-Date).AddDays(-120)

Ortaya çıkan tarih değişkeni, LastLogonDate alanında Get-ADComputer sorgusunun bir filtresi olarak kullanılabilir.

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset } | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Bu yüzden 120 günden uzun süredir kayıtlı olmayan aktif bilgisayar hesaplarının bir listesini oluşturduk. Devre dışı bırakmak için Disable-ADAccount komutunu kullanabiliriz.

İpucu→ Komutun sistem üzerinde hiçbir değişiklik yapmadan çalıştırıldığını görmek için -WhatIf anahtarı ile test etmenizde yarar var.

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $date_with_offset } | Set-ADComputer -Enabled $false -whatif

Artık tüm etkin olmayan bilgisayar hesaplarını devre dışı bırakabilirsiniz.

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $datecutoff} | Set-ADComputer -Enabled $false

Get-ADComputer: Örnekler

Aşağıda, Get-ADComputer cmdlet’ini kullanarak domain ortamındaki bilgisayar nesnelerini sorgulamak için bazı yararlı örnekleri verilmiştir.

Active Directory’deki tüm bilgisayar hesaplarının sayısını almak için.

Get-ADComputer -Filter {SamAccountName -like “*”} | Measure-Object

ClientPC ile başlayan isimleri listeler.

Get-ADComputer -Filter ‘Name -like “ClientPc*”‘ -Properties IPv4Address | Format-table Name,DNSHostName,IPv4Address -Autosize

Windows XP çalıştıran tüm bilgisayarları seçmek için aşağıdaki komutu kullanabilirsiniz.

Get-ADComputer -Filter {OperatingSystem -like ‘*XP*’}

Sadece Windows Server bilgisayar nesnelerini seçmek için;

Get-ADComputer -Filter { OperatingSystem -Like ‘*Windows Server*’ } -Properties OperatingSystem | Select Name, OperatingSystem | Format-Table -AutoSize

Etki alanı içindeki sunucuların listesini işletim sistemi sürümü ve yüklü olan Service Pack ile alabilirsiniz.

Get-ADComputer -Filter {OperatingSystem -Like ‘*Windows Server*’ } -Property * | Format-Table Name,OperatingSystem,OperatingSystemServicePack -Wrap -Auto

Domain’e 6 aydan daha uzun bir süredir erişmeyen tüm bilgisayar hesaplarını silmek için şu komutu kullanabilirsiniz.

Get-ADComputer -properties lastLogonDate -filter * | where { $_.lastLogonDate -lt (get-date).addmonths(-6) } | Remove-ADComputer

Belirli OU’daki disable bilgisayarları seçmek için aşağıdaki komutu kullanın.

Get-ADComputer -filter * -SearchBase «OU=Computers, OU=Berlin,dc=sales,dc=locked» | Where-Object {$_.enabled -eq $False}

Komutun sonuçları düz metin dosyasına aktarılabilir.

Get-ADComputer -Filter { OperatingSystem -Like ‘*Windows Server*’ } -Properties OperatingSystem | Select Name, OperatingSystem | Format-Table -AutoSize C:\Script\server_systems.txt

Veya bir CSV dosyası oluşturabilirsiniz.

Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem,OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8

Sonuç listesinde yer alan tüm bilgisayarlarla belirli bir eylem gerçekleştirmek için, Foreach döngüsünü kullanmanız gerekir. Bu örnekte, etki alanındaki sunucular listesini oluşturmak ve her sunucudan belirli bilgiler almak istiyoruz.(sunucu adı, manufacturer ve sunucu modeli)

$Computers = Get-ADComputer -Filter {OperatingSystem -Like ‘*Windows Server*’}
Foreach ($Computer in $Computers)
{
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Computer.Model
Write-Host “Name: $Hostname”
Write-Host “Manufacturer: $Manufacturer”
Write-Host “Model: $Model”
Write-Host ” ”
$Content = “$Hostname;$Manufacturer;$Model”
Add-Content -Value $Content -Path “C:\PS\ServersInfo.txt”
}

Daha kısa bir döngü kullanabilirsiniz. Belirli bir OU’daki tüm bilgisayarlarda belirli bir komutu çalıştırmanız gerektiğini varsayalım. Bu örnekte, tüm sunucularda bir grup ilkesi güncelleştirme komutunu çalıştırmak istiyorum.

get-adcomputer -SearchBase “OU=Servers,DC=Windows,DC=Turkey” -Filter * | %{ Invoke-Command -Computer $_.Name -ScriptBlock {gpupdate /force} }

KAYNAKPOWERSHELL