由於v5.1.14393.206的(Windows)中/ V6.0.0-alpha.15(核心):
PowerShell的意外確實不解開一個命令的單對象輸出與-OutVariable
即:即使命令只輸出一個對象,該對象意外存儲爲陣列(數組列表)將其名稱傳遞給通用參數-OutVariable
參數(或其別名,-ov
)的目標變量中。
另外,類型存儲在目標變量的值始終是[System.Collections.ArrayList]
,陣列列表,這是不一致與由定期分配,捕獲多對象輸出在一個變量,它結果爲System.Object[]
,a 常規 array。
我提交了一個問題here;截至記者發稿,它看起來像這樣將(在V6大概)固定,即使它是一個打破變化。
這裏的一個簡明測試演示該問題:
$null = Get-Date -OutVariable ov; $ov.GetType().FullName
如上面列出的版本,這個輸出:
System.Collections.ArrayList
即使輸出是(在概念上)僅一個單個[datetime]
([System.DateTime]
)實例。
將此與常規作業對比:$v = Get-Date; $v.GetType().FullName
產量System.DateTime
。
的解決方法是包裝在子表達式運算符($(...)
),它給你相同的輸出經由規則輸出(成功)流輸出變量參考:
- 展開單個元素集合(僅輸出元素本身)
- 多元素集合返回爲
System.Object[]
數組。
# Note the $(...) around $ov
> $null = Get-Date -OutVariable ov; $($ov).GetType().FullName
System.DateTime # 1-element System.Collections.ArrayList unwrapped
當然,你也可以使用$ov[0]
如果你只指望一個單一的輸出對象。
的演示,該解決方法是用多元件輸出太有效:
> $null = Get-ChildItem/-OutVariable ov; $($ov).GetType().FullName
System.Object[] # multi-element System.Collections.ArrayList converted to array