Rufen Sie die SCCM-Sammlungsmitgliedschaft über PowerShell ab

3992
Ob1lan

Ich möchte ein PowerShell-Skript finden, das die SCCM-Sammlungen für einen bestimmten Computer oder Benutzer abruft. Ich weiß, dass dies über eine SCCM-Abfrage erreicht werden kann, aber ich möchte dies mit einer PowerShell-Funktion tun.

Das Skript sollte mit SCCM 2007 und SCCM 2012 funktionieren.

0

2 Antworten auf die Frage

2
Ob1lan

Hier ist die PowerShell-Funktion, um dies zu tun:

$Server = "sccm-01" $site = "S01"  Function Get-Collections  { <#  .SYNOPSIS  Determine the SCCM collection membership  .DESCRIPTION This function allows you to determine the SCCM collection membership of a given user/computer .PARAMETER Type  Specify the type of member you are querying. Possible values : 'User' or 'Computer' .PARAMETER ResourceName  Specify the name of your member : username or computername .EXAMPLE  Get-Collections -Type computer -ResourceName PC001 Get-Collections -Type user -ResourceName User01 .Notes  Author : Antoine DELRUE  WebSite: http://obilan.be  #>   param( [Parameter(Mandatory=$true,Position=1)] [ValidateSet("User", "Computer")] [string]$type,  [Parameter(Mandatory=$true,Position=2)] [string]$resourceName ) #end param  Switch ($type) { User { Try { $ErrorActionPreference = 'Stop' $resource = Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class "SMS_R_User" | ? {$_.Name -ilike "*$resourceName*"}  } catch { Write-Warning ('Failed to access "" : ' -f $server, $_.Exception.Message) }  }  Computer { Try { $ErrorActionPreference = 'Stop' $resource = Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class "SMS_R_System" | ? {$_.Name -ilike "$resourceName"}  } catch { Write-Warning ('Failed to access "" : ' -f $server, $_.Exception.Message) } } }  $ids = (Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class SMS_CollectionMember_a -filter "ResourceID=`"$($Resource.ResourceId)`"").collectionID # A little trick to make the function work with SCCM 2012 if ($ids -eq $null) { $ids = (Get-WmiObject -ComputerName $server -Namespace "root\sms\site_$site" -Class SMS_FullCollectionMembership -filter "ResourceID=`"$($Resource.ResourceId)`"").collectionID }  $array = @()  foreach ($id in $ids) { $Collection = get-WMIObject -ComputerName $server -namespace "root\sms\site_$site" -class sms_collection -Filter "collectionid=`"$($id)`"" $Object = New-Object PSObject $Object | Add-Member -MemberType NoteProperty -Name "Collection Name" -Value $Collection.Name $Object | Add-Member -MemberType NoteProperty -Name "Collection ID" -Value $id $Object | Add-Member -MemberType NoteProperty -Name "Comment" -Value $Collection.Comment $array += $Object }  $array } 

Passen Sie einfach den Wert der $ Server- und $ Site-Variablen an Ihre Umgebung an.

Beispiele für die Verwendung dieser Funktion:

Get-Collections -Type computer -ResourceName PC001 Get-Collections -Type user -ResourceName User01 

Das Ergebnis ist eine Tabelle mit der Sammlungs-ID, dem Sammlungsnamen und dem Kommentar, die dem Computer oder dem Benutzer zugeordnet sind.

Hoffe das hilft!

0
ATur

Ich weiß, dass dies bereits beantwortet wurde, aber Sie sollten sich dieses von Russ Slaten von Microsoft erstellte Powershell-Skript ansehen. Er hat eine grafische Benutzeroberfläche in Powershell erstellt, mit der Sie: Get Direct-Mitglieder hinzufügen Direkte Mitglieder hinzufügen Direkte Mitglieder in Benutzer- und Gerätesammlungen entfernen.

Sie können auch eine neue Benutzersammlung erstellen, wenn Sie neue Mitglieder hinzufügen.

Ich benutze es seit fast einem Jahr und es hat mich nie versagt.

http://blogs.msdn.com/b/rslaten/archive/2014/03/10/configuration-manager-direct-membership-collection-manager.aspx