خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
دستور Get-ADComputer - یافتن اطلاعات دقیق کامپیوترها در اکتیودایرکتوری با Powershell
برای دریافت اطلاعات مختلف از آبجکت های مختلف در اکتیودایرکتوری می توان Cmdlet ای با نام Get-ADComputer استفاده کرد. این یکی از کاربردی cmdlet ها برای جستجوی کامپیوترهای AD با پارامترهای مختلف است(برای بدست آوردن اطلاهات مختلف در خصوص User ها در اکتیودایرکتوری از Get-ADUser استفاده می شود).
فرض کنید یک کار به شما تحت عنوان یافتن کامیپوترهایی که تا 120 روز قبل هیچ لاگینی تحت شبکه انجام نداده اند واگذار شده است و باید چنین اکانتهای کامپیوتری ای را پس از یافتن غیرفعال کنید.
برای اینکه از دستور Get-ADComputer در پاورشل استفاده کنیم قبل از آن باید باید Active Directory Module را پاورشل با دستور زیر Import کنیم. پی Powershell را اجرا کنید و دستور زیر را در آن وارد کنید.
در PowerShell 3.0 که در ویندوز سرور 2012 معرفی شد،اگر component زیر نصب شده باشد، این ماژول به صورت پیشفرض Import شده است.
به عنوان مثال اگر قصد داشته باشیم اطلاعاتی در مورد یک کامپیوتر خاص در دامین بدست آوریم از دستور به همراه -Identity استفاده می کنیم که نام کامپیوتر مورد نظرمان را به این پارمتر می دهیم. فقط نام کامپیوتر مورد نظرتان را جایگزین Computer name قرمز در این دستور کنید. کلا در این دستور و در دستورات بعدی، به جای پارامترها درج شده، پارمترهای خودتان را باید جایگزین کنید.
دستور Get-ADCompute فقط Property های اصلی و پایه ای آبجکت Computer را از AD برمیگرداند. ولی ما اطلاعات بیشتر مثل زمان جوین شدن یا register شدن سیستم به دامین و بسیاری دیگر اطلاعات هستیم که در خروجی دستور فوق نمایش داده نمی شود. برای این منظور می توانید از دستور زیر برای لیست تمامی Property های کامپیوتر مورد نظرتان در دامین استفاده کنید:
با استفاده از Get-Member می توانید لیستی از تمام خصوصیات کلاسComputer را در AD بدست آورید:
همانطور که مشاهده می کنید آخرین زمان لاگین این کامپیوتر تحت شبکه دامین، در ویژگی ای با نام LastLogonDate درج شده که برای تاریخ 09/21/2015 0:20:17 است.
دستور Get-ADCompute به شما این امکان را می دهد که هر Property از کامپیوتر را در خروجی دستور نشان دهید. بعنوان مثال فقط مقادیر Name و LastLogonDate را نیاز درایم و سایر مقادیر نیازی به نمایش داده شدن نیستند. پس دستور را به فرم زیر وارد می کنیم:
ولی اگر به همین شکل فوق، اگر بخواهیم زمان Last logon همه کامپیوترها در شبکه را لیست کنیم، دستور را به فرم زیر وارد باید کنیم:
توجه داشته باشید که ما فقط دو فیلد را در دستورات خود قرار دادیم، شما به جای اینها می توانید Property های دیگری را جایگزین کنید و یا حتی اضافه کنید.
ما قصد داریم اطلاعاتکامپی.ترها در یک organizational unit یا OU خاص را بررسی کنیم. از این رو از دستور -SearchBase استفاده می کنیم. توجه داشته باشید که باید مقادیر OU ها و دامین خودتان را جایگزین کنید.
در دستور فوق لیست کامپیوترهای یک OU خاص به همراه نام و آخرین زمان لاگین نمایش داده شد. در دستور زیر لیست تمامی کامپیوترهای جوین شده و دارای اکانت در اکتیودایرکتوری را نشان می دهیم ولی با این تفاوت که بر حسب LastLogonDate، مرتب سازی یا Sort انجام می دهیم.
بنابراین، ما لیستی از کامپیوترها و تاریخ آخرین لاگین آنها به دامین Active Directory را بدست آورده ایم. اکنون می خواهیم حساب های کامپپیوتری ای را که برای 120 روز یا بیشتر استفاده نشده بودند غیرفعال کنیم. با استفاده از Get-Date می توان مقدار تاریخ فعلی را بدست آورد و آن را 120 روز یا تعداد روزهای معین خودتان کاهش داد(مقدار حاصله در متغیر با نام $date_with_offset ذخیره می شود).
سپس متغیر فوق را که مقدار در آن ذخیره شده، می توان به عنوان فیلتر پرس و جو Get-ADComputer در قسمت LastLogonDate استفاده شود:
بنابراین ما لیستی از حساب های کامیپوتری ایجاد کرده ایم که بیش از 120 روز در شبکه لاگینی انجام نشده است. برای غیرفعال کردن این اکانت های کامپیوتری از Disable-ADAccount یا Set-ADComputer استفاده می کنیم. برای بار نخست بهتر است دستور را با سوئیچ WhatIf انجام دهید. این سوئیچ به شما امکان می دهد یک Preview از دستور پس از اجرا شدن ببینید(دستور اجرا می شود ولی اعمال نمی شود) یعنیمی توانید ببینید که پس از اجرای دستور چه خواهد شد.
پس از اینکه از خروجی امر مطلع شدید، کافیست -whatif را از دستور حذف کنید و اینبار دستور به طور جدی اعمال می شود و اکانتهای کامپیوتری مورد نظر غیرفعال می شوند.
تعداد کل کامپیوترهای فعال (unlocked) را در Active Directory می توانید مشاهده کنید. ت.جه داشته باشید که در خروجی به شما عدد نشان می دهد:
تعداد ویندوز سرورهای جوین شده به دامین:
لیستی از کامپیوترها در یک OU خاص که نام آنها با LonPC شروع می شود:
هنگام جستجو در OU، می توانید از پارامتر اضافی -SearchScope 1 استفاده کنید، به این معنی که شما فقط باید در داخل خود OU جستجو را انجام دهید(نه در OU هایی درون آن قرار دارند). گزینه -SearchScope 2 نشانگر جستجوی کامپیوتر ها در همه OU های داخل OU مورد نظر شماست.
در دستور زیر همه کامپیوترهایی که داخل Windows 10 هستند لیست می شود:
لیست سرورها، IP Address های آنها، Service Pack و OS Version را با دستور زیر لیست می کنیم:
در خروجی لیستی از همه ویندوز سرورها بصورت کاملا خوانا و زیبا نمایش داده می شود:
ویژگی -LDAPFilter به شما امکان می دهد از کوئری های مختلف LDAP به عنوان پارامتر برای Get-ADComputer استفاده کنید، به عنوان مثال:
یافتن کامپیوترهای غیرفعال اکتیودایرکتوری در یک OU خاص:
برای حذف همه حساب های کامپیوتری ای که بیش از 6 ماه در دامین لاگینی انجام نداده اند، می توانید از دستور زیر استفاده کنید:
Result دستور Get-ADComputer می تواند به یک فایل متنی Export گرفته شود:
شما می توانید لیست کامپیوترها را در در فرمت CSV یک export بگیرید.
برای گرفتن یک گزارش با فرمت HTML همراه با لیستی از کامپیوترها و Property های مورد نیازتان:
برای انجام یک عمل خاص با همه کامپیوترهای موجود در لیست موجود ، باید از حلقه Foreach استفاده کنید. در این مثال، ما می خواهیم لیستی از سرورهای دامین ایجاد کنیم و از هر سرور اطلاعات خاصی را بدست بیاوریم (فایل خروجی باید حاوی نام سرور ، سازنده و مدل سرور باشد).
می توانید از حلقه کوتاه تری استفاده کنید. فرض کنید شما باید یک دستور خاص را روی همه کامپیوترها در یک OU خاص اجرا کنید (در این مثال، من می خواهم یک دستور آپدیت گروپ پالیسی را در همه سرورها اجرا کنم):
فرض کنید یک کار به شما تحت عنوان یافتن کامیپوترهایی که تا 120 روز قبل هیچ لاگینی تحت شبکه انجام نداده اند واگذار شده است و باید چنین اکانتهای کامپیوتری ای را پس از یافتن غیرفعال کنید.
برای اینکه از دستور Get-ADComputer در پاورشل استفاده کنیم قبل از آن باید باید Active Directory Module را پاورشل با دستور زیر Import کنیم. پی Powershell را اجرا کنید و دستور زیر را در آن وارد کنید.
Import-Module activedirectory
در PowerShell 3.0 که در ویندوز سرور 2012 معرفی شد،اگر component زیر نصب شده باشد، این ماژول به صورت پیشفرض Import شده است.
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
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-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
ولی اگر به همین شکل فوق، اگر بخواهیم زمان Last logon همه کامپیوترها در شبکه را لیست کنیم، دستور را به فرم زیر وارد باید کنیم:
Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize
توجه داشته باشید که ما فقط دو فیلد را در دستورات خود قرار دادیم، شما به جای اینها می توانید 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
بنابراین، ما لیستی از کامپیوترها و تاریخ آخرین لاگین آنها به دامین 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
لیستی از کامپیوترها در یک 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
در خروجی لیستی از همه ویندوز سرورها بصورت کاملا خوانا و زیبا نمایش داده می شود:
ویژگی -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
برای انجام یک عمل خاص با همه کامپیوترهای موجود در لیست موجود ، باید از حلقه 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 دیدگاه)
دیدگاه خود را ثبت کنید: