网站搜索

使用 PowerShell 获取所有域计算机的序列号


不久前,我的一位 LinekIn 联系人和 LinkedIn Group PowerShell 工程师的组成员发布了一个 One-Liner,可以获取本地计算机的序列号。感谢您的提示和建议。经过一番思考,我想到了尝试从我域中的所有计算机检索所有序列号的想法。让我们以这篇博文的形式保留这一点并与其他人分享......

介绍

要获取计算机的序列号,请打开 Windows PowerShell 并运行

wmic bios get serialnumber

或者使用 Get-WmiObject。

Get-WmiObject win32_bios | Select Serialnumber

还有更多。另一种方法是使用 Get-CimInstance。

Get-CimInstance Win32_Bios | Select-Object SerialNumber

先决条件

我的目标是以用户友好且易于阅读的输出检索所有序列号。确保在所有远程计算机上启用 WinRM(默认启用 Windows Server 2012/2016,默认禁用 Windows 客户端)。为了进行测试,您可以通过在 Windows PowerShell 中运行 Enable-PSRemoting 来启用它。对于大型环境,我建议使用组策略配置 WinRM:

组策略:为 Windows 客户端操作系统(Windows 10、Windows 8、Windows 7)启用 WinRM

啊啊……行动!

所有计算机必须共享相同的 Active Directory 域。我已登录到我的域控制器之一。这是一个 One-Liner,它为我提供了所有计算机的所有序列号:

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

为了获得更用户友好的视图和输出,请使用 Out-GridView ...

如果您不喜欢标题(例如 PSComputerName),只需修改它们......

(Get-ADComputer -Filter *).Name | Foreach-Object {Get-CimInstance Win32_Bios -ComputerName $_ -ErrorAction SilentlyContinue | Select-Object @{n='Computername'; e={$_.PSComputerName}},SerialNumber}

结论

这种场景绝对不能替代 SCCM 等企业解决方案。我们只能从开机的计算机上获取序列号。借助 SCCM,所有计算机都会根据基于时间的例程向 SCCM 服务器报告其状态,这更加舒适、有用且最新。

相关文章