我正在编写自己的备份脚本,以从计算机中备份部分(但不是全部)目录。目前,目录列表已在我的(powershell)脚本文件中进行了编程,但是最好的方法是使用外部文件列表。
这是我到目前为止所拥有的。
Clear-Host
$host.ui.RawUI.WindowTitle = "Backup script"
# get drive name
$driveName="smrbackup"
if ($backupDrive=(Get-PSDrive | Where-Object {$_.Description -eq $driveName}).root) {
write-host "found drive"
}
else {
write-error "no backup drive"
exit 1
}
$destFolder="robackup"
$dest=Join-Path -Path $backupDrive -ChildPath $destFolder
Write-host "backup destination is $dest"
# robocopy parameters
# /MIR Spiegelt eine Verzeichnisstruktur und löscht Dateien, die in der Quelle gelöscht wurden
# /V verbose output
# /DCOPY:T kopiert Verzeichnistimestamp
$parameters = @("/MIR", "/NP", "/R:3", "/W:2", "/FFT", "/MT:16")
$shutdown= Read-Host "`r`nshutdown after backup? (j/n/q = quit)"
if ($shutdown -eq "j") {
"Der Computer wird nach dem Backup heruntergefahren!"
}
elseif ($shutdown -eq "q"){
exit 0
}
cd c:\
# Liste aller zu kopierenden Verzeichnisse
"users\Stefan M\Documents",
"users\Stefan M\Desktop",
"users\Stefan M\Downloads",
"users\Stefan M\Music",
"users\Stefan M\VirtualBox VMs",
"MESS" | % { robocopy $_ ($dest + "/" + $_) $parameters }
一些问题:
对于2,我可以使用for循环构建某些内容,但是如何查看总复制结果?有没有比收集退出代码更优雅的方法?
干杯,斯蒂芬
编辑:我发现这一行使用文件列表。所以剩下的问题是在所有robocopy运行之后如何获得总摘要?
cd c:\
gc "c:\Users\Stefan Mayrhofer\Documents\script\backup-src.txt" | % { robocopy $_ ($dest + "/" + $_) $parameters }
答案 0 :(得分:1)
您的最后一行创建一个数组并执行robocopy foreach
行(%
是foreach
的别名)。 $_
是当前正在处理的商品的占位符。
要使用存储数据的文件获得相同的结果,请创建一个.txt文件(如果需要,也可以创建.csv),每行一个路径。现在,使用get-content
以数组的形式获取该文件的内容,并将其存储在变量中或直接在管道中使用:
Get-Content -Path $YourFilePath | foreach { robocopy $_ ($dest + "/" + $_) $parameters }
如果要收集robocopy的结果,只需将它们存储在变量中:
$Output = Get-Content -Path $YourFilePath | foreach { robocopy $_ ($dest + "/" + $_) $parameters }