# encoding: ascii
# api: powershell
# title: RichCopyMyProfile.ps1
# description: Sample of calling RichCopy.exe for massively parallel file copy. Great when copying many small files over long distance, to overlap latency delays. Same as Windows 7 ‘robocopy.exe /MT:64’ but works on Windows XP and Server 2003.
# version: 0.1
# type: script
# license: CC0
# x-poshcode-id: 2468
# x-archived: 2011-01-22T09:35:06
#
#
param(
[Parameter(position=0)]$SrcFolder = '\\YourWorkstation\PathHere',
[switch]$NoBackupDestinationProfile
)
Write-Host "START [$($MyInvocation.MyCommand.Name)] $(get-date -f yyyyMMdd.HHmmss)"
$global:dirPSProfile = (Split-Path -Parent $profile)
filter DirHelper(
[Parameter(Position=0)]$Path,
[Parameter(Position=1)][Scriptblock]$DirExistsScriptBlock
) {
[bool]$backupProfile = !(Test-Path -PathType Container $Path)
if (!(Test-Path -PathType Container $Path)) {
md $Path -Verbose
}
else {
if ($DirExistsScriptBlock -ne $null) {
& $DirExistsScriptBlock
}
}
cd $Path
}
DirHelper $dirPSProfile { $back = Join-Path (Split-Path $Path -Parent) '_GetCTBackup'
Write-Warning "Found profile directory. Attempting backup before continuing. [$back]"
Write-Host ('xcopy /iy "{0}" "{1}"' -f $path,$back)
xcopy /iy "$Path" "$back"
}
if (Get-Command robocopy.exe -ErrorAction SilentlyContinue) {
robocopy $SrcFolder $dirPSProfile /S
} else {
$proc = &{ if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") { "64" } else { "" } }
xcopy /d/y/i "$SrcFolder\bin\RichCopy*" "$dirPSProfile\bin"
$cmd = '"{0}\bin\RichCopy{1}.exe"'-f $dirPSProfile,$proc
$cmdArgs = ( $SrcFolder,'"{0}"','/TD','64','/TS','32','/SC','64','/FEF','_Scratch.ps1;*.7z' | %{ $_ -f $dirPSProfile })
echo 'running command: {0} {1}' -f $cmd,($cmdArgs -join ' ')
Start-Process -Wait $cmd $cmdArgs
}
Write-Host "END [$($MyInvocation.MyCommand.Name)] $(get-date -f yyyyMMdd.HHmmss)"