使用 PowerShell 創建 Active Directory 電腦報告 教學 PowerShell 使用 PowerShell 创建活动目录计算机报告。要查找有关活动目录(AD)计算机对象及其属性的任何内容,我们将主要使用Get-ADComputer cmdlet。例如,在活动目录域中,我们可以使用Get-ADComputer PowerShell cmdlet 获取计算机账户对象(服务器和工作站)的信息。此 cmdlet 是通过各种条件搜索 AD 计算机最有用的之一。 本文讨论了Get-ADComputer cmdlet 的许多用途以及我们如何将其转化为全面和有价值的报告。 让我们从文章博客“使用 PowerShell 创建活动目录计算机报告”开始。 也閱讀如何安裝 Active Directory PowerShell 模組並導入 使用 Powershell 創建 Active Directory 電腦報告 先決條件 如果我們想要跟隨本文中的示例腳本,請確保具有以下內容: 至少有一個加入域的工作站的AD 環境。 域功能級別 – Windows Server 2016。 安裝在您的域加入工作站上的 Active Directory 的遠程服務器管理工具 (RSAT)。 最新版本的PowerShell,或至少PowerShell 7.x及以上版本,需要才能执行这些脚本。 那么,如何使用 PowerShell 创建 Active Directory 计算机报告呢?让我们一起来看看。 还可以阅读如何使用 InfraSOS 创建 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)內進行導覽並從那裡查看屬性。最後,選擇一個電腦對象,並導航至 屬性編輯器 標籤以查看電腦對象屬性清單。 另外閱讀 使用 PowerShell 創建 Active Directory 登錄報告 過濾 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-ADComputer的Created對結果進行排序,然後將其傳遞給Format-Table進行顯示。 另請參閱使用PowerShell(GPO)創建Active Directory組策略報告 使用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中的電腦進行遞歸搜索。 另請閱讀使用PowerShell在Active Directory用戶和電腦中查找SID 使用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 } } 也請閱讀嘗試使用Active Directory群組報告工具 使用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/