2013-07-05 42 views
1

所以我試圖使用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

我更喜歡在嵌入表達式上使用格式字符串(即$())。我覺得它更可讀。此外,PowerShell會爲每個密鑰在散列表上創建屬性,因此您可以使用$_.url來代替索引(即$_['url'])。

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

你必須把字符串用雙如果您想要讀取變量,請使用引號而不是單引號。另外,在這個地方你不能直接訪問變量值,所以你應該使用$()來確保代碼被預先評估。

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

嘗試編輯版本 – Naigel