Kecualikan ekstensi file tertentu dalam skrip cadangan PowerShell

0

Saya baru mengenal skrip PowerShell dan butuh bantuan dengan beberapa kode. Kode ini memiliki sebagian besar parameter yang saya cari dalam mencadangkan profil pengguna, tetapi saya perlu mengatur pengecualian untuk ekstensi file seperti .mp3 dan .exe.

Bagaimana saya bisa menyesuaikan skrip untuk melakukan itu?

$destination = "D:\CODs"

$folder = "Desktop",
"Downloads",
"Favorites",
"Documents",
"Music",
"Pictures",
"Videos",
"AppData\Local\Mozilla",
"AppData\Local\Google",
"AppData\Roaming\Mozilla"




###############################################################################################################

$username = gc env:username
$userprofile = gc env:userprofile
$appData = gc env:localAPPDATA


###### Restore data section ######
if ([IO.Directory]::Exists($destination + "\" + $username + "\")) 
{ 

    $caption = "Choose Action";
    $message = "A backup folder for $username already exists, would you like to restore the data to the local machine?";
    $Yes = new-Object System.Management.Automation.Host.ChoiceDescription "&Yes","Yes";
    $No = new-Object System.Management.Automation.Host.ChoiceDescription "&No","No";
    $choices = [System.Management.Automation.Host.ChoiceDescription[]]($Yes,$No);
    $answer = $host.ui.PromptForChoice($caption,$message,$choices,0)

    if ($answer -eq 0) 
    {

        write-host -ForegroundColor green "Restoring data to local machine for $username"
        foreach ($f in $folder)
        {   
            $currentLocalFolder = $userprofile + "\" + $f
            $currentRemoteFolder = $destination + "\" + $username + "\" + $f
            write-host -ForegroundColor cyan "  $f..."
            Copy-Item -ErrorAction silentlyContinue -recurse $currentRemoteFolder $userprofile

            if ($f -eq "AppData\Local\Mozilla") { rename-item $currentLocalFolder "$currentLocalFolder.old" }
            if ($f -eq "AppData\Roaming\Mozilla") { rename-item $currentLocalFolder "$currentLocalFolder.old" }
            if ($f -eq "AppData\Local\Google") { rename-item $currentLocalFolder "$currentLocalFolder.old" }

        }
        rename-item "$destination\$username" "$destination\$username.restored"
        write-host -ForegroundColor green "Restore Complete!"
    }

    else
    {
        write-host -ForegroundColor yellow "Aborting process"
        exit
    }
}

###### Backup Data section ########
else
{

    Write-Host -ForegroundColor green "Outlook is about to close, save any unsaved emails then press any key to continue ..."

    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

    Get-Process | Where { $_.Name -Eq "OUTLOOK" } | Kill

    write-host -ForegroundColor green "Backing up data from local machine for $username"


    foreach ($f in $folder)
    {   
        $currentLocalFolder = $userprofile + "\" + $f
        $currentRemoteFolder = $destination + "\" + $username + "\" + $f
        $currentFolderSize = (Get-ChildItem -ErrorAction silentlyContinue $currentLocalFolder -Recurse -Force | Measure-Object -ErrorAction silentlyContinue -Property Length -Sum ).Sum / 1MB
        $currentFolderSizeRounded = [System.Math]::Round($currentFolderSize)
        write-host -ForegroundColor cyan "  $f... ($currentFolderSizeRounded MB)"
        Copy-Item -ErrorAction silentlyContinue -recurse $currentLocalFolder $currentRemoteFolder
    }



    $oldStylePST = [IO.Directory]::GetFiles($appData + "\Microsoft\Outlook", "*.pst") 
    foreach($pst in $oldStylePST)   
    { 
        if ((test-path -path ($destination + "\" + $username + "\Documents\Outlook Files\oldstyle")) -eq 0){new-item -type directory -path ($destination + "\" + $username + "\Documents\Outlook Files\oldstyle") | out-null}
        write-host -ForegroundColor yellow "  $pst..."
        Copy-Item $pst ($destination + "\" + $username + "\Documents\Outlook Files\oldstyle")
    }    

    write-host -ForegroundColor green "Backup complete!"

} 
Andrew kasaija
sumber
Hai Ben, saya punya beberapa persyaratan yang saya butuhkan input Anda pada ... bagaimana saya bisa membuat skrip yang sama membuat kenaikan berdasarkan tanggal modifikasi terakhir dari semua file antara sumber dan tujuan, hapus file lama dari folder tujuan berdasarkan tanggal dari sumber setelah periode yang ditentukan. Terima kasih
Andrew kasaija
Itu menjadi sedikit lebih rumit. Anda dapat memeriksa dokumentasi untuk Remove-Item dan Rename-Item cmdlet. Perhatikan bahwa Anda mungkin harus menggunakan Get-ChildItem -Recurse dan buat sendiri keputusan penyalinan sendiri jika Anda membutuhkan kontrol yang baik. Jika Anda mengalami masalah, saya sarankan memposting pertanyaan baru untuk visibilitas yang lebih baik.
Ben N

Jawaban:

1

Kamu bisa memakai Copy-Item ini -Exclude parameter. Dibutuhkan koleksi nama file yang mungkin berisi wildcard dan menghindari menyalinnya. Jadi, Anda dapat mengubah baris ini:

Copy-Item -ErrorAction silentlyContinue -recurse $currentLocalFolder $currentRemoteFolder

Untuk ini (perhatikan parameter tambahan di dekat awal):

Copy-Item -Exclude '*.mp3', '*.exe' -ErrorAction silentlyContinue -recurse $currentLocalFolder $currentRemoteFolder

Anda dapat menambahkan sebanyak mungkin pengecualian.

Ben N
sumber
Bekerja .... Sangat dihargai
Andrew kasaija