使用 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 服务器报告其状态,这更加舒适、有用且最新。





