2014-09-04 183 views
0

這工作得很好,以創建在管道的多個文件夾:功能創建文件夾

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 

當我檢查:

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\$_" 
     } 
    } 
} 

當我管多個文件夾名稱,以它這一個不工作在調試模式下,我可以看到$Name只接收到Permissions.Folder中可用的最後一個文件夾名稱。我真的不明白爲什麼它沒有管道的一切..可能我在這裏錯過了一些明顯的東西。

回答

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 

對不起球員,是我不好。