Friday, August 5, 2011

Backing up Management packs when they're modified

(Courtesy of my Co-worker and friend Thomas Bianco) 

So i'm warping up the SCSM project at my client, and one of the value add deliverables i wanted to include was an automatic way to backup their configuration in case they modifiy it later and break something. googling around i found This script to backup management packs, but that's not really what I wanted to do. Some quick modifications and I ended up with this script:

Import-module SMLets

#discover if anything is modified today
$today = Get-Date("{0} 00:00:00" -f (get-date).ToShortDateString()); 
if (Get-SCSMManagementPack | where-object {$_.LastModified -ge $today}) {
    #Inscope Definitions
    $OutPutDir = "C:\Management Packs\UnsealedBackups\";
    $UnsealedMPs = Get-SCSMManagementPack | ?{ ! $_.Sealed };
    [string]$CurrentDate = Get-Date -uformat "%Y\%m\%d-%A";
    $CompletePath = ($OutPutDir + $CurrentDate);

    if ( ! (test-path  $CompletePath)) {
        $output = New-Item -Type Directory -Name $CurrentDate -Path $OutPutDir;
    $UnsealedMPs | Foreach-Object {
        "   Exporting: {0}" -f $_.Name;
        $_ | Export-SCSMManagementPack -targetdirectory "$CompletePath";
Remove-module SMLets -force;
Then i scheduled a task to run it every night at 9:00 PM Local time.

powershell.exe -command "& 'C:\Windows\System32\WindowsPowerShell\v1.0\Examples\Backup-SCSMUnsealedMPs.ps1' "
The bonus on this is that the backup will only be created if any pack was changed today, and you get a nice sorted tree by year\month\date-day

No comments:

Post a Comment