2016-12-25 14 views
1

Powershellとスクリプティングには本当に新しく、誰でも手伝っていただければ本当に感謝しています。最終日に修正されたファイルを圧縮/圧縮する

設定した数のディレクトリで毎日変更をバックアップするPowerShellスクリプトを作成しようとしています。

  • 再帰的にのみ、最後の24時間のために複数のプリセットの場所からの新しい/変更されたファイルまたはディレクトリを見つけます。

  • 圧縮zipファイル

  • のすべての結果のエントリ

フォルダ構造を維持しながら、私は最初のビットは、次のスクリプトを使用して作業を取得見つけるために管理している:

Get-ChildItem $SRC | Where {$_.PsIsContainer} | foreach-object { 
    Get-ChildItem $_ -Recurse -ErrorAction SilentlyContinue | 
    Where {$_.LastWriteTime -gt (get-date).AddDays(-1).date} | 
    Select FullName, LastWriteTime, Mode | Sort LastWriteTime, Mode 
} >> C:\temp\LastModified-$TimeStamp.log 

私は特定のディレクトリを圧縮する別のスクリプトを持っていますが、上記のスクリプトの結果を使用して、ファイルを私がZipできる場所にrobocopyするか、tここでは、各ファイルのフォルダ構造を失うことなく、まずファイルをどこかにコピーすることなくzipファイルを作成する方法があります。

私は次のスクリプトを使用して、特定のディレクトリを圧縮することができます(ただし、私はファイルをどこかでrobocopyしない限り、複数のディレクトリを1つのzipファイルに圧縮します)& robocopyを24時間)

以下のスクリプトを実行すると、パス引数がnullであるというエラーメッセージが表示されます。

$F1 = 'C:\Users\Downloads\Folder A' 
$F2 = 'C:\Users\Downloads\Folder B' 
$F3 = 'C:\Users\Downloads\Folder C' 
$SrcFolders = ($F1, $F2, $F3); 
$BackupDrive = "D:\OneDrive" 
$DestFolders = ("$BackupDrive\Folder A", "$BackupDrive\Folder B", "$BackupDrive\Folder C"); 
$Destination = 'C:\Users\SysAdmin\Downloads\PLSWork\' 
$TimeStamp = Get-Date -f yyyyMMdd_HHmmss 
$ZipName = "$Destination\$TimeStamp" + '_Backup.zip ' 
$Option = "{$_.PsIsContainer} | foreach-object { Get-ChildItem $_ -Recurse -ErrorAction SilentlyContinue | Where {$_.LastWriteTime -gt (get-date).AddDays(-1).date} | Select FullName, LastWriteTime, Mode | Sort LastWriteTime, Mode}" 


Foreach ($SrcFolders in (Get-ChildItem $SrcFolders | where $Option)){ 


Add-Type -Assembly "System.IO.Compression.FileSystem" ; 
[System.IO.Compression.ZipFile]::CreateFromDirectory($SrcFolders, $ZipName) 
} 

答えて

1

はあなたのライン

$ZipName = "$Destination\$TimeStamp" + '_Backup.zip ' 

$ZipName = "$Destination$TimeStamp" + '_Backup.zip ' 
+0

「パス引数がnullであると不平を言ってエラーメッセージが表示される」 – 4c74356b41

+0

エラーをポストできますか? PowerShellがどこでNull例外を投げているのかを理解する必要があります。 –

0

と変更どのようにこのようなものでしょうか?

$RootPath = "P:\PSZip\" 
$Folders = (
    "Folder A", 
    "Folder B", 
    "Folder C" 
) 
$BackupFolder = "P:\PSZip\Destination\" 
$Files = @() 

foreach($Folder in $Folders) { 
    $Files = Get-ChildItem ("{0}{1}\" -f $RootPath, $Folder) | Where {$_.PSIsContainer} | ForEach-Object { Get-ChildItem $_.FullName -Recurse | Where { $_.LastWriteTime -gt (Get-Date).AddDays(-1) } } 
    $ZipName = ("{0}{1}\{2}_Backup.zip" -f $BackupFolder, $Folder, (Get-Date -f yyyyMMdd_HHmmss)) 
    Compress-Archive -Path $Files.FullName -DestinationPath $ZipName 
} 
関連する問題