无权限远程测试虚拟机
Test for VM remotely without permissions
我有一个 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 进行的一些调查表明,这些是 VM 和 VM 主机。
有没有一种方法可以检测主机是否是远程虚拟机(当然),而无需我对 运行 GWMI
命令的任何额外权限?实际上,我只需要忽略它们,因为我只对物理机器感兴趣。我找到的唯一方法是从 Win32_ComputerSystem
查询模型字段,但这无济于事,因为我没有权限在这些计算机上执行 运行 该命令。
研究出来是空的,还是要靠物理访问WM主机,那是半个地球
如果绝对必要,我可以被授予访问这些机器的提升权限,但我的想法是让我的整个团队都可以访问这个脚本。需要 运行 脚本的特殊权限意味着只有我可以 运行 它。
最终启用 RSAT 并使用 AD 来完成它。干净多了。
import-module ActiveDirectory
$ADlist = get-adcomputer -filter '*' -searchbase "OU=Workstations,DC=[redacted],DC=com" -properties 'Name' `
| Where { ($_.DistinguishedName -notlike "*OU=Appliances,*") } | FT Name -hide | Out-String
$computers = ($ADlist -split '[\r\n]') | ? {$_}
我有一个 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 进行的一些调查表明,这些是 VM 和 VM 主机。
有没有一种方法可以检测主机是否是远程虚拟机(当然),而无需我对 运行 GWMI
命令的任何额外权限?实际上,我只需要忽略它们,因为我只对物理机器感兴趣。我找到的唯一方法是从 Win32_ComputerSystem
查询模型字段,但这无济于事,因为我没有权限在这些计算机上执行 运行 该命令。
研究出来是空的,还是要靠物理访问WM主机,那是半个地球
如果绝对必要,我可以被授予访问这些机器的提升权限,但我的想法是让我的整个团队都可以访问这个脚本。需要 运行 脚本的特殊权限意味着只有我可以 运行 它。
最终启用 RSAT 并使用 AD 来完成它。干净多了。
import-module ActiveDirectory
$ADlist = get-adcomputer -filter '*' -searchbase "OU=Workstations,DC=[redacted],DC=com" -properties 'Name' `
| Where { ($_.DistinguishedName -notlike "*OU=Appliances,*") } | FT Name -hide | Out-String
$computers = ($ADlist -split '[\r\n]') | ? {$_}