2016-01-13 4 views
1

Я пытался использовать Powershell с импортированными командами PowerCLI для администрирования VMware, и я попал в ловушку. То, что я пытаюсь сделать, - это запросить все виртуальные машины в местоположении (неважно, где), и для каждой виртуальной машины я хочу, чтобы группа имела разрешение «Виртуальный компьютер с моментальным снимком», а затем использовать это имя группы для запуска Get -ADGroupMembers запрос для всех в этой группе. Я также должен удалить префикс домена из запроса AD, который в противном случае вызывал бы ошибку.vCenter Запрос полномочий VM с использованием Powershell/PowerCLI

После того, как вы играете с информацией о хэш-таблице в csv, в отличие от «SystemObject []», я наконец получил скрипт, чтобы он не возвращал ошибки. ИСКЛЮЧАЕТСЯ на виртуальных машинах, где имеется более одной группы. Он выдает ошибку, но сценарий продолжается и просто выводит члены первой группы.

Как это сделать, чтобы сделать рекурсивный запрос AD для каждой группы, которая вытащили в хэш-таблицу групп владельца? Результат будет таким же, как и для всех других виртуальных машин, только с линией для каждой группы и членов.

$AllVMs = @() 
$vms = get-vm * -Location datacenter 
foreach ($vm in $vms) 
    { 
     $owners = Get-VIPermission $vm.name | where-object {$_.role -eq "virtual machine user with snapshot"} 
     foreach ($owner in $owners) 
      { 
      $members = Get-ADGroupMember ($owners.principal -replace '^prefix\\') 

     $temp = New-Object psobject | 
     Add-Member Noteproperty "Name" -value $vm.name -PassThru | 
     Add-Member Noteproperty "Owner" -value (@($owners.principal) -join ',') -PassThru | 
     Add-Member Noteproperty "Members" -value (@($members.SamAccountName) -join ',') -passthru 
     $AllVMs+=$temp 
    } 
$AllVMs | Export-Csv -Path c:\users\me\desktop\AllVMs.csv 

ответ

0

Я играл с ним еще сегодня и понял это! Я запускаю скрипт прямо сейчас с центром обработки данных с более чем 350 машинами, поэтому технически я не знаю, на 100%, что он работает, но он работал против 3 машин :-) Я также добавил строку, чтобы перечислить каждую машину, которой принадлежит больше чем одна группа - удобна для устранения неполадок. Вот сценарий:

$AllVMs = @() 
$vms = get-vm -Location DATACENTER 
foreach ($vm in $vms) 
    { 
     $owners = @(Get-VIPermission $vm.name | where-object {$_.role -eq "virtual machine user with snapshot"}) 
     if ($owners.count -gt 1) {write-host "** Note ** '$vm' has"$owners.count "owner groups"} 
     foreach ($owner in $owners) 
      { 
       $members = Get-ADGroupMember ($owner.principal -replace '^prefix\\') 
       $temp = New-Object psobject | 
       Add-Member Noteproperty "Name" -value $vm.name -PassThru | 
       Add-Member Noteproperty "Owner" -value (@($owner.principal) -join ',') -PassThru | 
       Add-Member Noteproperty "Members" -value (@($members.SamAccountName) -join ',') -PassThru 
       $AllVMs+=$temp 
      } 
    } 

$AllVMs 
0

Изменение $owners.principal к $owner.principal после $members = Get-ADGroupMember? Если у вас есть вложенные группы AD, Get-ADGroupMember имеет параметр -Recursive.

+0

Сравнение двух, похоже, это было одним из изменений, которые мне нужно было сделать - спасибо! –

Смежные вопросы