2011-03-22 55 views
3

我有一段時間有趣的問題。比方說,我有功能PowerShell如何下調函數的返回值?

function GetAllFiles($creds, $fld){ 
    $newFiles = New-Object "system.collections.generic.list[string]" 
    ... other stuff which adds entires 
    return $newFiles 
} 

,當我執行

$files = GetAllFiles $creds $fld 
$files.Remove("AnExistingEntry") 

我得到

DIR-ls.ps1主叫方:方法調用失敗,因爲[System.Object的[ ]]不包含名爲「刪除」的方法。

當我做 $ newFiles.GetType()

IsPublic IsSerial Name          BaseType     
-------- -------- ----          --------     
True  True  Object[]         System.Array 

我怎樣才能使之成爲 「system.collections.generic.list [字符串]」 回來了?

謝謝

回答

2

該對象類型沒有「remove」方法。我想你在看這個元素的成員:

$ files | gm會得到數組中第一個元素的成員(管道將展開數組,並且最終在第一個元素上執行gm

gm -inputobject $ files將顯示數組的成員,和對象類型的方法中「刪除」是沒有的。

試試這個對你的回報語句,看它是否保持陣列完整,而不是展開它的回報。

回報,$ newFiles

+0

這個想法是,我鬆了system.collections.generic.list [字符串]功能外 – ruslander 2011-03-22 16:17:12

+0

返回,$ newFiles – mjolinor 2011-03-22 17:28:02

+0

我仍然得到>>> dir-ls.ps1:方法調用失敗,因爲[System.Object []]不包含名爲 'Remove'的方法。 – ruslander 2011-03-22 17:43:53