我有一个 PowerShell 脚本,它通过以下方式查询我域中的所有计算机:
$ADlist = (([adsi]"WinNT://$((Get-WMIObject Win32_ComputerSystem).Domain)").Children) |
Where ({$_.schemaclassname -eq 'computer'}) |
Where ({$_.path -ne ''}) |
Select Path | ft -Hide | Out-String
效果很好。目标是遍历这些计算机以通过 WMI 对象检索硬件和软件信息。任务完成。
除了......我开始在某些机器上抛出这个:
我被设置为我公司的域控制器,DNS 主机名已解析并且在我的错误捕获测试中响应。对这些问题 PC 进行了一些调查后发现,这些是虚拟机和虚拟机主机。
有没有一种方法可以远程检测主机是否是虚拟机(当然),而无需我运行GWMI
命令所需的任何额外权限?实际上,我只需要忽略它们,因为我只对物理机器感兴趣。我发现的唯一方法是从中查询模型字段Win32_ComputerSystem
,但这无济于事,因为我无权在这些计算机上运行该命令。
研究发现空空如也,或依赖物理访问 WM 主机,它们位于地球的另一端。
如果绝对必要,我可以被授予访问这些机器的提升权限,但我的想法是让我的整个团队都可以访问这个脚本。运行脚本需要特殊权限意味着只有我可以运行它。