Перенаправить ошибку в файл

Я пишу сценарий PowerShell, и одна из его частей должна добавить нового пользователя в Active Directory. Я использую командлет New-ADUser и хочу перенаправлять любые ошибки (если они возникнут) в файл. Так что я пишу

New-ADUser -smth -smth 2>> ./log.txt

Но он создает только пустой файл log.txt, когда я имитирую ошибку. Что я сделал не так?


person Vasiliy Plotnikov    schedule 08.12.2015    source источник
comment
Какую версию powershell вы используете?   -  person Mathias R. Jessen    schedule 08.12.2015
comment
Я использую 4.0. ОС — Windows Server 2012 R2.   -  person Vasiliy Plotnikov    schedule 08.12.2015
comment
Ааа, это потому что ошибку выдает анализатор, а не New-ADUser. Измените свой оператор на допустимый синтаксис, и он будет работать (например, New-ADUser -Identity "nonexistingusername")   -  person Mathias R. Jessen    schedule 08.12.2015
comment
Извините, может я неправильно объяснил. Я, например, делаю New-ADUser -Identity "j" . Я получил сообщение об ошибке ` New-ADUser : невозможно найти параметр, соответствующий имени параметра 'Identity'..... `, и я хочу записать это сообщение в log.txt. Я делаю `New-ADUser -Identity j 2››path\to\log.txt`. Он создает файл, но он пустой   -  person Vasiliy Plotnikov    schedule 08.12.2015
comment
Извините, параметр Identity был плохим примером (у New-ADUser его нет). Моя точка зрения заключалась в том, что перенаправитель вывода получает только поток ошибок из самого командлета, а не любые ошибки, выдаваемые средой (например, синтаксические ошибки). Вы можете заключить вызов в блок сценария, если хотите также зафиксировать ошибки синтаксического анализа: &{New-ADUser -smt} 2>> error.log   -  person Mathias R. Jessen    schedule 08.12.2015
comment
Я понял. Большое спасибо за вашу помощь. Хорошего дня =)   -  person Vasiliy Plotnikov    schedule 08.12.2015


Ответы (1)


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

New-Item -Type File C:\Windows\WinSxS\foo.txt 2>> error.log

Ошибки, вызванные средой (например, ошибки синтаксического анализатора), могут быть перенаправлены только в том случае, если вы запускаете командлет во вложенном контексте, например. блок сценария:

& { New-Item -Foo } 2>> error.log
person Community    schedule 09.12.2015