Impostare i "Security Rights" di Configuration Manager console attraverso script

Impostare i "Security Rights" di Configuration Manager console attraverso script

  • Comments 1
  • Likes

Ciao,

oggi vorrei fornirvi un metodo per inserire/aggiornare i "Security Rights" di ConfigMgr senza l'utilizzo di console. Tralascio la praticità di un tale metodo, soprattutto se avete da configurare 10/20 Primary Sites in base con "Security Rights" ben precise sugli oggetti Collection, Package, Report, ecc..

Lo script in fondo alla pagina deve essere modificato come segue:

  • <username> - l'utenza che volete inserire con le security rights corrette
  • <object> - il tipo di oggetto sul quale volete aggiungere le permissions
  • <class> - le permissions effettive da assegnare sull'oggetto

Nota: Miraccomando modificate SOLO le voci racchiuse tra <> !

Come sapere quale oggetto è "package" e quale classe corrisponde "Read,Modify,Delete" lo potete capire seguendo questo link http://technet.microsoft.com/en-us/library/dd334568.aspx dove sono presenti le tabelle di classi ed oggetti interessate da ConfigMgr.

Es. Supponiamo di voler inserire la permission READ,MODIFY,DELETE dell'oggetto COLLECTION all'utenza CONTOSO\PIPPO:

  • in primis modificheremo lo script per inserire come <username>  l'utenza CONTOSO\PIPPO;
  • poi al posto di <object> inseriremo il numero 1 (corrispondente come da tabella al link precedente all'oggetto Collection);
  • infine come <class> inseriremo il numero 7, corrispondente come da tabella al link precedente alle permissions READ (1) + MODIFY(2) + DELETE(4), la somma di questi dà 7 appunto (o detta in numero binario 111).

A questo punto possiamo collegarci al Primary Site ove vogliamo inserire/modificare le permissions e lanciare da cmd il comando "cscript setting_security.vbs". Lo script chiede se vogliamo collegarci al server locale (.) o ad un server remoto, in quest'ultimo caso ci chiederà anche userid e pwd da utilizzare per collegarsi.

Nota: Se lanciato per collegarsi in locale (.) utilizzerà il contesto User corrente per collegarsi al Primary Site.

Una volta fatto questo verificate da Console le permissions inserite, e in tutta la velocità potete replicare questa configurazione di Security Right su tutti gli altri Primary Site.

Saluti,

Simone.

Un ringraziamento all'amico Davide Martorella per la collaborazione nei test dello script :)

--- Ulteriori tips ---

  • lo script potrebbe essere esteso per chiedere a prompt le variabili <username>, <object> e <class>;
  • <username> può essere un utenza o gruppo di dominio ricordandosi di inserire anche il nome netbios del Dominio racchiuso tra virgolette (es. dominio CONTOSO utenza PIPPO diverrà "CONTOSO\PIPPO");
  • stranamente nel link di riferimento  http://technet.microsoft.com/en-us/library/dd334568.aspx  non compare l'oggetto "Asset Intelligence" che ho poi verificato corrispondere all'oggetto numero 26;
  • potete calcolare le permission dell'oggetto o sommando i valori decimali o quelli binari (utilizzando poi la calc di windows per convertire il numero finale a decimale);
  • nello script sono già inserite delle voci commentate (indicate con l'apice ') basta de-commentarli ed inserire le variabili <username>, <object> e <class>;
  • lo script non aggiunge le relative permission sul gruppo locale SMSAdmin del Primary Site, come abitualmente fa il Wizard Security Rights da console, occorrerà quindi aggiungere lo <username> in tale gruppo manualmente (oppure inserendo il codice nello stesso script);
  • riferimenti:

 ---------------------

setting_security.vbs

----------------------

Dim connection
Dim computer
Dim userName
Dim userPassword
Dim password 'Password object

On Error Resume Next

Wscript.StdOut.Write "Computer you want to connect to (Enter . for local): "
computer = WScript.StdIn.ReadLine

If computer = "." Then
    userName = ""
    userPassword = ""
Else
    Wscript.StdOut.Write "Please enter the user name: "
    userName = WScript.StdIn.ReadLine
   
    Set password = CreateObject("ScriptPW.Password")
    WScript.StdOut.Write "Please enter your password:"
    userPassword = password.GetPassword()
End If
     
Set connection = Connect(computer,userName,userPassword)

If Err.Number<>0 Then
    Wscript.Echo "Call to connect failed"
End If

Call SetSecurityForAdvertisements(connection, userName)

Sub SetSecurityForAdvertisements(connection, userName)

    Dim permissions
    On Error Resume Next
   
    ' Create the user class permissions object.
    Set permissions = connection.Get("SMS_UserClassPermissions").SpawnInstance_()
    If Err.Number<>0 Then
        Wscript.Echo "Couldn't get class permissions object"
        Exit Sub
    End If
    
    Nome dell'oggetto da modificare
    permissions.UserName = "<username>"
    permissions.ObjectKey = <object>
    permissions.ClassPermissions = <class>
    permissions.Put_
 
    'Nome dell'oggetto da modificare
    'permissions.UserName = "<username>"
    'permissions.ObjectKey = <object>
    'permissions.ClassPermissions = <class>
    'permissions.Put_

    'Nome dell'oggetto da modificare
    'permissions.UserName = "<username>"
    'permissions.ObjectKey = <object>
    'permissions.ClassPermissions = <class>
    'permissions.Put_

    'Nome dell'oggetto da modificare
    'permissions.UserName = "<username>"
    'permissions.ObjectKey = <object>
    'permissions.ClassPermissions = <class>
    'permissions.Put_
 
    If Err.Number<>0 Then
        Wscript.Echo "Couldn't commit class permissions"
        Exit Sub
    End If
End Sub

Function Connect(server, userName, userPassword)
   
    On Error Resume Next
   
    Dim net
    Dim localConnection
    Dim swbemLocator
    Dim swbemServices
    Dim providerLoc
    Dim location
   
    Set swbemLocator = CreateObject("WbemScripting.SWbemLocator")

    swbemLocator.Security_.AuthenticationLevel = 6 'Packet Privacy
   
    ' If  the server is local, don't supply credentials.
    Set net = CreateObject("WScript.NetWork")
    If UCase(net.ComputerName) = UCase(server) Then
        localConnection = true
        userName = ""
        userPassword = ""
        server = "."
    End If
   
    ' Connect to the server.
    Set swbemServices= swbemLocator.ConnectServer _
            (server, "root\sms",userName,userPassword)
    If Err.Number<>0 Then
        Wscript.Echo "Couldn't connect: " + Err.Description
        Connect = null
        Exit Function
    End If
   

    ' Determine where the provider is and connect.
    Set providerLoc = swbemServices.InstancesOf("SMS_ProviderLocation")

        For Each location In providerLoc
            If location.ProviderForLocalSite = True Then
                Set swbemServices = swbemLocator.ConnectServer _
                 (location.Machine, "root\sms\site_" + _
                    location.SiteCode,userName,userPassword)
                If Err.Number<>0 Then
                    Wscript.Echo "Couldn't connect:" + Err.Description
                    Connect = Null
                    Exit Function
                End If
                Set Connect = swbemServices
                Exit Function
            End If
        Next
    Set Connect = null ' Failed to connect.
End Function

 

 

 

Disclaimer
Le Opinioni espresse in questo blog sono strettamente personali e riflettono il punto di vista dell’autore/degli autori in base alla propria esperienza e conoscenza. I contenuti di questo blog inoltre non rappresentano (necessariamente) le opinioni di Microsoft e non costituiscono alcuna garanzia ne’ conferiscono alcun diritto. This posting is provided "AS IS" with no warranties, and confers no rights. Use of included utilities are subject to the terms specified at http://www.microsoft.com/info/copyright.htm.
Comments
  • Ciao,

    Il tuo script è estremamente interessante. Esiste secondo te la possibilità di modificare il vbs per permettere la configurazione non degli oggetti generici (collection, packages, ecc...), ma anche di particolari collection o particolari packages? Tipo poter settare i security rights della collection "Software Install/Office" con particolari permessi per un utente specifico?

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment