TL;博士:
優選地,直接傳遞路徑陣列到(暗示)-Path
參數:
$arr = 'c:\one', 'c:\two'
# Positional use of $arr implies -Path
New-Item $arr -ItemType Directory
可替換地,經由管路和腳本塊參數值:
$arr = 'c:\one', 'c:\two'
$arr | New-Item -Path { $_ } -ItemType Directory
隨着目錄名和他們共享父路徑指定分別:
$arr = 'one', 'two'
$arr | New-Item -Name { $_ } -ItemType Directory -Path C:\
如果不指定參數名稱,New-Item
結合第一位置參數-Path
參數。
因此,
new-item "c:\newdir" -itemtype directory
是一樣的:
new-item -Path "c:\newdir" -itemtype directory
New-Item -?
會告訴你,-Path
接受一個字符串數組:
New-Item [-Path] <String[]> ...
因此,你不甚至不需要管道d可以只通過您的的路徑數組直接:
New-Item 'c:\one', 'c:\two' -ItemType Directory
幾個New-Item
的參數接受管道輸入,以及通過值(輸入對象接受輸入唯一的一個原樣)是-Value
,這不是 幫助這裏。
剩餘的管道綁定參數需要通過屬性名稱匹配參數名稱來綁定。
要確定哪些參數接受管道輸入,請運行Get-Help -full New-Item
並搜索字符串Accept pipeline input? True
的實例。此方法適用於所有cmdlet。
因此,爲了結合參數-Path
,輸入對象必須具有.Path
屬性:
$arr = [pscustomobject] @{ Path = 'c:\one' }, [pscustomobject] @{ Path = 'c:\two' }
$arr | New-Item -ItemType Directory
然而,考慮到任何管道結合參數可以採取腳本塊如那些參數值對每一輸入對象評價,這可以簡化爲:
$arr = 'c:\one', 'c:\two'
$arr | New-Item -Path { $_ } -ItemType Directory
部門自動化c變量$_
反映了手頭的管線對象,在這種情況下,依次輸入字符串。
A-部分過時 - 這種方法的解釋可以發現here;目前,該方法僅使用 的參數設計爲原則上採用流水線輸入的參數。
在與-Name { $_ }
和-Path C:\
頂部的命令 - 從共享父路徑指定名稱分別 - 工程類似。
至於你試過:
-Name
接受目錄名只;只有-Path
接受路徑。
試圖輸入結合路徑到-Name
導致錯誤消息:
The given path's format is not supported.
因爲包含字符,如:
和\
不能是一個目錄/文件名的一部分輸入路徑。
請注意未來的讀者:'{$ _}'_looks_就像它應該是'$ {_}',但它是 - 並且是一個_script-block_參數,它可以有效地綁定每個通過的輸入對象流水線是指定的參數。 A - 部分過時 - 這種方法的解釋可以在這裏找到(https://blogs.msdn.microsoft.com/powershell/2006/06/23/flexible-pipelining-with-scriptblock-parameters/);目前,該方法僅適用於 ,其參數設計爲採用流水線輸入_in principle_。 – mklement0