In a post a few days ago I mentioned “some slightly modified functions from Michael Niehaus“.
Well… Why not share them.
Save this as a module, load it and play around.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Rikard Ronnkvist / snowland.se
# Usage:
# Save the file as SCCM-Commands.psm1
# PS:>Import-Module SCCM-Commands
# PS:>Get-SCCMCommands
#
# 2009-04-07 Michael Niehaus Original code posted at http://blogs.technet.com/mniehaus/
# 2010-03-10 Rikard Ronnkvist Major makeover and first snowland.se release
# 2010-03-23 Rikard Ronnkvist Fixed some small bugs and added limitToCollectionId in Add-SCCMCollectionRule
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function Get-SCCMCommands {
# List all SCCM-commands
[CmdletBinding()]
PARAM ()
PROCESS {
return Get-Command -Name *-SCCM* -CommandType Function | Sort-Object Name | Format-Table Name, Module
}
}
Function Connect-SCCMServer {
# Connect to one SCCM server
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$false,HelpMessage="SCCM Server Name or FQDN",ValueFromPipeline=$true)][Alias("ServerName","FQDN","ComputerName")][String] $HostName = (Get-Content env:computername),
[Parameter(Mandatory=$false,HelpMessage="Optional SCCM Site Code",ValueFromPipelineByPropertyName=$true )][String] $siteCode = $null,
[Parameter(Mandatory=$false,HelpMessage="Credentials to use" )][System.Management.Automation.PSCredential] $credential = $null
)
PROCESS {
# Get the pointer to the provider for the site code
if ($siteCode -eq $null -or $siteCode -eq "") {
Write-Verbose "Getting provider location for default site on server $HostName"
if ($credential -eq $null) {
$sccmProviderLocation = Get-WmiObject -query "select * from SMS_ProviderLocation where ProviderForLocalSite = true" -Namespace "root\sms" -computername $HostName -errorAction Stop
} else {
$sccmProviderLocation = Get-WmiObject -query "select * from SMS_ProviderLocation where ProviderForLocalSite = true" -Namespace "root\sms" -computername $HostName -credential $credential -errorAction Stop
}
} else {
Write-Verbose "Getting provider location for site $siteCode on server $HostName"
if ($credential -eq $null) {
$sccmProviderLocation = Get-WmiObject -query "SELECT * FROM SMS_ProviderLocation where SiteCode = '$siteCode'" -Namespace "root\sms" -computername $HostName -errorAction Stop
} else {
$sccmProviderLocation = Get-WmiObject -query "SELECT * FROM SMS_ProviderLocation where SiteCode = '$siteCode'" -Namespace "root\sms" -computername $HostName -credential $credential -errorAction Stop
}
}
# Split up the namespace path
$parts = $sccmProviderLocation.NamespacePath -split "\\", 4
Write-Verbose "Provider is located on $($sccmProviderLocation.Machine) in namespace $($parts[3])"
# Create a new object with information
$retObj = New-Object -TypeName System.Object
$retObj | add-Member -memberType NoteProperty -name Machine -Value $HostName
$retObj | add-Member -memberType NoteProperty -name Namespace -Value $parts[3]
$retObj | add-Member -memberType NoteProperty -name SccmProvider -Value $sccmProviderLocation
return $retObj
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function Get-SCCMObject {
# Generic query tool
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipelineByPropertyName=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$true, HelpMessage="SCCM Class to query",ValueFromPipeline=$true)][Alias("Table","View")][String] $class,
[Parameter(Mandatory=$false,HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
if ($Filter -eq $null -or $Filter -eq "")
{
Write-Verbose "WMI Query: SELECT * FROM $class"
$retObj = get-wmiobject -class $class -computername $SccmServer.Machine -namespace $SccmServer.Namespace
}
else
{
Write-Verbose "WMI Query: SELECT * FROM $class WHERE $Filter"
$retObj = get-wmiobject -query "SELECT * FROM $class WHERE $Filter" -computername $SccmServer.Machine -namespace $SccmServer.Namespace
}
return $retObj
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function Get-SCCMPackage {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_Package" -Filter $Filter
}
}
Function Get-SCCMCollection {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_Collection" -Filter $Filter
}
}
Function Get-SCCMAdvertisement {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_Advertisement" -Filter $Filter
}
}
Function Get-SCCMDriver {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_Driver" -Filter $Filter
}
}
Function Get-SCCMDriverPackage {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_DriverPackage" -Filter $Filter
}
}
Function Get-SCCMTaskSequence {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_TaskSequence" -Filter $Filter
}
}
Function Get-SCCMSite {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_Site" -Filter $Filter
}
}
Function Get-SCCMImagePackage {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_ImagePackage" -Filter $Filter
}
}
Function Get-SCCMOperatingSystemInstallPackage {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_OperatingSystemInstallPackage" -Filter $Filter
}
}
Function Get-SCCMBootImagePackage {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Optional Filter on query")][String] $Filter = $null
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_BootImagePackage" -Filter $Filter
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function Get-SCCMComputer {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Filter on SCCM Resource ID",ValueFromPipelineByPropertyName=$true)][int32] $ResourceID = $false,
[Parameter(Mandatory=$false, HelpMessage="Filter on Netbiosname on computer",ValueFromPipeline=$true)][String] $NetbiosName = "%",
[Parameter(Mandatory=$false, HelpMessage="Filter on Domain name",ValueFromPipelineByPropertyName=$true)][Alias("Domain", "Workgroup")][String] $ResourceDomainOrWorkgroup = "%",
[Parameter(Mandatory=$false, HelpMessage="Filter on SmbiosGuid (UUID)")][String] $SmBiosGuid = "%"
)
PROCESS {
if ($ResourceID -eq $false -and $NetbiosName -eq "%" -and $ResourceDomainOrWorkgroup -eq "%" -and $SmBiosGuid -eq "%") {
throw "Need at least one filter..."
}
if ($ResourceID -eq $false) {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_R_System" -Filter "NetbiosName LIKE '$NetbiosName' AND ResourceDomainOrWorkgroup LIKE '$ResourceDomainOrWorkgroup' AND SmBiosGuid LIKE '$SmBiosGuid'"
} else {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_R_System" -Filter "ResourceID = $ResourceID"
}
}
}
Function Get-SCCMUser {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Filter on SCCM Resource ID",ValueFromPipelineByPropertyName=$true)][int32] $ResourceID = $false,
[Parameter(Mandatory=$false, HelpMessage="Filter on unique username in form DOMAIN\UserName",ValueFromPipelineByPropertyName=$true)][String] $UniqueUserName = "%",
[Parameter(Mandatory=$false, HelpMessage="Filter on Domain name",ValueFromPipelineByPropertyName=$true)][Alias("Domain")][String] $WindowsNTDomain = "%",
[Parameter(Mandatory=$false, HelpMessage="Filter on UserName",ValueFromPipeline=$true)][String] $UserName = "%"
)
PROCESS {
if ($ResourceID -eq $false -and $UniqueUserName -eq "%" -and $WindowsNTDomain -eq "%" -and $UserName -eq "%") {
throw "Need at least one filter..."
}
if ($ResourceID -eq $false) {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_R_User" -Filter "UniqueUserName LIKE '$UniqueUserName' AND WindowsNTDomain LIKE '$WindowsNTDomain' AND UserName LIKE '$UserName'"
} else {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_R_User" -Filter "ResourceID = $ResourceID"
}
}
}
Function Get-SCCMCollectionMembers {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="CollectionID", ValueFromPipeline=$true)][String] $CollectionID
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_CollectionMember_a" -Filter "CollectionID = '" + $CollectionID + "'"
}
}
Function Get-SCCMSubCollections {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$true, HelpMessage="CollectionID",ValueFromPipeline=$true)][Alias("parentCollectionID")][String] $CollectionID
)
PROCESS {
return Get-SCCMObject -sccmServer $SccmServer -class "SMS_CollectToSubCollect" -Filter "parentCollectionID = '$CollectionID'"
}
}
Function Get-SCCMParentCollection {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$true, HelpMessage="CollectionID",ValueFromPipeline=$true)][Alias("subCollectionID")][String] $CollectionID
)
PROCESS {
$parentCollection = Get-SCCMObject -sccmServer $SccmServer -class "SMS_CollectToSubCollect" -Filter "subCollectionID = '$CollectionID'"
return Get-SCCMCollection -sccmServer $SccmServer -Filter "CollectionID = '$($parentCollection.parentCollectionID)'"
}
}
Function Get-SCCMSiteDefinition {
# Get all definitions for one SCCM site
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer
)
PROCESS {
Write-Verbose "Refresh the site $($SccmServer.SccmProvider.SiteCode) control file"
Invoke-WmiMethod -path SMS_SiteControlFile -name RefreshSCF -argumentList $($SccmServer.SccmProvider.SiteCode) -computername $SccmServer.Machine -namespace $SccmServer.Namespace
Write-Verbose "Get the site definition object for this site"
return get-wmiobject -query "SELECT * FROM SMS_SCI_SiteDefinition WHERE SiteCode = '$($SccmServer.SccmProvider.SiteCode)' AND FileType = 2" -computername $SccmServer.Machine -namespace $SccmServer.Namespace
}
}
Function Get-SCCMSiteDefinitionProps {
# Get definitionproperties for one SCCM site
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer
)
PROCESS {
return Get-SCCMSiteDefinition -sccmServer $SccmServer | ForEach-Object { $_.Props }
}
}
Function Get-SCCMIsR2 {
# Return $true if the SCCM server is R2 capable
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer
)
PROCESS {
$result = Get-SCCMSiteDefinitionProps -sccmServer $SccmServer | ? {$_.PropertyName -eq "IsR2CapableRTM"}
if (-not $result) {
return $false
} elseif ($result.Value = 31) {
return $true
} else {
return $false
}
}
}
Function Get-SCCMCollectionRules {
# Get a set of all collectionrules
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="CollectionID", ValueFromPipeline=$true)][String] $CollectionID
)
PROCESS {
Write-Verbose "Collecting rules for $CollectionID"
$col = [wmi]"$($SccmServer.SccmProvider.NamespacePath):SMS_Collection.CollectionID='$($CollectionID)'"
return $col.CollectionRules
}
}
Function Get-SCCMInboxes {
# Give a count of files in the SCCM-inboxes
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server",ValueFromPipeline=$true)][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$false, HelpMessage="Minimum number of files in directory")][int32] $minCount = 1
)
PROCESS {
Write-Verbose "Reading \\$($SccmServer.Machine)\SMS_$($SccmServer.SccmProvider.SiteCode)\inboxes"
return Get-ChildItem \\$($SccmServer.Machine)\SMS_$($SccmServer.SccmProvider.SiteCode)\inboxes -Recurse | Group-Object Directory | Where { $_.Count -gt $minCount } | Format-Table Count, Name -AutoSize
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function New-SCCMCollection {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$true, HelpMessage="Collection Name", ValueFromPipeline=$true)][String] $name,
[Parameter(Mandatory=$false, HelpMessage="Collection comment")][String] $comment = "",
[Parameter(Mandatory=$false, HelpMessage="Refresh Rate in Minutes")] [ValidateRange(0, 59)] [int] $refreshMinutes = 0,
[Parameter(Mandatory=$false, HelpMessage="Refresh Rate in Hours")] [ValidateRange(0, 23)] [int] $refreshHours = 0,
[Parameter(Mandatory=$false, HelpMessage="Refresh Rate in Days")] [ValidateRange(0, 31)] [int] $refreshDays = 0,
[Parameter(Mandatory=$false, HelpMessage="Parent CollectionID")][String] $parentCollectionID = "COLLROOT"
)
PROCESS {
# Build the parameters for creating the collection
$arguments = @{Name = $name; Comment = $comment; OwnedByThisSite = $true}
$newColl = set-wmiinstance -class SMS_Collection -arguments $arguments -computername $SccmServer.Machine -namespace $SccmServer.Namespace
# Hack - for some reason without this we don't get the CollectionID value
$hack = $newColl.PSBase | select * | out-null
# It's really hard to set the refresh schedule via set-wmiinstance, so we'll set it later if necessary
if ($refreshMinutes -gt 0 -or $refreshHours -gt 0 -or $refreshDays -gt 0)
{
Write-Verbose "Create the recur interval object"
$intervalClass = [wmiclass]"\\$($SccmServer.Machine)\$($SccmServer.Namespace):SMS_ST_RecurInterval"
$interval = $intervalClass.CreateInstance()
if ($refreshMinutes -gt 0) {
$interval.MinuteSpan = $refreshMinutes
}
if ($refreshHours -gt 0) {
$interval.HourSpan = $refreshHours
}
if ($refreshDays -gt 0) {
$interval.DaySpan = $refreshDays
}
Write-Verbose "Set the refresh schedule"
$newColl.RefreshSchedule = $interval
$newColl.RefreshType=2
$path = $newColl.Put()
}
Write-Verbose "Setting the new $($newColl.CollectionID) parent to $parentCollectionID"
$subArguments = @{SubCollectionID = $newColl.CollectionID}
$subArguments += @{ParentCollectionID = $parentCollectionID}
# Add the link
$newRelation = Set-WmiInstance -Class SMS_CollectToSubCollect -arguments $subArguments -computername $SccmServer.Machine -namespace $SccmServer.Namespace
Write-Verbose "Return the new collection with ID $($newColl.CollectionID)"
return $newColl
}
}
Function Add-SCCMCollectionRule {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(Mandatory=$true, HelpMessage="CollectionID", ValueFromPipelineByPropertyName=$true)] $collectionID,
[Parameter(Mandatory=$false, HelpMessage="Computer name to add (direct)", ValueFromPipeline=$true)] [String] $name,
[Parameter(Mandatory=$false, HelpMessage="WQL Query Expression", ValueFromPipeline=$true)] [String] $queryExpression,
[Parameter(Mandatory=$false, HelpMessage="Limit to collection (Query)", ValueFromPipeline=$false)] [String] $limitToCollectionId = $null,
[Parameter(Mandatory=$true, HelpMessage="Rule Name", ValueFromPipeline=$true)] [String] $queryRuleName
)
PROCESS {
# Get the specified collection (to make sure we have the lazy properties)
$coll = [wmi]"$($SccmServer.SccmProvider.NamespacePath):SMS_Collection.CollectionID='$collectionID'"
# Build the new rule
if ($queryExpression -ne $null) {
# Create a query rule
$ruleClass = [wmiclass]"$($SccmServer.SccmProvider.NamespacePath):SMS_CollectionRuleQuery"
$newRule = $ruleClass.CreateInstance()
$newRule.RuleName = $queryRuleName
$newRule.QueryExpression = $queryExpression
if ($limitToCollectionId -ne $null) {
$newRule.LimitToCollectionID = $limitToCollectionId
}
$null = $coll.AddMembershipRule($newRule)
} else {
$ruleClass = [wmiclass]"$($SccmServer.SccmProvider.NamespacePath):SMS_CollectionRuleDirect"
# Find each computer
foreach ($n in $name) {
foreach ($computer in Get-SCCMComputer -sccmServer $SccmServer -Filter "Name = '$n'") {
# See if the computer is already a member
$found = $false
if ($coll.CollectionRules -ne $null) {
foreach ($member in $coll.CollectionRules) {
if ($member.ResourceID -eq $computer.ResourceID) {
$found = $true
}
}
}
if (-not $found) {
Write-Verbose "Adding new rule for computer $n"
$newRule = $ruleClass.CreateInstance()
$newRule.RuleName = $n
$newRule.ResourceClassName = "SMS_R_System"
$newRule.ResourceID = $computer.ResourceID
$null = $coll.AddMembershipRule($newRule)
} else {
Write-Verbose "Computer $n is already in the collection"
}
}
}
}
}
}
Function Add-SCCMDirUserCollectionRule {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true, HelpMessage="SCCM Server")][Alias("Server","SmsServer")][System.Object] $SccmServer,
[Parameter(ValueFromPipelineByPropertyName=$true)][String] $CollectionID,
[Parameter(ValueFromPipeline=$true)][String] $UserName
)
PROCESS {
$coll = [wmi]"\\$($SccmServer.Machine)\$($SccmServer.Namespace):SMS_Collection.CollectionID='$CollectionID'"
$ruleClass = [wmiclass]"\\$($SccmServer.Machine)\$($SccmServer.Namespace):SMS_CollectionRuleDirect"
$RuleClass
$UserRule=Get-User "userName='$UserName'"
$NewRuleName=$UserRule.name
$NewRuleResourceID = $UserRule.ResourceID
$newRule = $ruleClass.CreateInstance()
$newRule.RuleName = $NewRuleName
$newRule.ResourceClassName = "SMS_R_User"
$newRule.ResourceID = $NewRuleResourceID
$null = $coll.AddMembershipRule($newRule)
$coll.requestrefresh()
Clear-Variable -name oldrule -errorAction SilentlyContinue
Clear-Variable -name Coll -errorAction SilentlyContinue
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# EOF
Some examples on what you can do:
# List all available SCCM commands
Get-SCCMCommands
# Create an SCCM-Connection to the local server
$sccm = Connect-SCCMServer -Verbose
# Create a new collection with a collection rule
$newCollection = New-SCCMCollection -SccmServer $sccm -name "Some Collection Name" -Verbose
Add-SCCMCollectionRule -Server $sccm -collectionID $newRoot.CollectionId -queryExpression "SELECT * FROM SMS_R_System" -queryRuleName "All Systems" -Verbose
# Count files in the inboxes
$sccm | Get-SCCMInboxes
# Get a package
$MyPackage = Get-SCCMPackage -server $sccm -filter "Name = 'Some Package Name'"
If you have some comments, ideas and things to add… Comment this post or shoot me an .