Transcript
Page 1: Managing System Center 2012 Configuration Manager with Windows PowerShell

Managing System Center 2012 Configuration Manager with Windows PowerShell

MEMUGAugust 23rd 2013

Page 2: Managing System Center 2012 Configuration Manager with Windows PowerShell

Overview Previously ConfigMgr could only be managed via WMI or

the SDK

Using Windows PowerShell required WMI

Page 3: Managing System Center 2012 Configuration Manager with Windows PowerShell

Requirements Service Pack 1 for System Center 2012 adds native

Windows PowerShell support for Configuration Manager Windows PowerShell 3.0 is required $Host.version will display the current version Windows 8 & Server 2012 include Windows PowerShell 3.0

by default Windows 7 & Server 2008 R2 include Windows PowerShell

2.0, which is not compatible. You can upgrade to version 3.0 by installing "Windows Management Framework 3.0" http://www.microsoft.com/en-us/download/details.aspx?id=34595

Page 4: Managing System Center 2012 Configuration Manager with Windows PowerShell

PowerShell 2.0 not supported

Page 5: Managing System Center 2012 Configuration Manager with Windows PowerShell

PowerShell 32-bit Required On a 64-bit OS, there are two versions of Windows PowerShell - 64-

bit and 32-bit versions

The ConfigurationManager module must run in the 32-bit version of PowerShell, but if you are downloading for a 64-bit OS you must download & install the 64-bit version which includes a 32-bit version

Page 6: Managing System Center 2012 Configuration Manager with Windows PowerShell

PowerShell 64-bit Not Supported

Page 7: Managing System Center 2012 Configuration Manager with Windows PowerShell

Remote Management If the site server is not running Windows Server

2012, managing the site from a remote workstation is recommended rather than upgrading PowerShell

Installing PowerShell 3.0 on a Windows Server 2008 R2 site server is not recommended

Using Windows 8 is recommended, since the Integrated Scripting Environment (ISE) is more advanced than the Windows 7 version

Page 8: Managing System Center 2012 Configuration Manager with Windows PowerShell

PowerShell Crash Course Windows PowerShell has two components:

Interactive command shell (similar to cmd.exe or Unix Bourne/Korn shells)

A scripting engine / scripting language Native commands are called Cmdlets (command-

lets) All Cmdlets should use the Verb-Noun naming

convention, separated by a hyphen (i.e. Get-Help, Start-Process)

The script language version was meant to be separate from the shell version, so .PS1 files are used with PowerShell 1.0, 2.0, 3.0

Page 9: Managing System Center 2012 Configuration Manager with Windows PowerShell

Get-Help Get-Help *process* Get-Help Get-Process (same as Get-Process -?)

Only helpful to jog your memory, not to learn Get-Help Get-Process -Examples Get-Help Get-Process -Detailed Get-Help Get-Process -Full Get-Help Get-Process -Online Get-Help about_CommonParameters Get-Help about*

Page 10: Managing System Center 2012 Configuration Manager with Windows PowerShell

Get-Command Get-Command lists all available commands (similar

to where.exe) Includes all Cmdlets, Functions, Aliases and

executables in the %PATH% (i.e. net.exe) Get-Command net* Get-Command *dir* Get-Command -CommandType Cmdlet Get-Command Dir -CommandType Alias

dir -> Get-ChildItem

Page 11: Managing System Center 2012 Configuration Manager with Windows PowerShell

Command Pipelines Sending the output of one command to another

command Get-Process notepad | Stop-Process Get-Process | Select-Object "ProcessName" >

OutputFile.txt

Get-Help about_pipelines

Page 12: Managing System Center 2012 Configuration Manager with Windows PowerShell

Get-Member Everything in PowerShell is an object, even strings. Get-

Member exposes the details of an object (Properties, Methods, etc.)

Most examples show the | pipe option: $x = "this is a string" $x | Get-Member

Avoid that, it's confusing with arrays, hashtables & collections: $x = @("This is string1","This is string2") $x | Get-Member TypeName: System.String

Use -InputObject instead: Get-Member -InputObject $x TypeName: System.Object[]

Page 13: Managing System Center 2012 Configuration Manager with Windows PowerShell

Get-PSDrive

Page 14: Managing System Center 2012 Configuration Manager with Windows PowerShell

ConfigMgr Module Basics Opening PowerShell will not automatically load the

ConfigMgr module (unless you add it to your $Profile) Get-Module -ListAvailable will not show it as available even

if it is installed. Options:

Run it from the top-left menu of the ConfigMgr console Load the module manually

Page 15: Managing System Center 2012 Configuration Manager with Windows PowerShell

Connect via Windows PowerShell

Page 16: Managing System Center 2012 Configuration Manager with Windows PowerShell

Connect via Windows PowerShell

Page 17: Managing System Center 2012 Configuration Manager with Windows PowerShell

ConfigMgr Module Basics (Cont.) Load the module manually (assuming D: and sitecode XYZ):

cd "D:\Program Files\Microsoft Configuration Manager\AdminConsole\bin" Import-Module ".\ConfigurationManager.psd1" cd XYZ:

Verbose option: Import-Module "D:\Program Files\Microsoft Configuration Manager\

AdminConsole\bin\ConfigurationManager.psd1" -Verbose Get-PSDrive Set-Location XYZ: (site code) Get-Alias cd

cd -> Set-Location

Page 18: Managing System Center 2012 Configuration Manager with Windows PowerShell

Get-Help (Cont.) Get-Help Get-CMSite (same as Get-CMSite -?) Get-Help Get-CMSite -Full Get-Help Get-CMSite -Online

Page 19: Managing System Center 2012 Configuration Manager with Windows PowerShell

Get-Command (Cont.) Get-Command -Module ConfigurationManager

Get-Command -Module ConfigurationManager *site* Get-Command -Module ConfigurationManager *server* Get-Command -Module ConfigurationManager *package* Get-Command -Module ConfigurationManager *role* Get-Command -Module ConfigurationManager *boundary*

Page 20: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Boundary Groups Get-Command -Module ConfigurationManager *boundary* Get-Help New-CMBoundary -Full Get-Help New-CMBoundaryGroup -Full $ADSiteName = "Default-First-Site-Name" $BoundaryName1 = "Test Boundary ADSite 1" New-CMBoundary -Name $BoundaryName1 -Type ADSite -Value $ADSiteName $BoundaryName2 = "Test Boundary IPRange 1" $IPRange = "10.0.0.1-10.255.255.254" New-CMBoundary -Name $BoundaryName2 -Type IPRange -Value $IPRange $BoundaryGroupName = "Test BoundaryGroup 1" New-CMBoundaryGroup -Name $BoundaryGroupName -DefaultSiteCode (Get-CMSite).SiteCode -Description

"PowerShell Test" Add-CMBoundaryToGroup -BoundaryGroupName $BoundaryGroupName -BoundaryName $BoundaryName1 Add-CMBoundaryToGroup -BoundaryGroupName $BoundaryGroupName -BoundaryName $BoundaryName2 Remove-CMBoundary -Name $BoundaryName1 -Force Remove-CMBoundary -Name $BoundaryName2 -Force Remove-CMBoundaryGroup -Name $BoundaryGroupName -Force

Page 21: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Collections New-CMDeviceCollection -Name "Windows 7" -LimitingCollectionName "All

Systems" Add-CMDeviceCollectionQueryMembershipRule -RuleName "Windows 7" -

CollectionName "Windows 7" -QueryExpression "SELECT SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client FROM SMS_R_System WHERE OperatingSystemNameAndVersion LIKE '%Workstation 6.1%'"

New-CMDeviceCollection -Name "Windows XP" -LimitingCollectionName "All Systems"

Add-CMDeviceCollectionQueryMembershipRule -RuleName "Windows XP" -CollectionName "Windows XP" -QueryExpression "SELECT SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client FROM SMS_R_System WHERE OperatingSystemNameAndVersion LIKE '%Workstation 5.1%'"

Remove-CMDeviceCollection -Name "Windows 7" -Force Remove-CMDeviceCollection -Name "Windows XP" -Force

Page 22: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Distribution Point Groups $DistributionPointName = "sccm01.demo.local" $DistributionPointGroupName = "Test Distribution Point Group 1" New-CMDistributionPointGroup -Name $DistributionPointGroupName Add-CMDistributionPointToGroup -DistributionPointName $DistributionPointName -

DistributionPointGroupName $DistributionPointGroupName Remove-CMDistributionPointGroup -Name $DistributionPointGroupName -Force

Page 23: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Distribution Points # Example 1: Distribute a boot image Start-CMContentDistribution -BootImageId "CM200004" -CollectionName "All Systems" -DistributionPointName "CMDIV-WEST04.CORP.CONTOSO.COM" -DistributionPointGroupName

"DistPtGroup02"

# Example 2: Distribute a task sequence Start-CMContentDistribution -TaskSequenceId "CM200007" -CollectionName "All Systems" -DistributionPointName "CMDIV-WEST04.CORP.CONTOSO.COM"

# Example 3: Distribute an application Start-CMContentDistribution -ApplicationName "Dict.app" -CollectionName "All Systems" -DistributionPointName "CMDIV-WEST04.CORP.CONTOSO.COM" -DistributionPointGroupName

"DistPtGroup02"

# Example 4: Distribute a package Start-CMContentDistribution -PackageId "CM200001" -CollectionName "All Systems" -DistributionPointName "CMDIV-WEST04.CORP.CONTOSO.COM" -DistributionPointGroupName

"DistPtGroup02"

# Example 5: Distribute a deployment package Start-CMContentDistribution -DeploymentPackageName "DivDeployPkg01" -CollectionName "All Systems" -DistributionPointName "CMDIV-WEST04.CORP.CONTOSO.COM" -

DistributionPointGroupName "DistPtGroup02"

# Example 6: Distribute a driver package Start-CMContentDistribution -DriverPackageName "DrvPkg02" -CollectionName "All Systems" -DistributionPointName "CMDIV-WEST04.CORP.CONTOSO.COM" -

DistributionPointGroupName "DistPtGroup02"

# Example 7: Distribute an operating system image Start-CMContentDistribution -OperatingSystemImageId "CM200013" -CollectionName "All Systems" -DistributionPointName CMDIV-WEST04.CORP.CONTOSO.COM -

DistributionPointGroupName "DistPtGroup02"

# Example 8: Distribute an operating system installer Start-CMContentDistribution -OperatingSystemInstallerId "CM200017" -CollectionName "All Systems" -DistributionPointName CMDIV-WEST04.CORP.CONTOSO.COM -

DistributionPointGroupName "DistPtGroup02"

Page 24: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Forest Discovery Get-Command -Module ConfigurationManager *Forest* (Get-CMActiveDirectoryForest).EnableDiscovery New-CMActiveDirectoryForest -ForestFqdn (Get-WmiObject

Win32_ComputerSystem).Domain -EnableDiscovery $True Set-CMActiveDirectoryForest -ForestFqdn (Get-WmiObject

Win32_ComputerSystem).Domain -EnableDiscovery $False (Get-CMActiveDirectoryForest).EnableDiscovery

Page 25: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - AD Discovery Get-CMDiscoveryMethod # Heartbeat Discovery is missing Set-CMDiscoveryMethod -ActiveDirectorySystemDiscovery -Enabled $true Set-CMDiscoveryMethod -ActiveDirectoryUserDiscovery -Enabled $true Set-CMDiscoveryMethod -ActiveDirectoryGroupDiscovery -Enabled $true Set-CMDiscoveryMethod -ActiveDirectoryForestDiscovery -Enabled $true

Page 26: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Roles New-CMAdministrativeUser -RoleName "Full Administrator" -Name "DEMO\Domain

Admins"

# This doesn't seem to work: Remove-CMAdministrativeUser -RoleName "Full Administrator" -Name "DEMO\

Domain Admins" -Force

Page 27: Managing System Center 2012 Configuration Manager with Windows PowerShell

Demo - Deployments Clear-CMPxeDeployment -DeviceCollectionId "12A00001" -Force

Enable-CMSoftwareUpdateAutoDeploymentRule -Name "Software Updates - Workstations - Baseline"

Start-CMApplicationDeployment -CollectionName "All Users" -Name "7-Zip" -AvailableDate 2013/08/23 -AvailableTime 11:00 -Comment "Test 1" -DeadlineDate 2013/08/30 -DeadlineTime 23:59 -DeployAction Install -OverrideServiceWindow $False -RebootOutsideServiceWindow $False -UseMeteredNetwork $False -UserNotification DisplayAll

Start-CMPackageDeployment -CollectionName "Windows XP Clients" -PackageName "7-Zip 9.20" -DeviceProgramName "7-Zip 9.20 Silent Install" -Comment "Test created by PowerShell" -DeploymentStartDay 2013/08/23 -DeploymentStartTime 11:00


Top Related