I recently wrote a script for exporting an application from SCCM using PowerShell and another post about logging.
I thought the best thing to do would be to combine the two and provide a new script to export an application
Please note that this will export from a primary SCCM site as long as you have only got 1. If you have a CAS please modify the script from:
$PRIServerName = Get-CMSite | Where {$_.Type -eq "2"}
to
$PRIServerName = Get-CMSite | Where {$_.Type -eq "4"}
You can also change the variable names and log file details to match
##Script written by Liam Matthews ##Progress bar Write-Progress -Activity "Application Export" -Status "Starting Script" -PercentComplete 10 ##User defined variables $SCCMSiteCode = "C01" $ExportPathDirect = "E:\SCCM-Export\" $LogLocation = "E:\Scripts\" $LogFileName = "Application-Export.log" ##Machine Variables $SCCMModule = $env:SMS_ADMIN_UI_PATH.Replace("\bin\i386","\bin\configurationmanager.psd1") $CurrentUser = [Environment]::UserName $SCCMDrive = $SCCMSiteCode + ":" $StartTime = Get-Date -Format "HH:mm:ss.fff" $StartDate = Get-Date -Format "MM-dd-yyyy" $StartDateTime = Get-Date -Format "HHmmss" $TZbias = (Get-WmiObject -Query "Select Bias from Win32_TimeZone").bias ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "+++Starting new thread+++" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Checking for Configuration 1Manager PowerShell module" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Get list of current PowerShell modules $CurrentModules = Get-Module IF ($CurrentModules.Name -contains "ConfigurationManager") { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "2" $LogText = "Configuration Manager PowerShell module has already been imported. This is unexpected but script will continue" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Configuration Manager PowerShell module is not currently present. Attempting import now" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Checking if SCCM PowerShell module is available for import IF (Test-Path $SCCMModule) { ##Import SCCM PowerShell module Import-Module $SCCMModule ##Get list of current PowerShell modules $CurrentModules = Get-Module IF ($CurrentModules.Name -contains "ConfigurationManager") { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Configuration Manager PowerShell module has been imported successfully" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Configuration Manager PowerShell module has failed to import. The script will now Exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Configuration Manager PowerShell module does not exist on the current machine. The script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } } ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Checking for SCCM Drive: $SCCMSiteCode" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Get list of PowerShell drives $PSDrives = Get-PSDrive | Select Name IF ($PSDrives.Name -contains $SCCMSiteCode) { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "$SCCMSiteCode drive exists" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Connecting to drive $SCCMSiteCode" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Connect to SCCM site CD $SCCMDrive ##Get current drive location $CurrentPSDrive = (get-location).Drive.Name IF ($CurrentPSDrive -eq "$SCCMSiteCode") { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Successfully connected to $SCCMSiteCode" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Unable to connect to $SCCMSiteCode. The script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "SCCM drive $SCCMSiteCode does not exist. Module may have issues or variable may be incorrect. The script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Searching for SCCM Primary site" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Get SCCM CAS Server $PRIServerName = Get-CMSite | Where {$_.Type -eq "2"} $PRIServerName = $PRIServerName.ServerName IF ($PRIServerName -ne $Null) { $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Found SCCM CAS site $PRIServerName" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Unable to locate SCCM Primary site. The script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } ##Progress bar Write-Progress -Activity "Application Export" -Status "Searching for applications" -PercentComplete 30 ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Searching for applications" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Get applicaion list via WMI $Applications = get-wmiobject -ComputerName $PRIServerName -Namespace Root\SMS\Site_$SCCMSiteCode -Class "SMS_Application" | Select -unique LocalizedDisplayName | sort LocalizedDisplayName $ApplicationsCount = $Applications.Count ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Found $ApplicationsCount applications" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Requesting use input" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Application Import Selection Form Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $form1 = New-Object System.Windows.Forms.Form $form1.Text = "Application Import" $form1.Size = New-Object System.Drawing.Size(425,380) $form1.StartPosition = "CenterScreen" $OKButton1 = New-Object System.Windows.Forms.Button $OKButton1.Location = New-Object System.Drawing.Point(300,325) $OKButton1.Size = New-Object System.Drawing.Size(75,23) $OKButton1.Text = "OK" $OKButton1.DialogResult = [System.Windows.Forms.DialogResult]::OK $OKButton1.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right $form1.AcceptButton = $OKButton1 $form1.Controls.Add($OKButton1) $CancelButton1 = New-Object System.Windows.Forms.Button $CancelButton1.Location = New-Object System.Drawing.Point(225,325) $CancelButton1.Size = New-Object System.Drawing.Size(75,23) $CancelButton1.Text = "Cancel" $CancelButton1.DialogResult = [System.Windows.Forms.DialogResult]::Cancel $CancelButton1.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right $form1.CancelButton = $CancelButton1 $form1.Controls.Add($CancelButton1) $label1 = New-Object System.Windows.Forms.Label $label1.Location = New-Object System.Drawing.Point(10,5) $label1.Size = New-Object System.Drawing.Size(280,20) $label1.Text = "Select an application to import" $form1.Controls.Add($label1) $listBox1 = New-Object System.Windows.Forms.Listbox $listBox1.Location = New-Object System.Drawing.Size(10,30) $listBox1.Width = 400 $listBox1.Height = 296 $listBox1.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right IF ($Applications -eq $Null) { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "No Applications were found. Script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { ##Add items to form foreach($Application in $Applications) { [void] $ListBox1.Items.Add($Application.LocalizedDisplayName) } $form1.Controls.Add($listBox1) $form1.Topmost = $True $result1 = $form1.ShowDialog() IF ($result1 -eq [System.Windows.Forms.DialogResult]::OK) { $SelectedApplication = $listBox1.SelectedItems $SelectedApplication = $SelectedApplication[0] ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "User selected $SelectedApplication" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "User cancelled input request. The script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } } ##Progress bar Write-Progress -Activity "Application Export" -Status "Exporting $SelectedApplication" -PercentComplete 60 ##Clearing error list $Error.Clear() $ExportPath = $ExportPathDirect + $SelectedApplication + ".zip" IF (Test-Path $ExportPath) { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "$SelectedApplication has already been exported. Script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Attempting application export" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Export-CMApplication -IgnoreRelated -Path $ExportPath -Name $SelectedApplication IF ($Error.Count -ge "1") { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Error: " + $Error[0].Exception $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Something appears to have gone wrong. Script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Successfully exported $SelectedApplication" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } } ##Progress bar Write-Progress -Activity "Application Export" -Status "Finalizing" -PercentComplete 90 ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Retrieving deployment type information" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Rename exported folders to deployment type name $DeploymentTypes = Get-CMDeploymentType -ApplicationName $SelectedApplication ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Attempting to rename folders" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Modify deployment type folders foreach ($DeploymentType in $DeploymentTypes) { $Error.Clear() $OldContentName = $ExportPathDirect + $SelectedApplication + "_files\" + $DeploymentType.ContentId $NewContentName = $DeploymentType.LocalizedDisplayName $NewContentName = $NewContentName.Replace("|","") $NewContentName = $NewContentName.Replace("\","") $NewContentName = $NewContentName.Replace("/","") $NewContentName = $NewContentName.Replace("?","") $NewContentName = $NewContentName.Replace("*","") $NewContentName = $NewContentName.Replace("<","") $NewContentName = $NewContentName.Replace(">","") Rename-Item -NewName $NewContentName -Path $OldContentName $NewContentPath = $ExportPathDirect + $SelectedApplication + "_files\" + $NewContentName IF (Test-Path $NewContentPath) { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Successfully renamed " + "'" + $OldContentName + "' to '" + $NewContentPath + "'" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" } ELSE { ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Error: " + $Error[0].Exception $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "3" $LogText = "Something appears to have gone wrong. Script will now exit" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" Exit } } ##Progress bar Write-Progress -Activity "Application Export" -Status "Export of $SelectedApplication Completed" -PercentComplete 100 ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "Application export script successfully completed" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName" ##Output to Log $Time = Get-Date -Format "HH:mm:ss.fff" $Date = Get-Date -Format "MM-dd-yyyy" $Type = "1" $LogText = "+++Finished current thread+++" $LogOutput = "<![LOG[$($LogText)]LOG]!><time=`"$($Time)+$($TZBias)`" date=`"$($Date)`" component=`"$($LogFileName)`" context=`"$($Context)`" type=`"$($Type)`" thread=`"$($StartDateTime)`" file=`"$($CurrentUser)`">" Out-File -InputObject $LogOutput -Append -NoClobber -Encoding Default –FilePath "$LogLocation$LogFileName"
Make sure that the export destination folder exists prior to starting the script
As usual, if you have any issues or questions please post them in the comments section below
Is it possible to modify your script to export all applications instead of just one at a time? What do I need to comment out? Many thanks!
I will write something new and upload it in the next few days. Basically it will need to get the details for each application much as it is here, but then a foreach statement will have to be inserted so that for each application it will run the export string
Hello, thank you very much for this script! But how I can export ONLY the .zip File to the Destination Folder?
Absolutely, If you change line 355 to the following you should get the results you are after
Export-CMApplication -IgnoreRelated -Path $ExportPath -OmitContent -Name $SelectedApplication