خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell
برای دریافت اطلاعات مختلف از آبجکت های مختلف در اکتیودایرکتوری می توان Cmdlet ای با نام Get-ADComputer استفاده کرد. این یکی از کاربردی cmdlet ها برای جستجوی کامپیوترهای AD با پارامترهای مختلف است(برای بدست آوردن اطلاهات مختلف در خصوص User ها در اکتیودایرکتوری از Get-ADUser استفاده می شود).

نرم افزار سامانه مودیان راهکار
فرض کنید یک کار به شما تحت عنوان یافتن کامیپوترهایی که تا 120 روز قبل هیچ لاگینی تحت شبکه انجام نداده اند واگذار شده است و باید چنین اکانتهای کامپیوتری ای را پس از یافتن غیرفعال کنید.


برای اینکه از دستور Get-ADComputer در پاورشل استفاده کنیم قبل از آن باید باید Active Directory Module را پاورشل با دستور زیر Import کنیم. پی Powershell را اجرا کنید و دستور زیر را در آن وارد کنید.

Import-Module activedirectory

در PowerShell 3.0 که در ویندوز سرور 2012 معرفی شد،اگر component زیر نصب شده باشد، این ماژول به صورت پیشفرض Import شده است.

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> Active Directory module for Windows PowerShell

به عنوان مثال اگر قصد داشته باشیم اطلاعاتی در مورد یک کامپیوتر خاص در دامین بدست آوریم از دستور به همراه -Identity استفاده می کنیم که نام کامپیوتر مورد نظرمان را به این پارمتر می دهیم. فقط نام کامپیوتر مورد نظرتان را جایگزین Computer name قرمز در این دستور کنید. کلا در این دستور و در دستورات بعدی، به جای پارامترها درج شده، پارمترهای خودتان را باید جایگزین کنید.

Get-ADComputer -Identity SRV-DB01

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

DistinguishedName : CN=SRV-DB01,OU=Servers,OU=London,OU=UK,DC=khoshamoz,DC=local
DNSHostName : SRV-DB01.khoshamoz.local
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-ADCompute فقط Property های اصلی و پایه ای آبجکت Computer را از AD برمیگرداند. ولی ما اطلاعات بیشتر مثل زمان جوین شدن یا register شدن سیستم به دامین و بسیاری دیگر اطلاعات هستیم که در خروجی دستور فوق نمایش داده نمی شود. برای این منظور می توانید از دستور زیر برای لیست تمامی Property های کامپیوتر مورد نظرتان در دامین استفاده کنید:

Get-ADComputer -Identity SRV-DB01 -Properties *

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

با استفاده از Get-Member می توانید لیستی از تمام خصوصیات کلاسComputer را در AD بدست آورید:

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

همانطور که مشاهده می کنید آخرین زمان لاگین این کامپیوتر تحت شبکه دامین، در ویژگی ای با نام LastLogonDate درج شده که برای تاریخ 09/21/2015 0:20:17 است.
دستور Get-ADCompute به شما این امکان را می دهد که هر Property از کامپیوتر را در خروجی دستور نشان دهید. بعنوان مثال فقط مقادیر Name و LastLogonDate را نیاز درایم و سایر مقادیر نیازی به نمایش داده شدن نیستند. پس دستور را به فرم زیر وارد می کنیم:

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

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

ولی اگر به همین شکل فوق، اگر بخواهیم زمان Last logon همه کامپیوترها در شبکه را لیست کنیم، دستور را به فرم زیر وارد باید کنیم:

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

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

توجه داشته باشید که ما فقط دو فیلد را در دستورات خود قرار دادیم، شما به جای اینها می توانید Property های دیگری را جایگزین کنید و یا حتی اضافه کنید.
ما قصد داریم اطلاعاتکامپی.ترها در یک organizational unit یا OU خاص را بررسی کنیم. از این رو از دستور -SearchBase استفاده می کنیم. توجه داشته باشید که باید مقادیر OU ها و دامین خودتان را جایگزین کنید.

Get-ADComputer -SearchBase ‘OU=Paris,DC=khoshamoz,DC=local’ -Filter * -Properties * | FT Name, LastLogonDate -Autosize

در دستور فوق لیست کامپیوترهای یک OU خاص به همراه نام و آخرین زمان لاگین نمایش داده شد. در دستور زیر لیست تمامی کامپیوترهای جوین شده و دارای اکانت در اکتیودایرکتوری را نشان می دهیم ولی با این تفاوت که بر حسب LastLogonDate، مرتب سازی یا Sort انجام می دهیم.

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

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

بنابراین، ما لیستی از کامپیوترها و تاریخ آخرین لاگین آنها به دامین Active Directory را بدست آورده ایم. اکنون می خواهیم حساب های کامپپیوتری ای را که برای 120 روز یا بیشتر استفاده نشده بودند غیرفعال کنیم. با استفاده از Get-Date می توان مقدار تاریخ فعلی را بدست آورد و آن را 120 روز یا تعداد روزهای معین خودتان کاهش داد(مقدار حاصله در متغیر با نام $date_with_offset ذخیره می شود).

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

سپس متغیر فوق را که مقدار در آن ذخیره شده، می توان به عنوان فیلتر پرس و جو Get-ADComputer در قسمت LastLogonDate استفاده شود:

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

بنابراین ما لیستی از حساب های کامیپوتری ایجاد کرده ایم که بیش از 120 روز در شبکه لاگینی انجام نشده است. برای غیرفعال کردن این اکانت های کامپیوتری از Disable-ADAccount یا Set-ADComputer استفاده می کنیم. برای بار نخست بهتر است دستور را با سوئیچ WhatIf انجام دهید. این سوئیچ به شما امکان می دهد یک Preview از دستور پس از اجرا شدن ببینید(دستور اجرا می شود ولی اعمال نمی شود) یعنیمی توانید ببینید که پس از اجرای دستور چه خواهد شد.

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

پس از اینکه از خروجی امر مطلع شدید، کافیست -whatif را از دستور حذف کنید و اینبار دستور به طور جدی اعمال می شود و اکانتهای کامپیوتری مورد نظر غیرفعال می شوند.

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

Get-ADComputer - Examples

در ادامه کار تعدادی مثال کاربردی با کمک دستور Get-ADComputer را مشاهده خواهید کرد که حتما در شبکه به کار شما خواد آمد.
تعداد کل کامپیوترهای فعال (unlocked) را در Active Directory می توانید مشاهده کنید. ت.جه داشته باشید که در خروجی به شما عدد نشان می دهد:

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

تعداد ویندوز سرورهای جوین شده به دامین:

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

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

لیستی از کامپیوترها در یک OU خاص که نام آنها با LonPC شروع می شود:

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

هنگام جستجو در OU، می توانید از پارامتر اضافی -SearchScope 1 استفاده کنید، به این معنی که شما فقط باید در داخل خود OU جستجو را انجام دهید(نه در OU هایی درون آن قرار دارند). گزینه -SearchScope 2 نشانگر جستجوی کامپیوتر ها در همه OU های داخل OU مورد نظر شماست.
در دستور زیر همه کامپیوترهایی که داخل Windows 10 هستند لیست می شود:

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

لیست سرورها، IP Address های آنها، Service Pack و OS Version را با دستور زیر لیست می کنیم:

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

در خروجی لیستی از همه ویندوز سرورها بصورت کاملا خوانا و زیبا نمایش داده می شود:

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

ویژگی -LDAPFilter به شما امکان می دهد از کوئری های مختلف LDAP به عنوان پارامتر برای Get-ADComputer استفاده کنید، به عنوان مثال:

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

یافتن کامپیوترهای غیرفعال اکتیودایرکتوری در یک OU خاص:

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

برای حذف همه حساب های کامپیوتری ای که بیش از 6 ماه در دامین لاگینی انجام نداده اند، می توانید از دستور زیر استفاده کنید:

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

Result دستور Get-ADComputer می تواند به یک فایل متنی Export گرفته شود:

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

شما می توانید لیست کامپیوترها را در در فرمت CSV یک export بگیرید.

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

برای گرفتن یک گزارش با فرمت HTML همراه با لیستی از کامپیوترها و Property های مورد نیازتان:

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

دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell . آموزشگاه رایگان خوش آموز

برای انجام یک عمل خاص با همه کامپیوترهای موجود در لیست موجود ، باید از حلقه Foreach استفاده کنید. در این مثال، ما می خواهیم لیستی از سرورهای دامین ایجاد کنیم و از هر سرور اطلاعات خاصی را بدست بیاوریم (فایل خروجی باید حاوی نام سرور ، سازنده و مدل سرور باشد).

$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"
}

می توانید از حلقه کوتاه تری استفاده کنید. فرض کنید شما باید یک دستور خاص را روی همه کامپیوترها در یک OU خاص اجرا کنید (در این مثال، من می خواهم یک دستور آپدیت گروپ پالیسی را در همه سرورها اجرا کنم):

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



نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز