2013-02-15 4 views
0

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

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

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

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

+0

Можете ли вы дать больше контекста? Насколько я знаю, это должно сработать, и я не могу воспроизвести ситуацию, когда это не так ... – Poorkenny

ответ

1

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

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

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

+0

Это всего лишь глупый пример, пожалуйста, сосредоточьтесь только на том, чтобы напечатать правильный номер строки – Naigel

+0

Ошибка в командной строке, которая будет выбрана введите номер строки, но если вам нужно, чтобы он был в определенном формате, описанном выше, это не так. –

1

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

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

вы правы, но я просто писал строку на лету – Naigel