使用 PowerShell 创建 Active Directory 计算机报告

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

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

让我们从文章博客“使用PowerShell创建Active Directory计算机报告”开始。

使用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 cmdlet 仅返回来自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命令首先按CreatedGet-ADComputer的结果进行排序,然后将其传递给Format-Table进行显示。

使用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中进行递归搜索,查找计算机。

使用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/