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

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