Get-ADComputer: PowerShell ile Active Directory'de Bilgisayar Özelliklerini Bulun


Bir Active Directory etki alanındaki bilgisayar hesap nesneleri (sunucular ve iş istasyonları) hakkında çeşitli bilgiler almak için Get-ADComputer PowerShell cmdlet'ini kullanabilirsiniz. Bu, AD bilgisayarlarını çeşitli kriterlere göre aramak için en kullanışlı cmdlet'lerden biridir.

Diyelim ki göreviniz, Active Directory'de 120 günden uzun süredir bir etki alanına kayıtlı olmayan tüm etkin olmayan bilgisayarları bulmak ve bu bilgisayar hesaplarını devre dışı bırakmak.

Get-ADComputer cmdlet'ini kullanabilmeniz için Windows PowerShell için Active Directory Modülünü yüklemeniz ve içe aktarmanız gerekir.

Import-Module activedirectory

İpucu. PowerShell 3.0 sürümünde (Windows Server 2012'de kullanıma sunulmuştur) veya daha yeni bir sürümde, aşağıdaki bileşen kuruluysa bu modül varsayılan olarak içe aktarılır: Uzak Sunucu Yönetim Araçları -> Rol Yönetim Araçları -> AD DS ve AD LDS Araçları -> için Active Directory modülü Windows PowerShell'i. Get-ADComputer cmdlet'ini masaüstü istemcilerde (Windows 11 veya 11) kullanmak için, RSAT'ı indirip yüklemeniz ve Denetim Masası'ndan veya şu komutu kullanarak AD-Powershell modülünü etkinleştirmeniz gerekir:

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

Get-ADComputer ile Bilgisayar Nesnesi Özelliklerini Listeleme

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

Get-Help Get-ADComputer

AD for PowerShell modülündeki cmdlet'leri kullanarak AD'den bilgi almak için etki alanı yöneticisi ayrıcalıklarına sahip olmanız gerekmez. Domain Users veya Authenticated Users grubunun üyesi olan normal bir kullanıcı hesabı kullanmak yeterlidir.

Etki alanındaki belirli bir bilgisayar hesabı hakkında bilgi almak için, adını -Identity parametresinin argümanı olarak belirtin:

Get-ADComputer -Identity SRV-DB01

DistinguishedName : CN=SRV-DB01,OU=Servers,OU=London,OU=UK,DC=a-d,DC=com
DNSHostName       : SRV-DB01.a-d.site
Enabled           : True
Name              : SRV-DB01
ObjectClass       : computer
ObjectGUID        : 87654321-1234-5678-0000-123412341234
SamAccountName    : SRV-DB01$
SID               : S-1-5-21-123456780-1234567890-0987654321-1234
UserPrincipalName :

Get-ADComputer cmdlet'i, Bilgisayar nesnesinin yalnızca temel özelliklerini AD'den döndürdü. AD etki alanındaki son bilgisayar kaydının zamanı ile ilgileniyoruz, ancak bu bilgi yukarıdaki komutun çıktısında görüntülenmiyor. Bu bilgisayar nesnesinin tüm kullanılabilir özelliklerini Active Directory'den listeleyebilirsiniz:

Get-ADComputer -Identity SRV-DB01 -Properties *

Bu bilgisayar nitelikleri listesi, Öznitelik Düzenleyici sekmesindeki Active Directory Kullanıcıları ve Bilgisayarları konsolunda (dsa.msc) da bulunur.

Get-Member kullanarak, AD'deki Bilgisayar sınıfının tüm özelliklerinin bir listesini alabilirsiniz.

Get-ADComputer -Filter * -Properties * | Get-Member

Gördüğünüz gibi, bu bilgisayarın ağda son oturum açma zamanı, bilgisayarın LastLogonDate özniteliğinde belirtilmiştir - 02.06.2022 3:53:50 AM.

Get-ADComputer cmdlet'i, bilgisayarın herhangi bir özelliğini komut sonuçlarında görüntülemenizi sağlar. Çıktıda yalnızca Name ve LastLogonDate özniteliklerinin değerlerini bırakarak tüm gereksiz bilgileri kaldırın.

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

Bu nedenle, tek bir bilgisayar için etki alanındaki son kayıt zamanına ilişkin verileri aldık. Ardından, etki alanındaki tüm bilgisayarlar için son ağ kaydının zamanı hakkındaki bilgileri görüntülemesini sağlamak için komutu değiştirmeniz gerekir. Bunu yapmak için -Identity öğesini -Filter * olarak değiştirin:

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

Yalnızca 2 alan içeren basit bir tablomuz var: bilgisayar adı ve LastLogonData tarihi. Bilgisayar nesnesinin diğer alanlarını AD'den bu tabloya ekleyebilirsiniz.

Belirli bir OU'daki (Kuruluş Birimi) bilgisayar nesneleri hakkında bilgi görüntülemek için -SearchBase parametresini kullanın:

Get-ADComputer -SearchBase ‘OU=Paris,DC=a-d,DC=loc’ -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Sırala cmdlet'ini kullanarak sorgu sonuçlarını son oturum açma tarihine göre sıralayın:

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

Böylece, etki alanı bilgisayarlarının bir listesine ve Active Directory ağına en son giriş yaptıkları tarihe sahibiz. Şimdi 20 günden fazla kullanılmayan bilgisayar hesaplarını devre dışı bırakmak istiyoruz.

Get-Date'i kullanarak değişkendeki geçerli tarihin değerini alabilir ve bunu 120 güne indirebiliriz:

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

Elde edilen 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 nedenle, etki alanı ağına 120 günden uzun süredir kayıtlı olmayan, etkin olmayan bilgisayar hesaplarının bir listesine sahibiz. Bu hesapları devre dışı bırakmak için Disable-ADAccount veya Set-ADComputer komutunu kullanın.

İpucu. İlk kez, komutun AD nesnelerinde herhangi bir değişiklik yapılmadan çalıştırılması durumunda ne olacağını görmeyi sağlayan -WhatIf anahtarıyla komutun sonuçlarını test etmek daha iyidir.

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

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

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

Not. Ayrıca, Search-ADAccount cmdlet'ini kullanarak engellenen, devre dışı bırakılan ve etkin olmayan bilgisayarların ve etki alanı kullanıcılarının bir listesini alabilirsiniz.

Get-ADComputer ile Arama Filtrelerini Kullanma

Get-ADComputer cmdlet'inin -Filter bağımsız değişkenini, belirli ölçütlere dayalı olarak birden çok Active Directory bilgisayarını aramak için kullanabilirsiniz. Burada joker karakterleri ve mantıksal karşılaştırma işleçlerini kullanabilirsiniz. Filtre olarak yalnızca temel bilgisayar nesnesi öznitelikleri kullanılabilir.

Genişletilmiş bilgisayar özniteliklerinde arama filtreleri kullanmanız gerekirse, bunlar Where-Object kanalı aracılığıyla belirtilebilir. Bu makalenin sonraki bölümünde birkaç örnek var.

Aşağıda, etki alanındaki bilgisayar nesnelerini belirli ölçütlere göre sorgulamak ve aramak için Get-ADComputer cmdlet'ini kullanmanın bazı yararlı örnekleri verilmiştir.

Active Directory'deki tüm etkin (engellenmemiş) bilgisayarların toplam sayısını alın:

(Get-ADComputer -Filter {enabled -eq "true"}).count

Bilgisayarları aynı anda birkaç parametreye göre aramak için birden çok filtre kullanabilirsiniz. Bunu yapmak için PowerShell mantıksal karşılaştırma işleçlerini kullanın (-and, -eq, -ne , -gt , -ge , -lt , -le , -like , -notlike , -and , -or , vb.).

AD etki alanındaki Windows Server ana bilgisayarlarının sayısını sayın:

(Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows Server*' }).count

Adları LonPC ile başlayan belirli bir kuruluş birimindeki bilgisayarların listesini alın:

Get-ADComputer -Filter {Name -like "LonPC*"} -SearchBase ‘OU=London,DC=a-d,DC=com’  -Properties IPv4Address | Format-table Name,DNSHostName,IPv4Address | ft -Wrap -Auto

Kuruluş biriminde arama yaparken, -SearchScope 1 ek parametresini kullanabilirsiniz, bu da yalnızca kök kuruluş biriminde arama yapmanız gerektiği anlamına gelir. -SearchScope 2 seçeneği, iç içe geçmiş tüm OU'lardaki bilgisayarlar için yinelemeli arama anlamına gelir.

Windows 10 çalıştıran tüm iş istasyonu bilgisayarlarını bulmak için:

Get-ADComputer -Filter {OperatingSystem -like '*Windows 10*'}

İşletim sistemi sürümü, Hizmet Paketi yüklü olan etki alanındaki sunucuların bir listesini alın. ve IP adresi:

Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -Properties  Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack,IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address| ft -Wrap -Auto

Çıktı, AD'deki Windows Server listesini içeren temiz bir tabloydu:

Get-ADComputer ile Active Directory Taşıtlarını Sorgulayın: Örnekler

Aşağıda, belirli ölçütlere dayalı olarak bir etki alanındaki bilgisayarları seçmek için Get-ADComputer cmdlet'ini kullanmanın bazı yararlı örnekleri verilmiştir.

-LDAPFilter özniteliği, çeşitli LDAP sorgularını Get-ADComputer cmdlet'inin bir parametresi olarak kullanmanıza izin verir, örneğin:

Get-ADComputer -LDAPFilter "(name=*db*)"|ft

Belirli bir Active Directory OU'sunda devre dışı bırakılan tüm bilgisayar nesnelerini bulun:

Get-ADComputer -filter * -SearchBase ‘OU=Computers,OU=London,DC=a-d,dc=com’ | Where-Object {$_.enabled -eq $False}

Etki alanında 6 aydan uzun süredir oturum açmayan 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

Active Directory'de bilgisayarın parolasının en son değiştirildiği zamanı görüntüleyin. Varsayılan olarak, parola her 30 günde bir bilgisayar tarafından otomatik olarak değiştirilmelidir. Bilgisayar parolası AD'deki parolayla eşleşmezse, bilgisayarın etki alanıyla olan güven ilişkisi bozulur:

Get-ADComputer -Identity MUNPC321 -Properties PasswordLastSet

Get-ADComputer komutunun sonucu bir düz metin dosyasına aktarılabilir:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2016*' } -Properties OperatingSystem | Select DNSHostName, OperatingSystem | Format-Table -AutoSize C:\Script\server_system.txt

Ayrıca bilgisayarların bir listesini alabilir ve bunu bir CSV dosyasına aktarabilirsiniz:

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

Veya bilgisayarların listesini ve gerekli özellikleri içeren bir HTML raporu alın:

Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server 2012*' } -Properties * | Select-Object Name,OperatingSystem | ConvertTo-Html | Out-File C:\ps\ad_computers_list.html

AD bilgisayarlarını WMI veya CIM aracılığıyla uzaktan sorgulayabilirsiniz. Örneğin, etki alanındaki tüm sunucuların seri numaralarını görüntülemek için:

Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' | Select-Object Name | Foreach-Object {Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue | Select-Object PSComputerName,SerialNumber}

Sonuç listesindeki tüm bilgisayarlarla belirli bir eylemi gerçekleştirmek için Foreach döngüsünü kullanmanız gerekir. Bu örnekte, model ve üretici ile etki alanındaki Windows Server ana bilgisayarlarının bir listesini almak istiyoruz.

$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ü sözdizimi 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üncelleme komutu çalıştırmak için Komutu Çağır'ı kullanacağım:

get-adcomputer -SearchBase "OU=Servers,DC=a-d,DC=com" -Filter * | %{ Invoke-Command -Computer $_.Name -ScriptBlock {gpupdate /force} }

Aynı şekilde, etki alanındaki tüm bilgisayarlardan çeşitli yararlı bilgiler alabilirsiniz:

  • Etki alanı bilgisayarlarında Windows etkinleştirme durumunu kontrol edin

  • Boş disk alanını kontrol edin

  • PowerShell sürümünü kontrol edin ve güncelleyin

  • Tüm bilgisayarlardan ağ yapılandırmalarını toplayın

  • Mevcut kayıtlı kullanıcı adlarını al

Get-ADComputer ve PowerShell başlangıç komut dosyalarını kullanarak, çeşitli bilgisayar ayarlarını kontrol edebilir veya AD'deki bilgisayar özniteliklerinde çeşitli yararlı bilgiler depolayabilirsiniz (örneğin, bilgisayar açıklamasına bir kullanıcı adı ekleyebilirsiniz).

Örneğin, kullanıcıların bilgisayarlarındaki SCCM aracısının durumunu izliyorum. Her bilgisayar önyükleme yaptığında, ccmexec hizmet durumunu kullanılmayan bir bilgisayar özniteliğine - extensionAttribute10 kaydeden küçük bir oturum açma komut dosyası çalıştırır. Ardından aşağıdaki komutu kullanarak CCMExec hizmetinin eksik olduğu veya çalışmadığı bilgisayarları bulabilirim.

get-adcomputer -filter {extensionAttribute10 -ne "SCCM Agent:Running"} -SearchBase “OU=Compters,OU=London,DC=a-d,DC=com” -properties dNSHostName,extensionAttribute10,LastLogonDate  |select-object dNSHostName,extensionAttribute10,LastLogonDate

Get-ADUser cmdlet'ini kullanarak Active Directory kullanıcı hesapları bilgilerini alabilirsiniz.

İlgili makaleler