Recuperar la membresía de la colección SCCM a través de PowerShell

Recuperar la membresía de la colección SCCM a través de PowerShell

Me gustaría encontrar un script de PowerShell que recupere las colecciones de SCCM para una computadora o usuario determinado. Sé que esto se puede lograr mediante una consulta SCCM, pero me gustaría hacerlo usando una función de PowerShell.

El script debería funcionar con SCCM 2007 y SCCM 2012.

Respuesta1

Aquí está la función de PowerShell para hacer eso:

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

Simplemente adapte el valor de las variables $Server y $Site según su entorno.

A continuación se muestran ejemplos de cómo utilizar esta función:

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

El resultado será una tabla que muestra el ID de la colección, el nombre de la colección y el comentario asociados con la computadora o el usuario.

¡Espero que esto ayude!

Respuesta2

Sé que esto ya está respondido, pero deberías consultar este script de Powershell creado por Russ Slaten de Microsoft. Creó una GUI en Powershell que puede usar para: Obtener miembros directos Agregar miembros directos Eliminar miembros directos en colecciones de usuarios y dispositivos.

También puede crear una nueva colección de usuarios al agregar nuevos miembros.

Lo uso desde hace casi un año y nunca me falló.

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

información relacionada