【问题标题】:Test for VM remotely without permissions无权限远程测试虚拟机
【发布时间】:2018-11-25 17:08:34
【问题描述】:

我有一个 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 查询模型字段,但这无济于事,因为我没有权限在这些计算机上运行该命令。

Researched 变成空的,或者依赖物理访问 WM 主机,它们在地球的另一端。

如果绝对必要,我可以被授予访问这些机器的更高权限,但我的想法是让我的整个团队都可以访问这个脚本。需要特殊权限才能运行脚本意味着只有我可以运行它。

【问题讨论】:

  • 可能最好在 AD 级别进行过滤。是否存在仅包含您要查询的系统的 OU 或安全组?因为如果用户无权与计算机对话,那么与该计算机对话以获取 VM 信息将无法正常工作。也管道格式 cmdlet 不是最佳实践 Select Path | ft -hide | Out-String -> Select -ExpandProperty Path 我认为这是你想要做的。

标签: powershell virtual-machine wmi powershell-2.0 get-wmiobject


【解决方案1】:

最终启用 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]') | ? {$_}

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2015-02-08
    • 2015-12-17
    • 2014-09-13
    • 2012-11-25
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多