使用 PowerShell 创建 Active Directory 计算机报告 教程 PowerShell 使用PowerShell创建Active Directory计算机报告。要查找有关活动目录(AD)计算机对象及其属性的任何信息,我们将主要使用Get-ADComputer命令。例如,在Active Directory域中,我们可以使用Get-ADComputerPowerShell命令来获取有关计算机帐户对象(服务器和工作站)的信息。这个命令是通过各种条件搜索AD计算机最有用的之一。 本文讨论了Get-ADComputer命令的许多用途,以及我们如何将其转化为全面而有价值的报告。 让我们从文章博客“使用PowerShell创建Active Directory计算机报告”开始。 还要阅读如何安装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 cmdlet 仅返回来自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命令首先按Created对Get-ADComputer的结果进行排序,然后将其传递给Format-Table进行显示。 也请阅读使用PowerShell(GPO)创建Active Directory组策略报告 使用Get-ADComputer的搜索过滤器 我们使用Get-ADComputer cmdlet的-Filter参数根据特定标准搜索多个AD计算机。如前所述,在这种情况下,我们可以使用通配符和逻辑比较运算符。当然,作为过滤器,我们只能使用主要计算机对象属性。 同样地,如果我们需要在扩展的计算机属性上使用搜索过滤器,我们会使用Where-Object管道。以下是使用Get-ADComputer命令在域中查询和搜索计算机对象的更多实用示例。 获取活动目录中所有活跃且未被阻止的计算机总数: 我们同时使用多个过滤器搜索计算机。使用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/