In my previous blog post,i discussed about how to compare 2 distribution points to see if they both have any applications mismatch or not.This blog post talks about how to distribute the missing applications to the Distribution Point/s.
I have used basic inbuilt Configmgr PowerShell commands for this activity,to know more about avilable powershell cmdlets in Configmgr,read here
Before you get started with powershell,you need to Get a list of missing applications,packages,drivers,Boot images ,OS images etc using SQL query /other method which you aware,if you would like to use SQL method,refer my previous blog post http://eskonr.com/2012/09/sccm-report-compare-packages-on-2-dps/ .
Export the results into CSV file format which will be the input for our script to distribute these applications to Distribution Point/s.
Your csv file format should look like this:
do some excel work to replace the space with comma(,) and save it as filename.csv
output of CSV (if you open with notepad) should look like this :
PackageType,PackageName,ServerName
Package,Powershell scripts,sccmcen.eksonr.com
package,Outlook Signature,sccmcen.eksonr.com
BootImage,Bootimage X64,sccmcen.eksonr.com
Application,Adobe Reader 10.1,sccmdp01.eskonr.com
Driver,Dell Optiplex E6420,sccmcen.eksonr.com
Note:You do not need to install excel on the server from ,where you run the script.it is just csv format,works with notepad.
Below powershell script which can be used to add all types of packages like applications,packages,driver packages,boot images and OS images etc.
#Import Module
$CMModulepath=$Env:SMS_ADMIN_UI_PATH.ToString().Substring(0,$Env:SMS_ADMIN_UI_PATH.Length - 5)+"\ConfigurationManager.psd1"
import-module $CMModulepath -force
#Change the site Code --P01
CD P01:#Change File Location
Import-Csv C:\Users\eswar\Desktop\add-packages.csv |`
ForEach-Object {
$PackageType = $_.PackageType
$PackageName = $_.PackageName
$ServerName = $_.ServerName#For packages
If($PackageType -eq "Package")
{
#echo "This is a Package"
start-CMContentDistribution -PackageName "$PackageName" -DistributionPointName "$ServerName"
}#For applications
If($PackageType -eq "Application")
{
#echo "This is an Application"
start-CMContentDistribution -ApplicationName "$PackageName" -DistributionPointName "$ServerName"
}#For Driverpackages
If($PackageType -eq "Driver")
{
#echo "This is a Driver"
Start-CMContentDistribution -DriverPackageName "$PackageName" -DistributionPointName "$ServerName"
}#For BootImages
If($PackageType -eq "BootImage")
{
#echo "This is a BootImage"
Start-CMContentDistribution -BootImageName "$packagename" -DistributionPointName "$server"}
#For OSImage
If($PackageType -eq "OSImage")
{
#echo "This is a OSimage"
Start-CMContentDistribution --OperatingSystemImageName "$packagename" -DistributionPointName "$server"
}}
Download the script from technet Gallary http://gallery.technet.microsoft.com/Configmgr-2012Add-packages-b47800b9
How to refresh package on multiple DP’s : http://eskonr.com/2013/09/sccm-configmgr-powershell-script-refresh-package-on-multiple-distribution-points/
11 Comments
Pingback: Masum
Hi Eswar,
good job, I have same requirement but wanted to run the script from a different server instead of the same server, could you tell how is it possible.
did you try running the script from different server ? what issues do you have while running ? make sure you have sccm console installed on your remote server from where you are running the script.
This looks good but can you show or give exact instructions on how to run this? Or screenshots help too.
thanks in advanced.
where are you stuck at while running the script ? you get the list of missing packages which you would like to add to DP and then run the powershell script.
changes you required to do are 1)change sitecode 2)file name .you are done.
Hi Eswar,
Firstly great script and great blog.
I'm getting the following when trying to run the scrip on my CAS:
WARNING: There is no collection.
I'm getting this for each line of my .csv file....Can you shed any light on this?
there is no collection means,the package what you are trying to add is already part of the DP.You can check manually for the specific packages is already added or not .
HI Eswar,
Thanks for your information, I have a scenario like i need to distribute packages/applications to multiple distribtuions points (say like HQ and Canada are two distribution points groups that needs to be distributed )and that should happend based on timings as well.Can we make that with excel inputs ?
Please provide your thoughts on this.
Hi,
AFAIK,there is no built in task or option to distribution application to distribution point at specific time.you will have to do it manually from console when required.OR Use script to distribute apps/packages to DP's via task scheduler with specific time ,so you have the option to define when the task scheduler runs,it will distribute required apps to DP/DP Group.
Hi Eswar,
You have a great Blog ! am a frequent visitor on things related to ConfigMgr
Suggestion - rather than using multiple if blocks...a switch statement would have been a perfet fit here.
Regards
Dex
True but will try to update it using case. I find this way to distribute the packages intially and easy 🙂