使用 PowerShell 創建 Active Directory 電腦報告

使用 PowerShell 创建活动目录计算机报告。要查找有关活动目录(AD)计算机对象及其属性的任何内容,我们将主要使用Get-ADComputer cmdlet。例如,在活动目录域中,我们可以使用Get-ADComputer PowerShell cmdlet 获取计算机账户对象(服务器和工作站)的信息。此 cmdlet 是通过各种条件搜索 AD 计算机最有用的之一。

本文讨论了Get-ADComputer cmdlet 的许多用途以及我们如何将其转化为全面和有价值的报告。

让我们从文章博客“使用 PowerShell 创建活动目录计算机报告”开始。

使用 Powershell 創建 Active Directory 電腦報告

先決條件

如果我們想要跟隨本文中的示例腳本,請確保具有以下內容:

那么,如何使用 PowerShell 创建 Active Directory 计算机报告呢?让我们一起来看看。

了解 Get-ADComputer Powershell 命令

在我们开始之前,我们应该熟悉Get-ADComputer命令。我们不需要域管理员权限就可以从Active Directory获取信息。使用普通用户帐户,属于域用户经过身份验证的用户组成员就足够了。

好的,Get-Help 命令通常提供了Get-ADComputer cmdlet的所有其他参数列表:

$command = Get-ADComputer
Get-Help $command

示例输出:

另外,我们可以访问Get-ADComputer命令的官方文档此处

在命令行和文档中滚动查看了长长的参数列表后,我们可以开始编写脚本了。记住,伴随着Get-ADComputer 命令最关键的参数是 Identity 参数。

為了獲取域中特定電腦 帳戶 的資訊,使用-Identity 參數並將其名稱作為參數:

Get-ADComputer -Identity DC01

以下是示例輸出:

DistinguishedName : CN=DC01,OU=Servers,OU=DC,OU=IT,DC=infrasos,DC=com
DNSHostName       : DC01.infrasos.com
Enabled           : True
Name              : DC01
ObjectClass       : computer
ObjectGUID        : 87654321-1204-5578-0000-123462341264
SamAccountName    : DC01
SID               : S-1-5-21-123656780-1234667890-0986654321-1264

結果如下,Get-ADComputer 命令已返回 AD 中計算機對象的基本屬性。但是,上面的命令只提供了有關計算機對象的頂層信息。然後,如果我們想要深入了解並顯示對象的可用屬性,我們可以使用-Properties 參數。

要列出對象的所有屬性,請附加-Properties 參數並添加星號值(*)。星號值是表示全部 的萬用符值:

Get-ADComputer -Identity DC01 -Properties *

示例輸出:

另一方面,我們可以在 Active 目錄 使用者和電腦控制台(或 dsa.msc)內進行導覽並從那裡查看屬性。最後,選擇一個電腦對象,並導航至 屬性編輯器 標籤以查看電腦對象屬性清單。

過濾 Get-ADComputer 結果

其中一個缺點是我們可能會顯示更多我們不一定需要的資訊。使用PowerShell管道,Get-ADComputer cmdlet允許我們在命令行中顯示特定的電腦屬性。例如,我們可以通過將Name 和LastLogonDate 屬性的值通過管道傳遞到Format-Table命令的主語法來將它們保留在輸出中:

Get-ADComputer -Identity DC01 -Properties * | Format-Table Name, LastLogonDate -Autosize

範例輸出:

在這裡,如果我們在運行PowerShell時指定了AutoSize 參數,Windows PowerShell會根據實際顯示的資料計算列寬。總的來說,這個參數使列可讀。

然而,先前的指令僅搜尋單一的AD電腦物件。因此,如果我們想要取得網域中所有電腦的資訊,我們可以將識別參數替換為篩選器:

Get-ADComputer -Filter * -Properties * | Format-Table Name, Created -Autosize

查看範例輸出:

我們獲得了一個簡單格式的表格,僅包含兩個欄位:電腦名稱和物件建立日期。我們可以透過在管道的格式化表格部分添加屬性來將AD中電腦物件的其他欄位添加到此表格中。

基本上,要取得特定組織單位(OU)中電腦物件的資訊,我們可以使用–搜尋基礎參數:

Get-ADComputer -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Filter * -Properties * | Format-Table Name, Created -Autosize

此外,我們還可以通過在管道中插入Sort-Object cmdlet來對查詢結果進行排序

Get-ADComputer -Filter * -Properties * | Sort-Object Created | Format-Table Name, Created -Autosize

在上面的命令中,Sort-Object命令首先根據Get-ADComputerCreated對結果進行排序,然後將其傳遞給Format-Table進行顯示。

使用Get-ADComputer的搜索過濾器

我們使用Get-ADComputercmdlet的-Filter參數來根據特定標準搜索多個AD計算機。如前所述,在這種情況下,我們可以使用通配符和邏輯比較運算符。當然,作為過濾器,我們只能使用主要計算機對象屬性。

同樣地,如果我們需要在擴展的電腦屬性上使用搜索過濾器,我們會使用Where-Object管道。以下是使用Get-ADComputer命令在域中查詢和搜索電腦對象的更具體示例。

獲取Active Directory中所有活躍且未被封鎖的電腦總數:

我們同時使用多個過濾器來搜索電腦。使用PowerShell邏輯比較運算符來完成這一點。

(Get-ADComputer -Filter {Enabled -eq "true"}).Count

顯示AD域中所有Windows Server主機:

Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*' }

獲取特定OU中名稱以DC開頭的所有電腦列表:

Get-ADComputer -Filter {Name -like "DC*"} -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Properties * | Format-Table Name

當在OU中搜索時,我們可以使用–SearchScope1參數將搜索範圍限制在根OU。-SearchScope2選項則對所有OU中的電腦進行遞歸搜索。

使用Get-ADComputer管理多個電腦

我們必須使用Foreach-Object循環對結果列表中的所有電腦執行特定操作。在此示例中,我們可以使用Windows管理儀器通用信息類別遠程查詢多個AD電腦:

Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Foreach-Object {
    Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue |
    Select-Object PSComputerName
}

顯然,在此示例中,如果我們想要域中Windows Server主機的列表,以及它們的型號和製造商,我們使用相同的循環方法並獲取電腦屬性。

$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-Output "Name: $Hostname"
    Write-Output "Manufacturer: $Manufacturer"
    Write-Output "Model: $Model"
    Write-Output " "
}

因此,從上述範例中獲取的資訊可以透過服務輕鬆取得,因為這些電腦是AD的一部分。然而,並非所有電腦都將其屬性公佈到域中。我們該如何獲取它們呢?

接下來,我們利用Invoke-Command。因此,這個PowerShell cmdlet在遠端電腦上執行本地命令。例如,假設我們需要在特定OU中的所有電腦上運行特定命令。在這個例子中,我們使用Invoke-Command在所有伺服器上運行群組原則更新命令:

Get-ADComputer -SearchBase "OU=DC,DC=infrasos,DC=com" -Filter * |
%{ Invoke-Command -Computer $_.Name -ScriptBlock { gpupdate /force } }

使用Get-ADComputer生成PowerShell AD報告

在Windows PowerShell中,我們將命令的輸出導出到多種報告格式。以下是一些示例。

首先,我們將Get-ADComputer命令的結果導出到文本文件:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2019*' } -Properties * |
Select Name, OperatingSystem |
Format-Table -AutoSize C:\Temp\2019_servers.txt

其次,我們還獲得了所有計算機的列表,並將其導出到逗號分隔值(CSV)文件中:

Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Export-CSV All-Computers.csv -NoTypeInformation

第三,我們還可以導出報告並獲得包含所有計算機及其基本屬性的HTML網頁格式:

Get-ADComputer -Filter * -Properties * |
Select-Object Name,OperatingSystem |
ConvertTo-Html |
Out-File C:\ps\ad_all_computers.html

它應該看起來像這樣:

感謝您閱讀使用PowerShell創建Active Directory計算機報告。我們將結束。

也請閱讀部署Azure AD監控

使用PowerShell創建Active Directory計算機報告的結論

在本文中,我們全面討論了Get-ADComputer命令。我們了解到,使用此命令,我們可以獲得有關特定機器的詳細屬性和信息列表。此外,通過詳盡的列表,我們學會了如何過濾這些屬性,僅提取我們所需的信息。

总结一下,我们还学会了如何将查询cmdlet转化为更有用的命令,以便我们可以远程传递命令。最后,我们现在可以使用所有这些信息生成各种格式的报告

Source:
https://infrasos.com/create-active-directory-computer-reports-with-powershell/