2015-04-22 5 views
0

У меня есть запрос на резервирование массового IPaddress, но не удается найти способ записи вывода в файл txt или csv. Я попытался использовать командлеты export-csv и out-file, но это не сработает.Как написать вывод запроса powershell на txt или файл csv?

Foreach ($line in (Import-Csv -header Scope,IP,MAC,Hostname -Path C:\temp\NewDHCP.csv)) 
{ 
    Add-DhcpServerv4Reservation -ComputerName dhcp server-ScopeId $line.scope -IPAddress $line.IP -ClientId $line.MAC -HostName $line.hostname -Description "Reservation for Printer"| outfile c:\temp\result.txt 
} 

Файл Result.txt пуст.

Хотелось бы видеть, что результат был выполнен успешно выполнен или произошла ошибка.

Благодаря Сэм

+0

Возможно, стоит отметить, что вы можете изменить 'outfile' на' add-content', и этот скрипт должен работать так, чтобы видеть успешные записи. Имейте в виду, что то, что возвращается 'Add-DhcpServerv4Reservation', является объектом с рядом свойств, а не только строкой, поэтому по умолчанию это может не выводиться очень хорошо, тем более, что это просто оболочка WMI. См. [TechNet] (https://technet.microsoft.com/en-us/library/jj590686.aspx), в частности раздел «Выход». Если вы хотите, чтобы в вашем файле были ошибки, добавьте '2> & 1' непосредственно перед вашей трубкой. – TheMadTechnician

ответ

1

Перемещайте Out-File вне Foreach скобках:

Foreach($line in $stuff) {Do-Stuff $line} | Out-File c:\temp\result.txt 

Если оставить Out-File внутри цикла foreach, по умолчанию будет перезаписывать файл каждой итерации.

Кроме того, убедитесь, что скрипт делает в факт возврата данных на консоль, если вы удалите Out-File

Редактировать

Майк прав, то предыдущая команда не будет труба из. Я обычно Foreach, как это, который делает работу:

$stuff | %{Do-Stuff $_} | Out-File c:\temp\result.txt 
+0

То, что вы используете, является сокращенным для 'ForEach-Object' и фактически функционирует иначе, чем цикл forEach. Кроме того, в то время как вы не можете подключиться из цикла ForEach, вы можете назначить вывод переменной, а затем передать это. – TheMadTechnician

+0

Никогда не понимал, что есть разница. Благодаря! –

0

@ Джон близко, но вы не можете конвейер цикла Еогеаспа подобные.

Вы можете заключить его в $(). Это отвратительно смотреть, но это работает.

$(Foreach ($line in (Import-Csv -header Scope,IP,MAC,Hostname -Path C:\temp\NewDHCP.csv)) 
{ 
    Add-DhcpServerv4Reservation -ComputerName dhcp server-ScopeId $line.scope -IPAddress $line.IP -ClientId $line.MAC -HostName $line.hostname -Description "Reservation for Printer" 
}) | out-file c:\temp\result.txt 
+0

«Вы не можете пропустить петлю foreach».Конечно, вы можете, я делаю это все время. –

+0

Nvm, похоже, что он не работает с 'Foreach'. Я всегда использую '% {}', и он отлично работает с этим. Странный –

1

В основном просто FYI, но то, что вы должны работали, но там может быть две точки стоит отметить:

  1. Я надеюсь, что его просто опечатка, но в этом вопросе у вас есть OutFile, которые должны быть просто Out-File
  2. Перемещение регистрации вне цикла является хорошей идеей, но для того, как у вас есть это, просто добавление переключателя -Append, возможно, принесло вам результаты, которые вы ищете. Также -Encoding ASCII в зависимости от вашего выхода.

Я не знаком с командлетом Add-DhcpServerv4Reservation, но все это будет работать до тех пор, пока результаты будут отправлены на стандартный вывод.

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