Назад | Перейти на главную страницу

Ошибка Powershell при добавлении пути к файлу

Скрипт выглядит так:

$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 вызов, возможно, не удалось определить имя машины.