Тестировать виртуальную машину удаленно без разрешений

У меня есть сценарий 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 разрешено и отвечает в моих тестах на обнаружение ошибок. Небольшое исследование этих проблемных ПК показало, что это были виртуальные машины и узлы виртуальных машин.

Есть ли способ определить, является ли хост виртуальной машиной удаленно (конечно) без каких-либо дополнительных разрешений, которые мне требуются для запуска GWMI команд? На самом деле, мне просто нужно их игнорировать, так как меня интересуют только физические машины. Единственный способ, который я нашел, - это запросить поле модели из Win32_ComputerSystem, но это не помогает, поскольку у меня нет разрешений для запуска этой команды на этих компьютерах.

Исследование оказалось пустым, или полагаться на физический доступ к хосту WM, который находится на полпути по всему миру.

Если это абсолютно необходимо, мне могут быть предоставлены повышенные права доступа к этим машинам, но идея заключалась в том, чтобы сделать этот скрипт доступным для всей моей команды. Требование специальных разрешений для запуска сценария означает, что только я могу его запустить.


person ssoong    schedule 15.06.2018    source источник
comment
Вероятно, лучше всего фильтровать на уровне AD. Существуют ли подразделения или группы безопасности, в которых есть только те системы, которые вы хотите запросить? Потому что, если у пользователя нет доступа для общения с компьютером, то общение с этим компьютером для получения информации о виртуальной машине не сработает. Кроме того, передача командлетов формата не является лучшей практикой Select Path | ft -hide | Out-String -> Select -ExpandProperty Path Я думаю, это то, что вы пытаетесь сделать.   -  person BenH    schedule 16.06.2018


Ответы (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]') | ? {$_}
person ssoong    schedule 21.06.2018