[Powershell]Inhalt kopieren mit Außnahmen

timo2607

Lieutenant
Registriert
Feb. 2011
Beiträge
725
Guten Morgen liebe Community,

ich habe glaube ich gerade einen Gedankenfehler. Ich habe vor, einen Ordner inkl. Inhalt von a nach b zu kopieren. Das ist kein Hexenwerk und funktioniert auch. Nun möchte ich aber diese Copy an bestimmte Vorraussetzungen knüpfen, als Beispiel:

PHP:
Ordnername: Test
Inhalt: test (ordner), test.txt, test.lnk, test.xls

Ich möchte nun alles kopieren außer die Datei test.link. Ich habe mit foreach gearbeitet, mit anschließenden Copy-Item. Es hat entweder garnicht funktioniert oder er hat wieder den gesamten Inhalt kopiert. Ich habe es ebenso via Pipe und Where-Object probiert, auch ohne Erfolg.

Könnt ihr mir bitte weiterhelfen? Ich weiß nicht wo mein Gedankenfehler ist...

Vielen Dank und viele Grüße
Timo
 
robocopy und XF ist der befehl... eine Alternative wäre im Powershell zuerst

das verzeichnix per

ls zu listen, dann über where-object einzuschränken und am ende RM über die Pipe zu schicken.

Sieht (grob)

so aus:

LS | where-object {$_.Name -ne 'test.link} | RM

ups.. natürlich ist nicht RM der befehl sondern copy-file

PS C:\test> ls | Where-Object {$_.Name -ne '2.txt'} | Copy-Item -Destination c:\test21\
 
Zuletzt bearbeitet:
Danke schonmal für die Hilfe,

kann ich Robocopy auch in GPP Scripten nutzen beim Userlogin?
 
sollte möglich sein..
 
pizza4ever schrieb:
PS C:\test> ls | Where-Object {$_.Name -ne '2.txt'} | Copy-Item -Destination c:\test21\

Ist es hier auch möglich weitere Außnahmen zu definieren? Oder geht immer nur eine?
 
Um wieivele Files gehts denn?

Eine Möglichkeit wäre:

ls | Where-Object {$_.Name -ne '2.txt'} | Where-Object {$_.Name -ne '3.txt'} | Copy-Item -Destination c:\test21\
 
pizza4ever schrieb:
Um wieivele Files gehts denn?

Eine Möglichkeit wäre:

ls | Where-Object {$_.Name -ne '2.txt'} | Where-Object {$_.Name -ne '3.txt'} | Copy-Item -Destination c:\test21\

Danke für die Hilfe, ich habe gerade mal Robocopy getestet... das ist wirklich super gut, dass werde ich nutzen :)
Aber ich weiß nun auch wie es mit Powershelle gehen würde, DANKE :)
 
Das Script habe ich letztens geschrieben um etwas änliches zu machen:

#Settings
$Host.UI.RawUI.WindowTitle = 'Robocopy migration script'
$datum = Get-Date -Format "MM-dd-yyyy-hh-mm-ss"
$options = @("/S", "/MT[:4]") # Robocopy arguments for mor see robocopy /?

#Path settings
$src = "C:\Test" # Source Path
$dest = "C:\Test2d" # Destination Path
$logpath = $dest+"" # Logfile Path
$logname = "Logfile_"+$datum+".log" # Logfile Name
$log = @($logpath+$logname)

#Exclusion
$excludeFilename = @("*Kopie*.*", "~$*.*", "*x0*", "*copy*.*") # Exclude file with given name
$excludeFolder = @("Archiv", "alt") # Exclude folder with given name

#Extension Filters
$word = @("*.docx", "*.docm", "*.doc") # Word extension that will be copied
$excel = @("*.xlsx", "*.xlsm", "*.xls") # Excel extension that will be copied
$powerpoint = @("*.pptx", "*.pptm", "*.ppt") # PowerPoint extension that will be copied
$visio = @("*.vsdx", "*.vsdm", "*.vsd") # Visio extension that will be copied
$pdf = @("*.pdf") # PDF extension that will be copied
#$tempeplates = @("*.dotx", "*dot", "*.xltx", "*xlt", "*.potx", "*pot") # Templates extension that coud be copied too

#Start
Write-Output `n "Start Robocopy Script in 5 Seconds"`n
Start-Sleep -s 5

#Check if source and destination path exist
If (-not (Test-Path $src)) {
Write-Output "The path '$src' does not exist. Script has stopped!"`n
break
}
If (-not (Test-Path $dest)) {
new-item -path $dest -type "directory" | Out-Null
Write-Output "The folder '$dest' has been created"`n
}

#Create Logfile
new-item -path $log -type "file" | Out-Null
Write-Output "The $logname has been created in $logpath"`n

#Create command
$cmdArgs = @($src, $dest, $word, $excel, $visio, $powerpoint, $pdf, $options)

#Run robocopy command
Write-Output "Copy files from '$src' to '$dest'"`n
robocopy @cmdArgs /XF $excludeFilename /XD $excludeFolder /LOG:$log | Out-Null

#Exit
Write-Output "Job complete"
Start-Sleep -s 15
$host.Exit

Alles in ein PowerShell File kopieren und die PowerShell Execution mit "set-executionpolicy remotesigned" deaktivieren (PowerShell muss als Admin gestartet sein damit die Execution Regel gesetzt werden kann.

Zb kannst du hier auch folgendes Eintragen, wenn du ganz bestimmte Files kopieren möchte (und sich der Name nicht ändert)
$tempeplates = @("test.txt")

Weitere möglichkeiten sind natürlich auch Auftrag_*.pdf oder Auftrag*.pdf, wenn du mit dem Wildcard * abreitest. Wenn du " /LOG:$log" entfernst werden keine Logs geschrieben.
 
Zuletzt bearbeitet:
timo2607 schrieb:
Danke für die Hilfe, ich habe gerade mal Robocopy getestet... das ist wirklich super gut, dass werde ich nutzen :)
Aber ich weiß nun auch wie es mit Powershelle gehen würde, DANKE :)

Bei robocopy unbedingt die parameter /w und /r setzen.. sonst kann das zu bösen Problemen führen...
 
pizza4ever schrieb:
Bei robocopy unbedingt die parameter /w und /r setzen.. sonst kann das zu bösen Problemen führen...

Danke für die Info, es geht darum das Robocopy bei nicht Erfolg des Kopiervorgangs, nicht 365 Tage das Kopieren wiederholt, richtig?

Das könnte in der Tat unangenehm werden, danke für den Tipp.

@Kenny

Danke dir ich werde es mal testen :)
 
Ja.. und falls du robocopy in powershell ausführen willst, geht das so:

& robocopy $source.Name.Trimend('\') $target.Dir.Trimend('\') '/mir' '/w:0' '/r:2' '/XF' $target.ExcludeFile '/XD' ($source.name + $target.ExcludeFolder)
 
Zurück
Oben