Получить членство в коллекции SCCM через PowerShell

4138
Ob1lan

Я хотел бы найти сценарий PowerShell, который извлекает коллекции SCCM для данного компьютера или пользователя. Я знаю, что этого можно достичь с помощью запроса SCCM, но я бы хотел сделать это с помощью функции PowerShell.

Скрипт должен работать с SCCM 2007 и SCCM 2012.

0

2 ответа на вопрос

2
Ob1lan

Вот функция PowerShell, чтобы сделать это:

$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 } 

Просто измените значение переменных $ Server и $ Site в соответствии с вашей средой.

Вот примеры того, как использовать эту функцию:

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

Результатом будет таблица с идентификатором коллекции, именем коллекции и комментарием, связанным с компьютером или пользователем.

Надеюсь это поможет!

0
ATur

I know this is already answered, but you should check out this Powershell script created by Russ Slaten from Microsoft. He created a GUI in Powershell which you can use to: Get Direct members Add Direct members Remove Direct members in user and device collections.

You can also create a new user collection when adding new members.

I use it for almost a year now and it never failed me.

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