【问题标题】:Outputing $_ hashtable variables in a write-warning using a ForEach-Object使用 ForEach-Object 在写警告中输出 $_ 哈希表变量
【发布时间】:2013-07-05 14:13:13
【问题描述】:

所以我正在尝试从这里使用这个 powershell 负载:Getting the current hash key in a ForEach-Object loop in powershell

$myHash.keys | ForEach-Object {
    Write-Host $_["Entry 1"]
}

一切正常,但我想将该值作为另一个字符串的一部分输出,即:

$results.notvalid | ForEach-Object {
    write-warning 'Incorrect status code returned from $_["url"], 
                                                   code: $_["statuscode"]'
}

所以我想要输出是:

从 www.xxxx.com 返回的状态码不正确,代码:404

但是我却得到了

Incorrect status code returned from $_["url"], code: $_["statuscode"]

我错过了什么?


顺便说一句,如果我这样做的话,这行得通

$results.notvalid | ForEach-Object {
        write-warning $_["url"]
    }

然后我得到

www.xxxx.com

【问题讨论】:

    标签: powershell string-interpolation


    【解决方案1】:

    我更喜欢使用格式字符串而不是嵌入式表达式(即$())。我觉得它更具可读性。此外,PowerShell 在哈希表上为每个键创建属性,因此您可以使用$_.url 代替索引(即$_['url'])。

    $results.notvalid |
        ForEach-Object { 'Incorrect status code returned from {0}, code: {1}' 
                        -f $_.url,$_.statuscode } |
        Write-Warning
    

    【讨论】:

      【解决方案2】:

      如果要读取变量,则必须将字符串放在双引号而不是单引号中。另外,在这个地方你不是直接访问一个变量值,所以你应该使用$()来确保代码被提前评估。

      $results.notvalid | ForEach-Object {
          write-warning "Incorrect status code returned from $($_['url']), code: $($_['statuscode'])"
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-09
        • 2013-07-25
        • 1970-01-01
        • 2018-06-27
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2015-03-26
        • 1970-01-01
        相关资源
        最近更新 更多