【问题标题】:PowerShell: Expanding Exception object properties in language filePowerShell:扩展语言文件中的异常对象属性
【发布时间】:2012-11-09 15:44:24
【问题描述】:

我正在编写一个脚本,其中包含许多需要输出到日志或屏幕的字符串。为了帮助简化维护,我创建了一个非常简单的 lang.xml 文件来存储字符串。许多字符串显示脚本中变量中保存的信息,因此我编写了一个小 cmdlet,它将扩展返回的 xml #text 节点中的字符串。

在我在 catch 块中使用它来格式化错误消息之前,这非常有效。例如,当我尝试展开异常消息时,会返回一个空字符串。即使我将 Exception 对象传递给 cmdlet,它也会扩展为空字符串。下面是 XML 和 cmdlet 的 sn-p,带有示例输出。

示例 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:

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我已经用 xml 示例测试了你的代码。

    它对我有用,在我删除 lang.xml 文件中的 &lt;/xml&gt; 结束标记后,这里给了我错误

    $global:LangXML = [xml] (Get-Content '.\lang.xml')

    这是我得到的:

    PS C:\ps> try { get-content goo -ErrorAction Stop} catch { Read-Lang -KeyWord 'ERRMessage'  -Exception $_ }
    Error message: Impossibile trovare il percorso 'C:\ps\goo' perché non esiste.
    PS C:\ps>
    

    p.s.:错误是意大利语,我在 it-it 文化系统上,但这是正确的错误。

    【讨论】:

    • 这真的很奇怪 - 整个 '' 只是一个错字,总是养成关闭标签的习惯。它现在对我有用,但我会将你的答案标记为答案,因为我需要你的好运。
    • 很高兴分享好运! :) 谢谢!
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多