Get-ADComputer menampilkan informasi komputer di Active Directory melalui PowerShell

Cmdlet PowerShell Dapatkan-adcomputer dapat digunakan untuk memperoleh berbagai informasi tentang akun komputer (server dan workstation) dalam domain Direktori Aktif. Ini adalah salah satu cmdlet paling berguna untuk memilih dan mencari komputer dengan kriteria berbeda dalam domain AD (untuk mendapatkan informasi tentang akun pengguna AD, cmdlet lain digunakan - Get-ADUser).

Konten:

  • Sintaks Dasar dan Menggunakan Get-ADComputer Cmdlet
  • Dapatkan contoh cmdlet-ADComputer

Misalkan tugas Anda adalah menemukan di Active Directory semua komputer tidak aktif yang belum terdaftar di domain selama lebih dari 120 hari dan memblokir akun komputer ini.

Sebelum Anda mulai menggunakan cmdlet Get-ADComputer, Anda harus menghubungkan Modul Direktori Aktif untuk Windows PowerShell.

Direktori aktif Modul Impor

Kiat. Di PowerShell 3.0 (diperkenalkan pada Windows Server 2012) dan di atasnya, modul ini terhubung secara default ketika menginstal Alat Administrasi Server Jarak Jauh -> Alat Administrasi Peran -> AD DS dan Alat LDS AD -> modul Direktori Aktif untuk Windows PowerShell. Untuk menggunakan cmdlet Get-ADComputer di klien Windows 10.8.1 dan Windows 7, Anda perlu mengunduh dan menginstal RSAT untuk versi OS Anda dan mengaktifkan modul AD-PowerShell dari panel kontrol atau dengan perintah:
Aktifkan-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Sintaks Dasar dan Menggunakan Get-ADComputer Cmdlet

Bantuan tentang parameter cmdlet Get-ADComputer dipanggil secara standar menggunakan Get-Help:

Get-Help Get-ADComputer

Untuk mendapatkan informasi dari AD menggunakan cmdlet dari modul AD for Powershell, tidak perlu memiliki hak administrator domain, cukup bahwa akun di mana cmdlet dijalankan dimasukkan dalam grup pengguna domain.

Untuk mendapatkan informasi tentang akun domain komputer atau server tertentu, tentukan namanya sebagai argumen ke parameter -Identitas:

Dapatkan-ADComputer -Identity SRV-DB01

DistinguishedName: CN = DB01, OU = Server, OU = MSK, DC = winitpro, DC = en DNSHostName: DB01.winitpro.ru Diaktifkan: Nama Benar: DB01 ObjectClass: computer ObjectGUID: 1234567c-13f8-4a2c-8b00-b30a32324103 SamAccount DB01 $ SID: S-1-5-21-3243682314-1360322815-2238451561-4318 UserPrincipalName: 

Cmdlet hanya mengembalikan sifat dasar objek Komputer dari AD. Kami tertarik pada waktu pendaftaran komputer terakhir di domain AD, tetapi informasi ini tidak di output dari perintah. Daftar semua properti yang tersedia dari komputer ini dari Active Directory:

Dapatkan-ADComputer -Identity SRV-DB01 -Properti *

Menggunakan Get-Member, Anda bisa mendapatkan daftar semua properti dari kelas Komputer di AD:

Dapatkan-ADComputer -Filter * -Properti * | Dapatkan anggota

Seperti yang Anda lihat, waktu komputer terakhir masuk ke jaringan ditunjukkan dalam atribut komputer LastLogonDate - 09/21/2015 12:20:17.

Cmdlet Get-ADComputer memungkinkan Anda menampilkan salah satu properti komputer di hasil perintah. Kami menghapus semua informasi yang tidak perlu, hanya menyisakan nilai bidang dalam output Nama dan LastLogonDate.

Dapatkan-ADComputer -identity SRV-DB01 -Properti * | Nama FT, LastLogonDate -Autosize

Jadi, kami mendapat data tentang pendaftaran terakhir kali di domain untuk satu komputer. Sekarang kita perlu mengubah perintah sehingga mengembalikan informasi tentang waktu pendaftaran terakhir di jaringan untuk semua komputer di domain. Untuk melakukan ini, ganti parameternya -Identitas pada -Saring:

Dapatkan-ADComputer -Filter * -Properti * | Nama FT, LastLogonDate -Autosize

Kami mendapat tabel yang hanya berisi 2 bidang: nama dan tanggal komputer LastLogonData. Anda bisa menambahkan bidang lain dari objek Komputer dari AD ke tabel ini. Untuk menampilkan informasi tentang komputer dalam wadah domain tertentu (OU), gunakan parameter SearchBase:
Dapatkan-ADComputer -SearchBase 'OU = Moskow, DC = winitpro, DC = loc' -Filter * -Properti * | Nama FT, LastLogonDate -Autosize

Kami mengurutkan hasil permintaan pada saat login terakhir ke jaringan (bidang LastLogonDate) menggunakan perintah Sortir:

Dapatkan-ADComputer -Filter * -Properti * | Sortir LastLogonDate | Nama FT, LastLogonDate -Autosize

Jadi, kami mendapat daftar komputer domain dan waktu entri terakhir mereka ke jaringan Active Directory. Sekarang kami ingin memblokir akun komputer yang belum digunakan selama lebih dari 120 hari.

Menggunakan Get-Date, kami mendapatkan tanggal saat ini dalam variabel dan mengurangi 120 hari dari tanggal saat ini:

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

Variabel yang diperoleh dengan tanggal dapat digunakan sebagai filter untuk permintaan Get-ADComputer oleh LastLogonDate

Dapatkan-ADComputer -Properti LastLogonDate -Filter LastLogonDate -lt $ date_with_offset | Sortir LastLogonDate | Nama FT, LastLogonDate -Autosize

Dengan demikian, kami menerima daftar komputer tidak aktif yang tidak terdaftar di jaringan selama lebih dari 120 hari. Menggunakan cmdlet Set-adcomputer atau Disable-ADAccount Anda dapat menonaktifkan akun ini.

Kiat. Untuk pertama kalinya, lebih baik untuk menguji hasil perintah dengan sakelar -Whatif, terima kasih yang tim tidak membuat perubahan, menunjukkan apa yang akan terjadi ketika dieksekusi.

Dapatkan-ADComputer -Properti LastLogonDate -Filter LastLogonData -lt $ date_with_offset | Set-ADComputer -Enabled $ false -whatif

Sekarang Anda dapat memblokir semua akun komputer yang diterima:

Dapatkan-ADComputer -Properti LastLogonDate -Filter LastLogonData -lt $ datecutoff | Set-ADComputer -Enabled $ false

Kiat. Daftar komputer dan pengguna domain yang diblokir, terputus dan tidak aktif juga dapat diperoleh dengan menggunakan cmdlet Search-ADAccount yang terpisah..

Dapatkan contoh cmdlet-ADComputer

Berikut adalah beberapa contoh perintah yang lebih berguna menggunakan cmdlet Get-ADComputer yang dapat Anda gunakan untuk memilih dan mencari komputer domain untuk kriteria tertentu.

Dapatkan total jumlah komputer aktif (tidak terkunci) di Direktori Aktif:

(Get-ADComputer -Filter enabled -eq "true"). Hitung

Baca jumlah server Windows Server di domain:

(Dapatkan-ADComputer -Filter diaktifkan -eq "true" -dan OperatingSystem -Seperti '* Windows Server *').

Dapatkan daftar komputer dalam OU tertentu yang namanya dimulai dengan BuhPC:

Dapatkan-ADComputer -Filter Seperti-nama "BuhPC *" -SearchBase 'OU = Moskow, DC = winitpro, DC = loc' -Properti IPv4Address | Nama Format-tabel, DNSHostName, IPv4Address | ft-wrap-auto

Saat mencari dengan OU, Anda dapat menggunakan parameter tambahan -SearchScope 1, yang berarti Anda hanya perlu mencari di partisi root. Parameter -SearchScope 2 berarti pencarian rekursif untuk komputer di semua OU bersarang.

Pilih semua workstation yang menjalankan Windows 10:

Dapatkan-ADComputer -Filter OperatingSystem-like '* Windows 10 *'

Dapatkan daftar server dalam domain dengan versi OS, alamat IP, dan Paket Layanan yang diinstal:
Dapatkan-ADComputer -Filter 'operatingsystem-like "* Windows server *" -dan diaktifkan -eq "true"' -Nama Properti, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Nama Properti, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | ft-wrap-auto

Outputnya adalah tabel yang indah dengan daftar Windows Server dalam AD.

Atribut -LDAPFilter memungkinkan Anda untuk menggunakan berbagai permintaan LDAP sebagai parameter dari cmdlet Get-ADComputer, misalnya:

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

Pilih komputer yang terkunci di OU tertentu:

Dapatkan-ADComputer -filter * -SearchBase 'OU = Komputer, dc = winitpro, dc = loc' | Where-Object $ _. Diaktifkan -eq $ False

Untuk menghapus semua akun komputer dalam domain yang belum masuk ke domain selama lebih dari 6 bulan, Anda dapat menggunakan perintah:

get-adcomputer -properties lastLogonDate -filter * | di mana $ _. lastLogonDate -lt (get-date) .addmonths (-6) | Hapus-ADComputer

Hasil dari perintah Get-ADComputer dapat diunduh ke file teks:

Dapatkan-ADComputer -Filter OperatingSystem -Seperti '* Windows Server 2008 *' -Properties OperatingSystem | Pilih DNSHostName, OperatingSystem | Format-Tabel -AutoSize C: \ Script \ server_system.txt

Anda juga bisa mendapatkan pilihan komputer dan mengekspornya ke file CSV:

Dapatkan-ADComputer -Filter * -Property * | Select-Object Name, OperatingSystem, OperatingSystemServicePack | Ekspor-CSV Semua-Windows.csv -NoTypeInformation -Encoding UTF8

Atau dapatkan file laporan HTML dengan daftar komputer dan atribut komputer yang diperlukan:

Dapatkan-ADComputer -Filter OperatingSystem -Seperti '* Windows Server 2012 *' -Properti * | Select-Object Name, OperatingSystem | ConvertTo-Html | File C: \ ps \ ad_computer.html

Untuk melakukan tindakan tertentu dengan semua komputer dari daftar, Anda harus menggunakan loop Foreach. Dalam contoh ini, kami ingin mendapatkan daftar server di domain dengan model dan pabrikan:

$ Komputer = Dapatkan-ADComputer -Filter OperatingSystem -Seperti '* Windows Server *'
Foreach ($ Komputer dalam $ Komputer)

$ Hostname = $ Computer.Name
$ ComputerInfo = (Get-WmiObject -Nama pengguna $ Hostname Win32_ComputerSystem)
$ Pabrikan = $ Computer.Manufacturer
$ Model = $ Computer.Model
Host-Tulis "Nama: $ Hostname"
Host-Tulis "Produsen: $ Produsen"
Host-Tulis "Model: $ Model"
Tuan Rumah Tulis ""
$ Content = "$ Hostname; $ Manufacturer; $ Model"
Tambahkan konten -Nilai $ Konten -Path "C: \ PS \ ServersInfo.txt"

Atau Anda dapat menggunakan sintaks loop pendek. Misalkan kita perlu menjalankan perintah tertentu pada semua komputer dalam OU tertentu (dalam contoh ini, kami ingin menjalankan perintah untuk memperbarui pengaturan kebijakan grup di semua server):

get-adcomputer -SearchBase "OU = Server, DC = winitpro, DC = loc" -Filter * | % Invoke-Command -Computer $ _. Name -ScriptBlock gpupdate / force

Menggunakan Get-AdComputer dan skrip masuk PowerShell, Anda dapat mengontrol berbagai pengaturan komputer. Misalnya, saya memantau status agen SCCM di komputer pengguna. Ketika setiap komputer melakukan booting, ia menjalankan skrip log masuk yang, menggunakan Set-ADComputer, menyimpan status layanan ccmexec ke atribut komputer gratis - extensionAttribute10.

Kemudian, menggunakan perintah berikut, saya dapat menemukan komputer di mana layanan CCMExec hilang atau tidak berjalan:

get-adcomputer -filter extensionAttribute10 -ne "Agen SCCM: Menjalankan" -SearchBase “OU = Komputer, OU = MSK, DC = winitpro, DC = id” -properti dNSHostName, extensionAttribute10, LastLogonDate | select-object dNSHostName, extensionAttribute LastLogonDate