Sample #PowerShell code for my TechEd Session – Demo 1 – Create and Deploy an Application
May 20, 2014 Leave a comment
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 …),
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.
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