2010-11-11 20 views
3

Dans Powershell, comment définissez-vous les autorisations d'utilisateur AD du service de lecture/écriture principal?Powershell: Comment définissez-vous les autorisations AD du service principal de lecture/écriture?

Normalement, au cours de mon processus de construction, j'utilise ADSIedit pour accéder à cet objet, puis passer par tous les onglets de sécurité pour se mettre de cocher à côté de:

  • Service Lire Nom principal
  • Nom du service d'écriture

Mais la navigation à travers ADSIedit peut prendre beaucoup de temps, donc j'essaye de programmer le processus. Si j'ai une liaison LDAP PowerShell avec un nouvel utilisateur créé, comment puis-je utiliser PowerShell pour définir ces deux propriétés pour ce compte d'utilisateur?

Voici un piraté en bout de code des parties pertinentes possibles de mon script d'installation:

$strDomain = "dc=my,dc=com" 
$objDomain = [ADSI] "LDAP://" + strDomain 
$strSCCMSQLPW = Read-Host -assecurestring "Please enter a password for the " + $strSCCMSQL + " account: " 
New-ADUser -SamAccountName $strSCCMSQL + -Name $strSCCMSQL -AccountPassword $strSCCMSQLPW -Enabled $true -Path $strUsersOU + "," + $strDomain -PasswordNeverExpires $true 

Répondre

6

Vous devez ajouter un objet ActiveDirectoryAccessRule à la liste de contrôle d'accès de l'objet cible. Pour définir des droits spécifiques à une propriété, l'astuce consiste à transmettre l'attribut schemaIDGUID à l'attribut. Nous devons donc d'abord trouver schemaIDGUID à partir de l'entrée de schéma Service-Principal-Name. Dans l'exemple de code, je me réfère de manière statique au Service-Principal-Name, mieux aurait été de chercher le ldapDisplayname pour trouver l'entrée, mais je suis sûr que vous pouvez le trier. En tout cas, ce code doit faire le travail:

Function Set-SpnPermission { 
    param(
     [adsi]$TargetObject, 
     [Security.Principal.IdentityReference]$Identity, 
     [switch]$Write, 
     [switch]$Read 
    ) 
    if(!$write -and !$read){ 
     throw "Missing either -read or -write" 
    } 
    $rootDSE = [adsi]"LDAP://RootDSE" 
    $schemaDN = $rootDSE.psbase.properties["schemaNamingContext"][0] 
    $spnDN = "LDAP://CN=Service-Principal-Name,$schemaDN" 
    $spnEntry = [adsi]$spnDN 
    [email protected]("") 
    $guidArg[0]=$spnEntry.psbase.Properties["schemaIDGUID"][0] 
    $spnSecGuid = new-object GUID $guidArg 

    if($read){$adRight=[DirectoryServices.ActiveDirectoryRights]"ReadProperty" } 
    if($write){$adRight=[DirectoryServices.ActiveDirectoryRights]"WriteProperty"} 
    if($write -and $read){$adRight=[DirectoryServices.ActiveDirectoryRights]"readproperty,writeproperty"} 
    $accessRuleArgs = $identity,$adRight,"Allow",$spnSecGuid,"None" 
    $spnAce = new-object DirectoryServices.ActiveDirectoryAccessRule $accessRuleArgs 
    $TargetObject.psbase.ObjectSecurity.AddAccessRule($spnAce) 
    $TargetObject.psbase.CommitChanges()  
    return $spnAce 
} 

lignes d'échantillonnage pour appeler la fonction ...

$TargetObject = "LDAP://CN=User,OU=My User Org,DC=domain,DC=net" 
$Identity = [security.principal.ntaccount]"domain\user" 

Set-SpnPermission -TargetObject $TargetObject -Identity $Identity -write -read 
+0

Thanx pour les Cosmos de poste. Je vais vérifier que ça marche et ensuite Mark. J'apprécie le ramassage tardif! lol. – thepip3r

0

Vous pouvez utiliser Quest AD cmdlets. Cela rend les choses d'autorisation AD très faciles dans PowerShell.

Lisez ceci blog pour des exemples sur la façon d'ajouter des permissions AD ou même de copier les permissions AD.

Il suffit de rechercher Add-QADPermission et il devrait faire votre travail.

1

Voici un exemple en utilisant la quête pour définir les autorisations sur les attributs de nom principal.

D'abord, ajouter Quête:

Add-PSSnapin Quest.ActiveRoles.ADManagement; 

Définir l'autorisation (en utilisant Add-QADPermission):

Get-QADUser UserName | Add-QADPermission -Account 'SELF' -Rights 'ReadProperty,WriteProperty' -Property 'servicePrincipalName' -ApplyTo 'ThisObjectOnly';