1
我正在編寫一個腳本,其中包含大量需要輸出到日誌或屏幕的字符串。爲了簡化維護,我創建了一個非常簡單的lang.xml文件,用於存儲字符串。很多字符串顯示腳本中變量中保存的信息,所以我編寫了一個小cmdlet,它將在返回的xml #text節點中擴展字符串。PowerShell:擴展語言文件中的Exception對象屬性
這個工程非常好,直到我用catch塊來格式化錯誤信息。例如,當我嘗試展開Exception消息時,將返回一個空字符串。即使我將Exception對象傳遞給cmdlet,它也會展開爲空字符串。下面是XML和cmdlet的一部分,帶有示例輸出。
示例XML:
<?xml version="1.0" ?>
<lang>
<keyword name="ERRMessage">
<string>"Error message: $($Exception.Exception.Message)"</string>
</keyword>
</lang>
</xml>
的cmdlet:
function Read-Lang
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="The name atttribute of a keyword in lang.xml")]
[string[]] $Keyword,
$Exception
)
begin
{
if ($global:LangXML -eq $null)
{
Write-Debug "Language XML has not been loaded, loading now."
$global:LangXML = [xml] (Get-Content '.\lang.xml')
}
}
process
{
foreach ($name in $Keyword)
{
$Query = "/lang/keyword[@name=`"$name`"]/string"
$global:LangXML.SelectNodes($Query) |
ForEach-Object { $ExecutionContext.InvokeCommand.ExpandString($_."#text") }
}
}
}
實施例:
try { get-content goo -ErrorAction Stop} catch { Read-Lang -KeyWord 'ERRMessage' -Exception $_ }
預期輸出:
Error Message: Cannot find path 'path\to\goo' because it does not exist.
實際輸出:
Error Message:
這真的很奇怪 - 整個''只是一個錯字,總是養成關閉標籤的習慣。它現在正在爲我工作,儘管我會將你的標記作爲答案,因爲你的好運就是我所需要的。 –
很高興分享幸運! :) 謝謝! –