簡體   English   中英

Powershell 中的 Count 屬性如何工作?

[英]How does the Count property work in Powershell?

我犯了一個最不幸的錯字,浪費了我一些寶貴的時間:

$errors.Count

從 PowerShell V3 開始,屬性 Count 和 Length 接受了與擴展類型數據(也稱為 ETS 或擴展類型系統)無關的非常特殊的處理。

如果實例具有 Count\/Length 屬性,那么一切都會像在 V1\/V2 中一樣繼續工作 - 返回來自實例的值。

如果實例沒有 Count\/Length 屬性,從 V3 開始,不是錯誤,您將返回 1。如果實例為 $null,您將返回 0。如果您已打開嚴格模式,你會得到一個類似 V2 的錯誤。

我承認這有點奇怪,但它解決了 cmdlet 返回 0、1 或多個對象時的常見問題。

通常,您將通過管道或使用 foreach 語句遍歷這些結果。 例如:

dir nosuchfile* | % { $_ }
foreach ($item in dir nosuchfile*) { $_ }

為了補充保羅的回答,這可能與擴展類型數據有關。 引用文檔的相關部分:

擴展類型數據定義 Windows PowerShell 中對象類型的其他屬性和方法(“成員”)。 您可以擴展 Windows PowerShell 支持的任何類型,並使用添加的屬性和方法,其方式與使用在對象類型上定義的屬性相同。

和:

Windows PowerShell 會話中有三個擴展類型數據源。 Windows PowerShell 安裝目錄中的 Types.ps1xml 文件會自動加載到每個 Windows PowerShell 會話中。

如果您打開該 Types.ps1xml 文件(在$pshome中),您將在文件的開頭看到:

   <Type>
        <Name>System.Array</Name>
        <Members>
            <AliasProperty>
                <Name>Count</Name>
                <ReferencedMemberName>Length</ReferencedMemberName>
            </AliasProperty>
        </Members>
    </Type>

所以我的猜測是,通過提供“ .Count ”屬性,PowerShell 假定這是一個數組。

這是我認為它的工作原理:

案例 1:在數組中 .Count 屬性實際上鏈接到.Count<\/code>屬性, .Length<\/code>屬性顯示數組中的項目數

案例 2:非存在變量由 powershell 自動創建並使用值$null<\/code>初始化

案例 3 \/ 4:在這一點上,我不確定為什么會發生這種情況,但由於 String、Int 或布爾對象都沒有.Count<\/code>屬性,我可以想象該屬性是由父對象繼承的。

該行為表明該變量被視為數組,因此分配了 1 個值的輸出將為 1,沒有值的結果將為 0。

編輯:為了完整起見,這里是文檔的鏈接: Technet<\/a> ,謝謝@David Brabant

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM