Recuperar a participação na coleção do SCCM via PowerShell

2

Gostaria de encontrar um script do PowerShell que recupere as coleções do SCCM para um determinado computador ou usuário. Eu sei que isso pode ser conseguido através de uma consulta SCCM, mas eu gostaria de fazer isso usando uma função do PowerShell.

O script deve funcionar com o SCCM 2007 e o SCCM 2012.

    
por Ob1lan 02.06.2015 / 10:11

2 respostas

5

Aqui está a função do PowerShell para fazer isso:

$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 "{0}" : {1}' -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 "{0}" : {1}' -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
}

Simplesmente adapte o valor das variáveis $ Server e $ Site de acordo com o seu ambiente.

Aqui estão alguns exemplos de como usar esta função:

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

O resultado será uma tabela mostrando o ID da coleção, o Nome da coleção e o Comentário associados ao computador ou ao usuário.

Espero que isso ajude!

    
por 02.06.2015 / 10:11
0

Uma pequena jóia .. Obrigado por isso ..

Eu mudei um pouco, coloquei as variáveis site / server abaixo dos parâmetros para poder colocá-lo em nosso próprio módulo.

    param(
[Parameter(Mandatory=$true,Position=1)]
[ValidateSet("User", "Computer")]
[string]$type,

[Parameter(Mandatory=$true,Position=2)]
[string]$resourceName,


[Parameter(Mandatory=$false,Position=3)]
[string]$Server = "sccm-01",


[Parameter(Mandatory=$false,Position=4)]
[string]$site = "S01"
) #end param
    
por 18.10.2016 / 13:39