这可以很好地创建多个管道文件夹:
Function Add-Folders {
$Permissions.Folder | ForEach-Object {
if (Test-Path "$Path\$_" -PathType Container) {
Write-Verbose "-Exists: $Path\$_"
}
else {
New-Item "$Path\$_" -Type Directory > $null
Write-Verbose "-Created: $Path\$_"
}
}
}
当我向其管道多个文件夹名称时,这个不起作用:
Function Make-Folders {
[CmdletBinding(SupportsShouldProcess=$True)]
Param(
[parameter(Mandatory=$true,Position=0)]
[ValidateScript({Test-Path $_ -PathType Container})]
[ValidateNotNullOrEmpty()]
[String]$Path,
[parameter(Mandatory=$true,ValueFromPipeline=$true,Position=1)]
[ValidateNotNullOrEmpty()]
[String[]]$Name
)
$Name | ForEach-Object {
if (Test-Path "$Path\$_" -PathType Container) {
Write-Verbose "-Exists: $Path\$_"
}
else {
New-Item "$Path\$_" -Type Directory > $null
Write-Verbose "-Created: $Path\$_"
}
}
}
$Permissions.Folder | Make-Folders -Path c:\Root -Verbose
当我检查调试模式时,我可以看到$Name
仅接收Permissions.Folder
中可用的最后一个文件夹名称。我真的不明白为什么它没有把所有事情都弄清楚......可能我在这里错过了一些明显的东西。
答案 0 :(得分:1)
修正了我的愚蠢错误,我错过了Process
部分:
Function Make-Folders {
[CmdletBinding(SupportsShouldProcess=$True)]
Param(
[parameter(Mandatory=$true,Position=0)]
[ValidateScript({Test-Path $_ -PathType Container})]
[ValidateNotNullOrEmpty()]
[String]$Path,
[parameter(Mandatory=$true,ValueFromPipeline=$true,Position=1)]
[ValidateNotNullOrEmpty()]
[String[]]$Name
)
Process {
$Name | ForEach-Object {
if (Test-Path "$Path\$_" -PathType Container) {
Write-Verbose "-Exists: $Path\$_"
}
else {
New-Item "$Path\$_" -Type Directory > $null
Write-Verbose "-Created: $Path\$_"
}
}
}
}
$Permissions.Folder | Make-Folders -Path $Target -Verbose
对不起伙计们,我的坏人。