2015-03-21 6 views
0

У меня есть требование сообщить о локальных группах и членах из определенного списка серверов. У меня есть следующий скрипт, который я собрал из других скриптов. При запуске скрипта он записывает имя сервера, на который он запрашивает, и имена локальной группы сервера и члены этих групп. Я хотел бы вывести текст в файл, но где бы я ни добавлял | Команда Out-File Я получаю сообщение об ошибке «Пустой элемент pipe не разрешен». Моя второстепенная проблема с этим скриптом заключается в том, будет ли метод, который я выбрал, сервер, который запрашивает сервер, при выводе в файл. Помогите, пожалуйста, исправить ошибки скрипта newbies, пожалуйста?Локальные группы и участники

$server=Get-Content "C:\Powershell\Local Groups\Test.txt" 
    Foreach ($server in $server) 
    { 

    $computer = [ADSI]"WinNT://$server,computer" 
    " 
    " 
    write-host "===========================" 
    write-host "Server: $server" 
    write-host "===========================" 
    " 
    " 
    $computer.psbase.children | where { $_.psbase.schemaClassName -eq  'group' } | foreach { 
    write-host $_.name 
    write-host "------" 
    $group =[ADSI]$_.psbase.Path 
    $group.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} 
    write-host ** 
    write-host 

    } 
    } 

Спасибо, Kevin

ответ

0

Вы говорите, что вы используете Out-File и получать эту ошибку. Вы не показываете_where_ в своем коде, из которого вызывается.

Учитывая код у вас есть моя догадка, что вы пытаетесь что-то вроде этого

Foreach ($server in $server){ 
    # All the code in this block 
} | Out-File c:\pathto.txt 

Я желаю я имел техническую ссылку на эту интерпретацию, но, увы, я не нашел (думаю, что это сделать с более старыми версиями PowerShell). По моему опыту нет стандартного вывода, переданного из этой конструкции. В стороне ($server in $server) вводит в заблуждение, даже если он работает. Могу я предложить это небольшое изменение, дайте мне знать, если это сработает.

$servers=Get-Content "C:\Powershell\Local Groups\Test.txt" 
$servers | ForEach-Object{ 
    $server = $_ 
    # Rest of code inside block stays the same 
} | Out-File c:\pathto.txt 

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

# Declare empty array to hold results 
$results = @() 
Foreach ($server in $server){ 
    # Code before this line 
    $results += $group.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} 
    # Code after this line 
} 
$results | Set-Content c:\pathto.txt 

Достойное Примечание

Вы смешиваете выход консоли со стандартным выходом. в зависимости от того, что вы хотите сделать со сценарием, вы не получите тот же результат, которого вы ожидаете. Если вы хотите, чтобы строки, такие как write-host "Server: $server", были в выходном файле, вам необходимо использовать Write-Output

+0

Благодарим за помощь. Я использовал ваше первое предложение, и он отлично работал! Я очень ценю вашу помощь в этом. Спасибо, – KSpinnato

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