We all know that ConfigMgr 2012 (aswell for previous version of ConfigMgr) comes with a site maintenance task that lets you backup the site database of either a Primary Site or a CAS. Once you have enabled this tasks, the database and all the necessary files to restore the site will be backed up to a chosen location. What’s important to point out is that the next time this tasks run, it will over write the previous data in the selected location unless it’s moved manually by an administrator. So in order to prevent that the backed up data gets over written, I’ve created a small rotating (or perhaps archiving) script that will move the backed up site data to a specified archive folder and place it accordingly into sub folders named by date. You can implement this by creating a scheduled task that runs some time after the site backup task has completed.

PowerShell code

$DailyBackupFolder = "\\fileshare\ConfigMgrBackups$\Daily"
$ArchiveFolder = "\\fileshare\ConfigMgrBackups$\Archive"
$Date = (Get-Date).ToShortDateString()
$DateKeep = (Get-Date).AddDays(-2).ToShortDateString()
$DailyFolder = "$($ArchiveFolder)\$($Date)"

if (-not(Test-Path -Path $DailyFolder)) {
	New-Item -Type Directory $DailyFolder | Out-Null

if ((Get-ChildItem -Path $DailyBackupFolder).Count -eq 1) {
	$BackupFolderPath = Get-ChildItem -Path $DailyBackupFolder | Select-Object -ExpandProperty FullName
	Move-Item -Path $BackupFolderPath -Destination $DailyFolder -Force

$ArchiveFolders = Get-ChildItem -Path $ArchiveFolder | Select-Object -ExpandProperty Name
$ArchiveFolders | ForEach-Object {
	if ($_ -lt $DateKeep) {
		Remove-Item -Path ($ArchiveFolder + "\" + $_) -Recurse -Force | Out-Null

How to use it

It’s really simple to use this script, but keep in mind that it assumes that you’re backing up the site data every day. All you need to do is to configure the site backup maintenance task to backup to the folder specified in the script above, more specifically in the $DailyBackupFolder variable. In this case it’s:


You’d also need to specify a folder where the script will move the site backup data to. That path is being stored in the $ArchiveFolder variable. In this case:


Once you’ve specified the two variables and configured the site backup maintenance task, decide on how many backups (daily folders containing the site backup data) you’d like to keep. In the sample script above, the variable $DateKeep is set to 2 days. Change what’s highlighted in red below to change the number of daily backups that will be kept in the Archive folder:

$DateKeep = (Get-Date).AddDays(-2).ToShortDateString()

You could of course also just rely on your backup solutions that backups the data on your file servers, but for those who doesn’t have such a system in place this is a really good substitute for at least making sure that your site data is backed up.


  • Torsten
    Posted at 12:39 November 3, 2013

    Why not using afterbackup.bat instead of a schedulded task?

    • Nickolaj
      Posted at 13:54 November 3, 2013

      That’s one way of doing it, yes. I like to create scheduled tasks though so that my colleagues without any ConfigMgr knowledge easily can get an overview of what’s being started and when.


  • Leave a Reply

    This site uses Akismet to reduce spam. Learn how your comment data is processed.