Cumulative Update 4 for System Center 2012 R2 Configuration Manager included many additions and changes to the PowerShell cmdlets that are used to manage the environment. Here is a list of all the additions, fixes, and changes to cmdlets used for CM12R2.
The following issues with PowerShell CM12 cmdlets have been resolved with CU4:
– Add-CMDeploymentType
- When a deployment type is used that imports its information (such as AppV), the DeploymentTypeName parameter is ignored.
- The WindowsPhoneStoreInstaller parameter creates incorrect deployment types. This is a regression from Cumulative Update 1.
- Invalid locations can be specified incorrectly for the following deployment types:
- Windows Phone Store
- Google Play Store
- Apple Store
- You can configure the following as DownloadContentAsStreaming:
- MSI deployment
- Windows .appx type OnSlowNetworkMode values
– Add-CMDeviceAffinityToUser
User-device affinity for nonprimary users cannot be set on devices. For example, such users can be users who are discovered through Active Directory.
– Add-CMDistributionPoint
An expired CertificateExpirationTimeUtc can be specified.
– Add-CMFallbackStatusPoint
StateMessageNum values are not validated against the acceptable range (100 to 100,000).
– Export-CMPackage
Incorrect errors are reported when ExportFilePath is in an unexpected format.
– Get-CMSoftwareUpdate
The Id parameter that allows for querying for software updates by ID value is missing.
– Get-CMStatusFilterRule
No results are returned if the Name parameter is not specified.
Get-CMUser
- Inconsistent object types are returned (SMS_CombinedUserResources or SMS_Collection-based object), depending on input parameters. This is a regression from the release version of System Center 2012 R2 Configuration Manager. See Get-CMUser notes in the “Breaking changes” section for more information about how this fix may affect you.
- Non-user objects are matched when you use Name or ResourceId.
- Not querying both “SMSID” and “Name” values for SMS_CombinedUserResource records. This is a regression from Cumulative Update 2.
– Import-CMCertificate
Unable to read certificate that is specified by the Path parameter. This is a regression from Cumulative Update 2.
– New-CMActiveDirectoryForest
Unable to create new Active Directory forest object. This is a regression from Cumulative Update 2.
– New-CMBoundary
No validation of the Value parameter against Type. This allows for invalid boundary configuration.
– New-CMClientSetting
Incorrect errors are reported when you create a client setting with a Type argument of “Default.”
– New-CMCollectionVariable
Unable to add new variables to a collection that has pre-existing variables. This is a regression from Cumulative Update 2.
– New-CMSecondarySite
Expired CertificateExpirationTimeUtc can be specified.
– Remove-CMDeviceCollection
Allows for removal of non-device collection when you use it with InputObject or pipeline.
– Remove-CMUserCollection
Allows for removal of non-user collection when you use it with InputObject or pipeline.
– Set-CMAssetIntelligenceSynchronizationPoint
Unable to clear Asset Intelligence proxy certificate by setting CertificateFile to “$null.”
– Set-CMBoundary
The Value parameter is not validated for correct syntax based on the boundary type or Type parameter. This allows for invalid boundary configuration.
– Set-CMClientPushInstallation
Successive cmdlet executions fail after you run this cmdlet.
Set-CMDeploymentType
- Cmdlet will silently fail if trying to set a deployment type that does not exist in an application.
- Allows for configuring an MSI deployment or Windows .appx type OnSlowNetworkMode value asDownloadContentAsStreaming.
- Cmdlet will silently fail if trying to change a deployment type installer that is not recognized by the cmdlet.
– Set-CMDeviceCollection
Allows for configuration of non-device collection when you use it with InputObject or pipeline.
– Set-CMDistributionPoint
- Expired CertificateExpirationTimeUtc can be specified.
- AllowFallbackForContent value does not apply to distribution point.
– Set-CMFileReplicationRoute
FileReplicationAccountName does not validate user name correctly in some circumstances.
– Set-CMStateMigrationPoint
AllowFallbackForContent value does not apply to state migration point.
– Set-CMSystemHealthValidatorPointComponent
Unable to clear Active Directory publishing or query accounts by setting null or empty value for PublishAccount and QueryAccount.
– Set-CMUserCollection
Allows for configuration of non-user collection when you use it with InputObject or pipeline.
– Start-CMDistributionPointUpgrade
Expired CertificateExpirationTimeUtc can be specified.
– Update-CMCertificate
Unable to read certificate specified by the Path parameter. This is a regression from Cumulative Update 2.
Cumulative Update 4 has also introduced the following new cmdlets to Configuration Manager 2012 R2
– Add-CMDeploymentTypeDependency
Adds a deployment type as a dependency to a dependency group. Required input is a deployment type object from Get-CMDeploymentType and a dependency group from [Get|New]-CMDeploymentTypeDependencyGroup.
Example
Get-CMDeploymentType -ApplicationName MyApp |
New-CMDeploymentTypeDependencyGroup -GroupName MyGroup |
Add-CMDeploymentTypeDependency -DeploymentTypeDependency `
(Get-CMDeploymentType -ApplicationName MyChildApp) `
-IsAutoInstall $true
– Add-CMDeploymentTypeSupersedence
Sets one deployment type to supersede another. Required input is a superseding type from Get-CMDeploymentTypeand superseded deployment type from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Add-CMDeploymentTypeSupersedence -SupersedingDeploymentType `
(Get-CMDeploymentType -ApplicationName MySupersedingApp)
– ConvertFrom-CMApplication
Converts an AppMgmt SDK “Application” object into an SMS_Application object for insert into the SMS Provider. Notice that this only creates an SMS_Application instance. It is up to the calling code to actually insert it into WMI.
Example
$app = Get-CMApplication -Name MyApp |
ConvertTo-CMApplication
# (placeholder code to make changes against $app object)
$obj = ConvertFrom-CMApplication -Application $app
$obj.Put()
– ConvertFrom-CMConfigurationItem
Converts a DCM Object Model SDK ConfigurationItem or derived object to XML string.
Example
$rule = Get-CMConfigurationItem | ConvertTo-CMConfigurationItem
$xml = ConvertFrom-CMConfigurationItem -ConfigurationItem $rule
– ConvertTo-CMApplication
Converts an SMS_Application or SMS_DeploymentType into an AppMgmt SDK “Application” object. Can be converted back into an “SMS_Application” by using the ConvertFrom-CMApplication cmdlet.
Example
$app = Get-CMApplication -Name MyApp | ConvertTo-CMApplication
– ConvertTo-CMConfigurationItem
Converts a CI-based object from the SMS Provider or XML string to a DCM Object Model SDK object derived from ConfigurationItem.
Example
Get-CMConfigurationItem | ConvertTo-CMConfigurationItem
– Get-CMCertificate
Get certificates stored for the site. These can be ISV Proxy, boot media, or distribution point certificates. Output of this cmdlet can be pipelined into other Certificate cmdlets such as Block-CMCertificate. Notice that queries that are made by using Thumbprint may be slower than other queries, especially with large result sets.
Example
$bootmedia = Get-CMCertificate -CertificateType BootMedia
– Get-CMDeploymentTypeDependency
Gets existing dependent deployment types from a dependency group. Required input is a dependency group object fromGet-CMDeploymentTypeDependencyGroup.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Get-CMDeploymentTypeDependencyGroup -GroupName MyGroup |
Get-CMDeploymentTypeDependency
– Get-CMDeploymentTypeDependencyGroup
Gets an existing deployment type dependency group. Can be changed by using Add-CMDeploymentTypeDependencyor Remove-CMDeploymentTypeDependency. Required input is a deployment type object from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Get-CMDeploymentTypeDependencyGroup
– Get-CMDeploymentTypeSupersedence
Gets supersedences for a superseded deployment type. Required input is a superseded deployment type.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Get-CMDeploymentTypeSupersedence
– Get-CMMigrationSource
Gets information for a migrated source hierarchy. Can be used with Sync-CMMigrationSource to view the status of migration.
Example
Get-CMMigrationSource | select Status
– Get-CMObjectSecurityScope
Gets all security scopes associated with the specified InputObject. This can be used on any object that uses security scopes.
Example
Get-CMSoftwareUpdateGroup | Get-CMObjectSecurityScope
Get-CMBoundaryGroup | Get-CMObjectSecurityScope
– Get-CMQuery
Gets a query.
Example
Get-CMQuery -Name “All Personal Devices”
– Get-CMSiteDefinition
Gets site definition information from SMS_SiteDefinition class. This contains various site-wide and configuration settings.
Example
Get-CMSiteDefinition -SiteCode PRI
– Get-CMSiteRole
Gets a list of site roles from a site server or site servers.
Example
Get-CMSiteRole -SiteSystemServerName myserver.contoso.com
– Get-CMSupportedPlatforms
Gets a list of supported platforms. Can be used for pipelining into Import-CMDriver.
Example
Get-CMSupportedPlatforms -Name ‘All Windows*’
– Invoke-CMQuery
Invokes a query and returns the results.
Example
Get-CMQuery -Name “My Systems” | Invoke-CMQuery
– Invoke-CMSystemDiscovery
Instructs site to start Active Directory system discovery as soon as possible.
Example
Invoke-CMSystemDiscovery -SiteCode ABC
– Invoke-CMUserDiscovery
Instructs site to start Active Directory user discovery as soon as possible.
Example
Invoke-CMUserDiscovery -SiteCode ABC
– Invoke-GroupDiscovery
Instructs site to start Active Directory group discovery as soon as possible.
Example
Invoke-CMGroupDiscovery -SiteCode ABC
– New-CMADGroupDiscoveryScope
Creates an object that can be used to configure an active directory group discovery scope together with Set-CMDiscoveryMethod.
Example
Set-CMDiscoveryMethod -ActiveDirectoryGroupDiscovery `
-AddGroupDiscoveryScope (New-CMADGroupDiscoveryScope `
-name MyScope -SiteCode R2s -LdapLocation `
“LDAP://CN=ScopeLocation,DC=contoso,DC=com”-RecursiveSearch $true)
– New-CMDeploymentTypeDependencyGroup
Creates an abstract deployment type dependency group. Must be added to an existing deployment type by using Add-CMDeploymentTypeDependency. Required input is a deployment type object from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName MyApp |
New-CMDeploymentTypeDependencyGroup -GroupName MyGroup
– New-CMEmbeddedObjectInstance
For advanced use cases in which you have to directly manipulate result objects from the SMS Provider or from object queries. Creates a new embedded object of an ad hoc class. Notice that for “SMS_EmbeddedProperty” or “SMS_EmbeddedPropertyList” types, there is New-CMEmbeddedProperty and New-CMEmbeddedPropertyList.
Example
$prop = New-CMEmbeddedObjectInstance -ClassName “SMS_EmbeddedProperty”
– New-CMEmbeddedProperty
For advanced use cases in which you have to directly manipulate results from the SMS Provider or from object queries. Creates a new SMS_EmbeddedProperty instance and can also set values.
Example
$dp = Get-CMDistributionPoint -SiteSystemServerName mydp001.contoso.com
$embeddedProperty = New-CMEmbeddedProperty -PropertyName “UpdateBranchCacheKey” -Value 1
$props = $dp.EmbeddedProperties
$props[“UpdateBranchCacheKey”] = $embeddedProperty
$dp.EmbeddedProperties = $props
$dp.Put()
– New-CMEmbeddedPropertyList
For advanced use cases in which you have to directly manipulate results objects from the SMS Provider or from object queries. Creates a new SMS_EmbeddedPropertyList instance and can also set values.
Example
$propList = New-CMEmbeddedPropertyList -PropertyListName MyList -Values (“abc”, “def”, “xyz”)
– New-CMQuery
Creates a new query.
Example
New-CMQuery -Name “My Systems” -Expression `
“select * from SMS_R_System where Name LIKE ‘ABC%’
– Remove-CMCollection
Removes an invariant collection by value, can be used instead of Remove-CMUserCollection and Remove-CMDeviceCollection for collection removal.
Example
Get-CMUserCollection -Name MyCollection | Remove-CMCollection -Force
Get-CMDeviceCollection -Name MyDeviceCollection |
Remove-CMCollection -Force
– Remove-CMDeploymentTypeDependency
Removes a deployment type dependency from a deployment type dependency group. If removing a dependency causes the group to have no more dependencies, the group will be removed. Required input is a deployment type object fromGet-CMDeploymentType or Get-CMDeploymentTypeDependency and a dependency group from Get-CMDeploymentTypeDependencyGroup.
Example
$dpGroup = Get-CMDeploymentType -ApplicationName MyApp |
Get-CMDeploymentTypeDependencyGroup -GroupName MyGroup `
$dpDeps = Get-CMDeploymentTypeDependency -Group $dpGroup
Remove-CMDeploymentTypeDependency -Group $dpGroup `
-DeploymentTypeDependency $dpDeps[1] -Force
– Remove-CMDeploymentTypeDependencyGroup
Removes a deployment type dependency group (and its dependencies) from a deployment type. Required input is a dependency group from Get-CMDeploymentTypeDependencyGroup.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Get-CMDeploymentTypeDependencyGroup -GroupName MyGroup |
Remove-CMDeploymentTypeDependencyGroup -Force
– Remove-CMDeploymentTypeSupersedence
Removes a superseding deployment type from a superseded deployment type. Required input is a superseding type fromGet-CMDeploymentType or Get-CMDeploymentTypeSupersedence and superseded deployment type from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Remove-CMDeploymentTypeSupersedence -SupersedingDeploymentType `
(Get-CMDeploymentType -ApplicationName MySupersedingApp)
– Remove-CMQuery
Removes a query.
Example
Get-CMQuery -Name “My Systems” | Remove-CMQuery -Force
– Set-CMDeploymentTypeDependencyGroup
Configures settings for a deployment type group. Required input is a dependency group from Get-CMDeploymentTypeDependencyGroup.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Get-CMDeploymentTypeDependencyGroup -GroupName MyGroup |
Set-CMDeploymentTypeDependencyGroup -NewName MyNewGroup
– Set-CMDeploymentTypeSupersedence
Configures settings for a deployment type supersedence. Required input is a superseding type from Get-CMDeploymentType or Get-CMDeploymentTypeSupersedence and superseded deployment type from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName MyApp |
Set-CMDeploymentTypeSupersedence -SupersedingDeploymentType `
(Get-CMDeploymentType -ApplicationName MySupersedingApp) `
-IsUninstall $true
– Set-CMQuery
Configures a query.
Example
Get-CMQuery -Name “My Systems” |
Set-CMQuery -NewName “My ABC Systems”
– Sync-CMMigrationSource
Starts a synchronization for a migrated source hierarchy.
Example
Sync-CMMigrationSource
And the following improvements have been made to existing cmdlets:
Add-CMDeploymentType
- New optional parameter for requirements rules: AddRequirement. Rules must be created by using the DCM Object Model SDK.
- New optional parameter: Application. Accepts input from Get-CMApplication as an alternative forApplicationName.
– Add-CMDistributionPoint
New EnableBranchCache parameter added to enable branch cache for new distribution point.
– Add-CMFallbackStatusPoint
ThrottleInterval and StateMessageNum parameters are no longer mandatory. Default values will be used for ThrottleInterval (3,600) and StateMessageNum (10,000) if no values are defined.
– Block-CMCertificate
New Certificate parameter to allow for pipelining object from Get-CMCertificate.
– Clear-CMClientOperation
New optional Operation parameter that accepts input from Get-CMClientOperation.
– Disable-CMStatusFilterRule
The Name parameter now accepts wildcard values.
– Enable-CMStatusFilterRule
The Name parameter now accepts wildcard values.
– Export-CMSecurityRole
Additional support for exporting security roles by name (RoleName) or by value (Role).
– Get-CMAppV5XDeploymentTypeItem
Now accepts pipelined input from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName “MyApp” `
-DeploymentTypeName “AppV5X” | Get-CMAppV5XDeploymentTypeItem
– Get-CMClientPushInstallation
No longer requires a mandatory search parameter for finding client push installation details.
– Get-CMDeploymentType
Can pipeline result object from Get-CMApplication to get deployment types.
Example
Get-CMApplication -Name “Contoso App” |
Get-CMDeploymentType s-Name “MSI Installer”
– Get-CMManagementPointComponent
No longer requires mandatory SiteCode and SiteSystemName parameters.
– Get-CMSoftwareUpdate
New optional OnlyExpired parameter to scope query to only get expired updates for faster queries.
– Get-CMStatusFilterRule
The Name parameter now accepts wildcard values.
– Get-CMUser
Performance improvements with large result sets.
– Import-CMComputerInformation
SmBiosId and MacAddress can be defined when you use ComputerName instead of both being required. If neither is defined, the cmdlet will fail.
Import-CMDriver
- New optional ImportFolder parameter to indicate that all drivers in the folder that is specified by using UncFileLocation should be processed.
- New optional SupportedPlatforms parameter that accepts input from Get-CMSupportedPlatforms for setting a driver’s supported platforms.
– Lock-CMObject
Now accepts objects through pipeline.
Example
Get-CMDriverPackage | Lock-CMObject
– New-CMApplication
New optional DisplaySupersedencesInApplicationCatalog parameter toggles the ability to display supersedences in the application catalog.
– New-CMMaintenanceWindow
New optional Collection parameter accepts input from Get-CMCollection.
– New-CMSecondarySite
New EnableBranchCache parameter added to enable branch cache for secondary site distribution point.
– Remove-CMApplicationRevisionHistory
Accepts pipelined input from Get-CMApplicationRevisionHistory for removing a specific application revision.
Example
Get-CMApplicationRevisionHistory -Name “Contoso App” -Revision 2 |
Remove-CMApplicationRevisionHistory
– Remove-CMClientOperation
New optional Operation parameter accepts input from Get-CMClientOperation.
– Remove-CMDeployment
New optional Deployment parameter accepts an object from Get-CMDeployment that allows for deleting update, package, operating system, and application deployments.
Note DeploymentId and ApplicationName will continue to support only application deployments. This behavior is subject to change in a future release.
– Remove-CMDeploymentType
The ApplicationName parameter is no longer required when you use DeploymentType or pipeline from Get-CMDeploymentType.
– Remove-CMMaintenanceWindow
New optional Collection parameter accepts input from Get-CMCollection.
– Remove-CMStatusFilterRule
The Name parameter now accepts wildcard values.
– Set-ClientPushInstallation
Now supports pipelining from Get-CMClientPushInstallation.
– Set-CMApplication
New optional DisplaySupersedencesInApplicationCatalog parameter toggles the ability to display supersedences in the application catalog.
Set-CMDeploymentType
- New optional parameters for requirements rules:
- AddRequirement
- RemoveRequirement
- ClearRequirements
Rules must be created by using the DCM Object Model SDK.
NoteRemoveRequirement input must match the RuleId value of the requirement rule in the deployment type. Otherwise, it will not be removed.
- ApplicationName is no longer a required parameter if a DeploymentType input object is used.
- Now supports pipelining from Get-CMDeploymentType.
Example
Get-CMDeploymentType -ApplicationName sccmapp `
-DeploymentTypeName adberdr934_4.6.33.315 |
Set-CMDeploymentType -AppV5xInstaller -OnSlowNetworkMode DoNothing
Set-CMDiscoveryMethod
- New optional parameters when you configure group discovery with ActiveDirectoryGroupDiscovery:
- AddGroupDiscoveryScope
- RemoveGroupDiscoveryScope
- AddGroupDiscoveryScope requires input that is created by the New-CMADGroupDiscoveryScope cmdlet.
- RemoveGroupDiscoveryScope requires string matching scope name.
Example
Set-CMDiscoveryMethod -ActiveDirectoryGroupDiscovery `
-AddGroupDiscoveryScope (New-CMADGroupDiscoveryScope `
-name MyScope -SiteCode R2S -LdapLocation `
“LDAP://CN=ScopeLocation,DC=contoso,DC=com” -RecursiveSearch $true)
– Set-CMDistributionPoint
New EnableBranchCache parameter added to configure branch cache on distribution point.
– Set-CMMaintenanceWindow
New optional Collection parameter accepts input from Get-CMCollection.
– Set-CMManagementPointComponent
Now accepts pipelined input from the following cmdlets:
- Get-CMSiteDefinition (new cmdlet)
- Get-CMManagementPoint
- Get-CMSite
- Get-CMManagementPointComponent
– Set-CMPackage
- New optional parameters for changing distribution (prestage, multicast) and data source (package update) properties to match admin console property sheets.
- Renamed several parameters for clarity and consistency. These newly named parameters are aliased to the old names to preserve compatibility.
– Unblock-CMCertificate
New Certificate parameter allows for pipelining object from Get-CMCertificate.
– Unlock-CMObject
Now accepts objects through pipeline.
Example
Get-CMDriverPackage | Unlock-CMObject
Update-CMCertificate
- The new optional Force parameter prevents prompting for overwriting existing certificate.
- The new Certificate parameter allows for pipelining object from Get-CMCertificate.
É