Sample #PowerShell code for my TechEd Session – Demo 1 – Create and Deploy an Application

Here’s example code for my first demo at our TechEd session. Review the session here PCIT-B410. The code below is an extended version of what I showed in the session (or at least attempted to show, the demo gods were against me …),

Download the script…

Here’s a brief overview of the script:

  • Import ConfigMgr module
  • Create a new application
  • Create a new deployment type for the (modern) application
  • Create a new schedule for the collection (update collection membership daily)
  • Create a new user-based collection with a query membership rule, and apply the schedule.
  • Distribute the application to “Corporate DPs” DP group
  • Create a new simulation for the application
  • Remove the simulation, and create a required deployment

There’s obviously a lot going on in this script, and was meant to show the ability to do an end-to-end scenario. (This becomes significantly harder when you have other deployment types like script-based installer, for example).

Please add your comments for where you would like deeper-dive posts explaining certain tasks.

Download the script…

Happy Scripting!

#Demo 1 - Create and deploy software
#region Import ConfigMgr Module
$CMModulePath = `
    $Env:SMS_ADMIN_UI_PATH.ToString().SubString(0,$Env:SMS_ADMIN_UI_PATH.Length - 5) `
    + "\ConfigurationManager.psd1"
Import-Module $CMModulePath -force
cd PR1:
#endregion

#Show ConfigMgr cmdlets- filter in gridview for Application and Deploymenttype
Get-Command -Module ConfigurationManager | out-gridview
#show help for New-CMApplication
Get-Help New-CMApplication

#region Create New CM Application
New-CMApplication -Name "TestApp Mobile Edge" -Owner "Greg Ramsey" `
    -ReleaseDate (get-date).ToShortDateString() -Keyword "Sales" `
    -IsFeatured $True -SoftwareVersion "1.0.70.75" `
    -IconLocationFile "\\ws2012r2\source$\MobileEdge\testapp.ico"

#Could display the application by running the following:
#Get-CMApplication -Name "TestApp Mobile Edge"

#Show help for Add-CMDeploymentType
get-help Add-CMDeploymentType -ShowWindow

#Add-CMDeploymentType is painful - edit with Show-Command
Show-Command Add-CMDeploymentType

Add-CMDeploymentType -ApplicationName "TestApp Mobile Edge" `
    -AutoIdentifyFromInstallationFile -ForceForUnknownPublisher $True `
    -InstallationFileLocation \\ws2012r2\source$\MobileEdge\testappMobileEdge.Win8App_1.0.70.75_AnyCPU_Debug.appx `
    -Windows8AppInstaller `
    -AdministratorComment "Mobile Edge - Internal App" `
    -AllowClientsToUseFallbackSourceLocationForContent $True `
    -DeploymentTypeName "Mobile Edge for Windows 8" -OnSlowNetworkMode Download `
    -TriggerVPN $True
#endregion

#region Create and populate new CM Collection
#Create schedule *daily*
$sched = New-CMSchedule -start (get-date) -DurationInterval 0 -RecurInterval Days -RecurCount 1 -DurationCount 1
#Create Collection with daily update (no incremental)
New-CMUserCollection -Name "Test Users" -LimitingCollectionName "All Users" -RefreshType Periodic `
    -RefreshSchedule $sched

#Create a WQL Query rule for the collection
Add-CMUserCollectionQueryMembershipRule -CollectionName "Test Users" `
    -QueryExpression "select *  from  SMS_R_User where SMS_R_User.UserName = 'ramseygr'" `
    -RuleName "TestUsers"

#endregion

#region Deploy Software
#send content to DP
Start-CMContentDistribution -Applicationname "TestApp Mobile Edge" `
    -DistributionPointGroupName "Corporate DPs"

#Create a simulation deployment
Start-CMApplicationDeploymentSimulation -CollectionName "Test Users" `
    -Name "TestApp Mobile Edge" -DeployAction Install

#....3 days later... once you have results from simulation
#capture the info in the simulation
$Simulation = Get-CMDeployment -CollectionName "Test Users" | `
    Where-Object {$_.SoftwareName -eq "TestApp Mobile Edge" -and $_.DeploymentIntent -eq 3}

#remove the simulation (because you can't have the same app targeting the same collection)
Remove-CMDeployment -ApplicationName $Simulation.SoftwareName -CollectionName $Simulation.CollectionName -force

#create the deployment, based on information fromt he simulation
#This will create a deployment with a deadline 3 days from today at 8PM local time
Start-CMApplicationDeployment -CollectionName $Simulation.CollectionName -Name $Simulation.SoftwareName `
    -DeployAction Install -DeployPurpose Required -DeadlineDate (get-date).adddays(3).ToShortDateString() `
    -DeadlineTime "20:00" -TimeBaseOn LocalTime

#endregion

About Greg Ramsey
Greg Ramsey is a systems engineer specializing in global systems management for Dell IT. He has a B.S. in Computer Sciences and Engineering from the Ohio State University and is a Microsoft Most Valuable Professional (MVP) for Microsoft System Center Configuration Manager. Greg coauthored SMS 2003 Recipes: A Problem-Solution Approach (Apress, 2006), Microsoft System Center Configuration Manager Unleashed (Sams, 2009), Microsoft System Center 2012 Configuration Manager Unleashed (Sams, 2012), and Microsoft System Center 2012 Configuration Manager: Administration Cookbook (Packt Publishing, 2012), and Microsoft System Center 2012 Configuration Manager R2 Unleashed (Sams, 2012). Greg is cofounder of the Ohio SMS Users Group, and the Central Texas Systems Management User Group.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: