使用ForEach-Object在写警告中输出$ _ hashtable变量

时间:2013-07-05 14:13:14

标签: powershell string-interpolation

所以我试图从这里使用这个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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果要读取变量,则必须将字符串放在双引号而不是单引号中。此外,在这个位置,您不是直接访问变量值,因此您应该使用$()来确保提前评估代码。

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