Como consultar o SCCM para todas as coleções das quais um usuário é membro?

1

Em breve, estaremos transferindo todas as nossas contas de usuário para um novo domínio. Como parte disso, as contas de usuário receberão novos ResourceIDs do SMS no SCCM.

O que eu preciso fazer é consultar o SCCM para todas as coleções das quais um usuário é membro, para que eu possa duplicá-las para a nova conta de usuário. Associações diretas (em vez de associações de consulta) são o que me interessa Parece ser muito fácil encontrar todos os anúncios para um usuário, mas não encontrar suas coleções.

Idealmente, eu gostaria de poder obter isso através de um script para que eu possa usar um segundo script para adicionar a nova conta de usuário às coleções relevantes (já capaz de adicionar coleções através de um script).

Executando atualmente o SCCM 2007 R2.

    
por GAThrawn 29.09.2010 / 13:03

1 resposta

1

Ok, depois de ler mais o MSDN do que eu gostaria de fazer novamente, aqui está um VBScript (confuso) que consegui reunir para tirar o relevante do SCCM:

option explicit

DIM strSCCMServer, objSCCM
DIM strUserName, strDomain
DIM strSMSUserID
'Central Site Server
strSCCMServer = "SCCMSERVER01"
'Active Directory domain name
strDomain = "DOMAIN_NAME"
strUserName = InputBox ("Enter User Name")


'Find Site Code
DIM objLoc, Results, Loc
Set objLoc = CreateObject("WbemScripting.SWbemLocator")
Set objSCCM = objLoc.ConnectServer(strSCCMServer, "root\sms")
Set Results = objSCCM.ExecQuery ("SELECT * From SMS_ProviderLocation WHERE ProviderForLocalSite = true")
For each Loc in Results
    If Loc.ProviderForLocalSite = True Then
        Set objSCCM = objLoc.ConnectServer(Loc.Machine, "root\sms\site_" & Loc.SiteCode)
    End If
Next

'Find domain user accounts for strUserName
strSMSUserID = GetUserResourceID(strUserName, strDomain)
If (strSMSUserID = "") Then
    wscript.echo "Error: no account found in " & strDomain & " for userID " & strUserName
    wscript.quit
Else
    wscript.echo strDomain & "\" & strUserName & " = " & strSMSUserID
End If


'Find all direct collection memberships of this account
DIM colCollIDs, objCollResID
Set colCollIDs = objSCCM.ExecQuery ("select * from SMS_CollectionMember_a where ResourceID='" & strSMSUserID & "'")
for each objCollResID in colCollIDs
    DIM instColl
    Set instColl = objSCCM.Get ("SMS_Collection.CollectionID=""" & objCollResID.CollectionID &"""")
    wscript.echo objCollResID.CollectionID & " = " & instColl.Name
next

'Obtain the SMS resource ID for a user account in a domain
Function GetUserResourceID(strUser, strDomain)
    DIM objResID, colResourceIDs
    Set colResourceIDs = objSCCM.ExecQuery ("select ResourceID from SMS_R_User where UserName = '" & strUser &"' AND WindowsNTDomain = '"& strDomain &"'")
    for each objResID in colResourceIDs
        GetUserResourceID = objResID.ResourceID
    next
End Function
    
por 30.09.2010 / 17:11