2013-01-02 87 views
3

的陣列我在下面PowerShell中定義一個哈希表:如何枚舉哈希在powerhshell其中的值是字符串

$jobs = @{ 
    "Test1"=[Array](
     [Array]("\\server1\file1.txt", "\\server2\file1.txt") 

    ); 
    "Test2"=[Array](
     [Array]("\\sever1\file2.txt", "\\server2\file2.txt"), 
     [Array]("\\server1\file3.txt", "\\server2\file3.txt") 
    ); 
} 

我試圖枚舉該集合,並呼籲每一對的功能。 Test1有1個文件比較,Test2有兩個文件比較。

$jobs.GetEnumerator() | Sort-Object Key | foreach { 
    LogWrite($_.Key + ": comparing files") 

    $_.value | foreach { 
     LogWrite("Comparing files '" + $_[0] + "' and '" + $_[1] + "'") 
     #$r = CompareFiles($_[0], $_[1]) 
     #LogWrite("Result : " + $r) 
    } 

    LogWrite($_.Key + ": comparison successful") 
    LogWrite("") 
} 

我得到的輸出是:

Test1: comparing files 
Comparing files '\' and '\' 
Comparing files '\' and '\' 
Test1: comparison successful 

Test2: comparing files 
Comparing files '\\server1\file2.txt' and '\\server2\file2.txt' 
Comparing files '\\server1\file3.txt' and '\\server2\file3.txt' 
Test2: comparison successful 

Powershell的(東西)似乎是創造平等大小的數組。任何人都可以提出更好的數據結構或解決方案?

+0

FWIW,Powershell似乎實際上* flattening *第一個嵌套數組'Test1'。 –

+0

相關:http://stackoverflow.com/questions/2463190/avoiding-agnostic-jagged-array-flattening-in-powershell –

回答

3

引用Avoiding Agnostic Jagged Array Flattening in Powershell,如果你的單元素數組中添加一個逗號它會出現,它會被壓扁停止:

$jobs = @{ 
    "Test1"=[Array](, 
     [Array]("\\server1\file1.txt", "\\server2\file1.txt") 

    ); 
    "Test2"=[Array](
     [Array]("\\sever1\file2.txt", "\\server2\file2.txt"), 
     [Array]("\\server1\file3.txt", "\\server2\file3.txt") 
    ); 
} 

一定有什麼古怪的方式陣列在PowerShell中處理。