Распечатать в лог-файле номер строки

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

$someVar = "line $($MyInvocation.ScriptLineNumber): at least 2 arguments needed, function has been called with only $args.Count arguments"

Иногда он возвращает правильный номер, а иногда нет. Это правильный путь? Есть ли другой метод?

РЕДАКТИРОВАТЬ: я обнаружил, что эта проблема может быть связана с нетрадиционным способом выполнения сценариев, которые я использую, чтобы обойти проблему с правами доступа на определенной машине. Я опубликую более подробный пример, как только смогу


person Naigel    schedule 15.02.2013    source источник
comment
Можете ли вы дать больше контекста? Насколько я знаю, это должно работать, и я не могу воспроизвести ситуацию, в которой это не работает...   -  person Poorkenny    schedule 15.02.2013


Ответы (2)


Есть ли причина, по которой вы не используете param в своих функциях и не делаете их обязательными?

Function A()
{
   Param
   (
      [Parameter(Mandatory=$true)][String]$Arg1,
      [Parameter(Mandatory=$true)][String]$Arg2
   )
   Write-Host "$Arg1 $Arg2"
}

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

person Musaab Al-Okaidi    schedule 15.02.2013
comment
это всего лишь глупый пример, пожалуйста, сосредоточьтесь только на выводе правильного номера строки - person Naigel; 15.02.2013
comment
Возникающая ошибка powershell будет включать номер строки, но если вам нужно, чтобы он был в определенном формате, описанном выше, тогда это другое. - person Musaab Al-Okaidi; 15.02.2013

попробуйте обернуть в $(). Например:

$someVar = "line $($MyInvocation.ScriptLineNumber): at least 2 arguments needed, function has been called with only $($args.Count) arguments"
person jbockle    schedule 15.02.2013