2013-02-15 137 views
0

我想在我的函數中管理一些非標準錯誤(如錯誤的輸入文本),並且我想通過在變量中編寫一些日誌來跟蹤這些錯誤。我正在嘗試寫行號,這是我的代碼在日誌文件中打印行號

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

有時它會返回正確的數字,有時它不會。這是正確的方法嗎?有另一種方法嗎?

編輯:我發現這個問題可能與一個非傳統的方式來執行腳本,我用它來繞過特定的機器上的權限問題。我會盡快發佈一個更詳細的例子

+0

你能給更多的上下文嗎?據我所知,這應該工作,並且我不能再現它不... – Poorkenny 2013-02-15 13:24:05

回答

1

爲什麼你不在你的函數中使用param並且使它們成爲強制的?

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

如果不帶任何參數運行此函數,那麼就會拋出一個錯誤,要求爲強制性參數。

+0

這只是一個愚蠢的例子,請專注於打印正確的行號 – Naigel 2013-02-15 11:52:06

+0

拋出的PowerShell錯誤將包括一個行號,但如果你需要它在上面列出的特定格式,那麼這是不同的。 – 2013-02-15 11:57:00

1

嘗試打包在$()中。例如:

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

你是對的,但我只是在飛行中寫一行 – Naigel 2013-02-15 15:02:17