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
Comments
- Anonymous
March 27, 2011
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?