Скрипт выглядит так:
$searchOU='ou=Servers,dc=mydomain,dc=NET'
Get-ADComputer -filter * -SearchBase $searchOU |
Foreach-Object {
$server = $_.Name
([ADSI]"WinNT://$($_.Name)/Administrators").psbase.invoke('Members') |
ForEach-Object {
$user = $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
New-Object 'PSObject' -property @{'Server'=$server; 'Admin'=$user} | Format-Table -AutoSize Server, Name | Out-File C:\Scripts\servers.txt
}
}
Если я удалю эту часть после New-Object
...
| Format-Table -AutoSize Server, Name | Out-File C:\Scripts\servers.txt
... сценарий работает отлично. При добавлении вышеупомянутой строки я получаю эту ошибку для всех серверов / участников, которые он находит:
Исключение, вызывающее «Invoke» с аргументом (ами) «2»: «Сетевой путь не найден». В C: \ scripts \ myscript.ps1: 5 char: 62 + ([ADSI] «WinNT: // $ ($ _.Name) / Administrators "). Psbase.invoke <<<< ('Members') | + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException
Одно исправление: формат и выход должны соответствовать конвейеру внешнего Foreach-Object
:
$searchOU='ou=Servers,dc=mydomain,dc=NET'
Get-ADComputer -filter * -SearchBase $searchOU |
Foreach-Object {
$server = $_.Name
([ADSI]"WinNT://$($_.Name)/Administrators").psbase.invoke('Members') |
ForEach-Object {
$user = $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
New-Object 'PSObject' -property @{'Server'=$server; 'Admin'=$user}
}
} | Format-Table -AutoSize Server, Name | Out-File C:\Scripts\servers.txt
Во-вторых: ошибка исходит от ADSI Invoke
вызов, возможно, не удалось определить имя машины.