tooling/ActionTypes/CopyFiles.xscript.ps1
#:xheader: #Type=ActionType; #:xheader: @{ Clean = { Param([ConfigAutomationContext] $context,[UIAction] $action) return $true }; Action = { Param([ConfigAutomationContext] $context,[UIAction] $action) $extracted = $action.Parameters().Extract(@("SourceFolder", "Contents", "TargetFolder", "FlattenFolders")) $SourceFolder = $extracted.SourceFolder $TargetFolder = $extracted.TargetFolder $Contents = $extracted.Contents $FlattenFolders = $extracted.FlattenFolders $Contents = $Contents -split "`n" | Foreach {$_.Trim()} $include = @($Contents | Where {$_[0] -ne "!"} | Foreach {"'$_'"}) -join " " $excludeDir = @($Contents | Where {$_ -match "^\!(.*[\/\\])\*$"} | Foreach {$_ -replace "^\!(.*[\/\\])\*$",'''$1'''}) -join " " $excludeFiles = @($Contents | Where {$_[0] -eq "!" -and (-not ($_ -match "^\!.*[\/\\]\*$"))} | Foreach {$_ -replace "^\!(.*)$)",'''$1'''}) -join " " $robocopy = "robocopy '$($SourceFolder)' '$($TargetFolder)' $include /xf $excludeFiles /xd $excludeDir /s" $context.Display($robocopy) Invoke-Expression $robocopy if($FlattenFolders -ieq "true" -or $FlattenFolders -eq $true){ $context.Display("Flattening Folders") Get-ChildItem -Path $TargetFolder -Recurse -Filter "*.*" | Where-Object {[System.IO.File]::Exists($_.FullName)} | Move-Item -Destination "$($TargetFolder)/$($_.Name)" $directories = [System.IO.Directory]::GetDirectories($TargetFolder) foreach($directory in $directories){ $context.Display("Removing Directory $($directory)") [System.IO.Directory]::Delete($directory, $true) } } return $true }; CanExecute = { Param([ConfigAutomationContext] $context,[UIAction] $action) return $true }; Validate = { Param([ConfigAutomationContext] $context,[UIAction] $action) if(-not $action.Parameters().Validate(@("SourceFolder", "Contents", "TargetFolder"))){ return $false } if($action.TestProperty("DontSkipInValidation", "true", $true)){ $extracted = $action.Parameters().Extract(@("SourceFolder", "Contents", "TargetFolder", "FlattenFolders")) $SourceFolder = $extracted.SourceFolder $TargetFolder = $extracted.TargetFolder $Contents = $extracted.Contents $FlattenFolders = $extracted.FlattenFolders $Contents = $Contents -split "`n" | Foreach {$_.Trim()} $include = @($Contents | Where {$_[0] -ne "!"} | Foreach {"'$_'"}) -join " " $excludeDir = @($Contents | Where {$_ -match "^\!(.*[\/\\])\*$"} | Foreach {$_ -replace "^\!(.*[\/\\])\*$",'''$1'''}) -join " " $excludeFiles = @($Contents | Where {$_[0] -eq "!" -and (-not ($_ -match "^\!.*[\/\\]\*$"))} | Foreach {$_ -replace "^\!(.*)$)",'''$1'''}) -join " " $robocopy = "robocopy '$($SourceFolder)' '$($TargetFolder)' $include /xf $excludeFiles /xd $excludeDir /s" $context.Display($robocopy) Invoke-Expression $robocopy if($FlattenFolders -ieq "true" -or $FlattenFolders -eq $true){ $context.Display("Flattening Folders") Get-ChildItem -Path $TargetFolder -Recurse -Filter "*.*" | Where-Object {[System.IO.File]::Exists($_.FullName)} | Move-Item -Destination "$($TargetFolder)/$($_.Name)" $directories = [System.IO.Directory]::GetDirectories($TargetFolder) foreach($directory in $directories){ $context.Display("Removing Directory $($directory)") [System.IO.Directory]::Delete($directory, $true) } } return $true } else{ $extracted = $action.Parameters().Extract(@("SourceFolder", "Contents", "TargetFolder")) if(-not (Test-Path $($extracted.SourceFolder))){ $context.Error("SourceFolder '{white}$($extracted.SourceFolder){gray}' does not exists") return $false } return $true } }; } |