Windows PowerShell Automatisation utilisateur mise en service, la partie 4

Don Jones

Contenu

Choix en entrée
Lors du remplissage des groupes
Attributs supplémentaires
Prise de plus
Certains Thoughts final

Il s'agit de la conclusion d'une série de quatre dans lequel j'avez montré comment automatiser le processus de création de nouveaux utilisateurs dans Active Directory. Jusqu'ici, ai j'démontré comment créer nouvel utilisateur comptes Active Directory, de créer leurs dossiers de base et d'affecter des autorisations à ces dossiers de base. Je dois à présent, ajoutez les utilisateurs à des groupes de domaine et mettre à jour quelques attributs d'annuaire.

Pour actualiser rapidement votre mémoire, j'utilise une fonction maître pour coordonner tous ces efforts, qui J'AI expliqué dans la première partie de cette série. La fonction maître ressemble à ceci :

Function Provision {
  PROCESS {
    CreateUser $_
    CreateHomeFolder $_
    AddToGroups $_
    UpdateAttributes $_
  }
}

Dans la partie 2 de la série, J'AI créé la fonction CreateUser, et dans la partie 3, J'AI abordé la fonction CreateHomeFolder. Ce mois-ci, je traitent les fonctions AddToGroups et UpdateAttributes.

Choix en entrée

Quatre de mes fonctions obtenir une table de hachage qui contient des attributs utilisateur. Mon exemple d'origine, dans la partie 1, lire ces attributs d'un fichier CSV (valeurs Comma-Separated). Dans le temps, je n'a pas passent en quantité profondeur sur J'AI planifié pour transmettre le domaine groupes un utilisateur doit être ajouté à. Il existe de nombreuses manières que peut potentiellement faire cela. Par exemple, J'AI peut avoir mon fichier CSV inclure une colonne unique nommée groupes et remplir cette colonne avec certains liste délimité de noms, comme suit :

"Domain Users,Sales,Marketing,East"

Ou, J'AI peut comporter une colonne distincte dans le CSV pour chaque groupe et ensuite sur les données de lignes placer un 1 lorsque l'utilisateur doit appartenir à que groupe et un 0 pour les groupes si voulez je n'est pas que l'utilisateur appartenant au. Il est celui-ci dans le CSV :

Domain Users,Sales,Marketing,East
1,1,0,0
1,0,1,1

Je suppose que que la deuxième approche peut être plus facile pour une personne moins techniques (peut-être quelqu'un dans le département ressources humaines) à utiliser car il semble un peu plus comme une liste de contrôle. C'est également quelque chose vous pouvez facilement créer dans une table Microsoft Access ou une feuille de calcul Microsoft Excel et puis exporter vers un fichier CSV, conserver ce format. Ainsi, pour que cet exemple, je vais à associer à la deuxième mise en page.

En tant que pour les « attributs supplémentaires », je continuerai Supposons que ceux proviennent des colonnes spécifiques dans le fichier CSV. Par exemple, si je souhaite remplir l'attribut postalCode, puis nous allons Supposons que j'ai inclus une colonne appropriée dans le fichier CSV, et que ma fonction d'importation (que J'AI décrit dans la première partie de cette série) lit cette colonne dans la table de hachage ainsi les autres colonnes.

Qui dit que ma table de hachage peut contiennent quelque chose comme userinfo $ ['Utilisateurs du domaine'], qui serait 1 si je que l'utilisateur appartient à ce groupe. La table de hachage peut également contenir $ userinfo ['postalCode'] avec la valeur appropriée pour chaque nouvel utilisateur.

Lors du remplissage des groupes

Ma fonction AddToGroups doit prendre en charge tous les groupes possibles qui peuvent être répertoriées dans mon fichier d'entrée. J'en fait juste vais pour vérifier chaque groupe si cet utilisateur a un 1 ou 0, et si l'utilisateur a un 1, puis je vais ajouter l'utilisateur du groupe. Étant donné que le numéro 0 est généralement synonyme de la valeur booléenne False, lors de tout non - zéro (tel que 1) est synonyme avec la valeur True, qui rendra les comparaisons assez simple. Ainsi, la fonction ressemble à ceci :

Function AddToGroup {
  Param($userinfo)
  If ($userinfo['Sales']) { Add-QADGroupMember 
    -identity 'DOMAIN\Sales' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['East]) { Add-QADGroupMember 
    -identity 'DOMAIN\East' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['Marketing]) { Add-
    QADGroupMember 
    -identity 'DOMAIN\Marketing' 
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
}

Et ainsi de suite. N'oubliez pas que nous utilisons toujours les cmdlets d'Active Directory de Quest, sont libres de www.quest.com/PowerShell.

Code répétitif toutes les bogues me. Je pense que je souhaite faire est au lieu de cela créer un tableau de noms de groupes possibles et puis énumérer ce groupe. De cette façon, Ajout et suppression des groupes à l'avenir ne nécessitent me copiez et collez le code, J'AI devrez seulement modifier le tableau. Donc maintenant la fonction ressemble à ceci :

Function AddToGroup {
  Param($userinfo)
    $groups = 'Sales','Marketing','East'
  Foreach ($group in $groups) {
    If ($userinfo[$group]) { 
      Add-QADGroupMember
        -identity 'DOMAIN\'+$group
        -member ('DOMAIN\'+$userinfo
         ['samAccountName']) }
}
}

C'est un peu leaner et nettoyage, et il est facilement prendre en charge futures modifications.

Attributs supplémentaires

Enfin, je dois traitent des attributs supplémentaires que je veux définir. Ici, je vais utiliser la même approche : créer un tableau de noms attribut autorisée et puis énumérer ce groupe. Dans ce cas, je vais permettent une situation où un ou plusieurs attributs sont vide pour un utilisateur donné, comme suit :

Function UpdateAttributes {
  Param($userinfo)
    $attribs = 'postalCode','title',
      'physicalDeliveryOfficeName'
  Foreach ($attrib in $attribs) {
    If ($userinfo[$attrib] –ne '') {
      $update = @{$attrib=$userinfo
       ['attrib']}
    Set-QADUser
      -identity 'DOMAIN\'+$userinfo
       ['samAccountName'] 
      -objectAttributes $update
    }
  }
}

Étant donné que la cmdlet Set-QADUser accepte en fait une table de hachage pour le paramètre –objectAttributes, vous pourriez penser que je peut simplement flux qu'il la table de hachage $ userinfo. Cependant, j'avoir choses dans celle-ci, telles que des noms groupe, non des noms d'attribut Active Directory pour cette astuce ne voudriez pas travailler. En outre, je ne souhaite envoyer les attributs vides, et je que la capacité, comme je l'ai fait avec cette fonction, pour exécuter tout d'abord dans tous les attributs et puis mettre à jour uniquement les attributs ayant fait des valeurs dans le fichier CSV d'origine.

Prise de plus

Il existe évidemment beaucoup de choses que vous pouvez faire pour développer ce script. Voici quelques idées qui viennent à l'esprit :

  • Au lieu de récupérer les informations à partir d'un fichier CSV, vous pouviez l'obtenir d'une base de données (comme une base de données personnel). Vous devez juste remplacer la fonction Importer, comme indiqué dans la partie de cette série.
  • Vous pouvez effectuer d'autres tâches d'attribution de privilèges d'accès. Vous devez simplement ajouter d'autres fonctions à la fonction provision maître. Pensez à conserver chaque tâche principale dans sa propre fonction subordonnée et vous allez faciliter choses écrire, déboguer et tenez à jour.
  • Vous pouvez écrire un fichier journal d'activité de mise en service. Par exemple, vous pouvez utiliser Out-File pour ajouter le texte à un fichier journal de chacune des fonctions subordonnées.
  • En utilisant les techniques traités dans cette série, vous pouvez écrire un script reprovisioning à réaffecter des groupes, autorisations et attributs Active Directory lorsqu'un utilisateur déplace à un autre emplacement au sein de la société.

Windows PowerShell Forum aux questions

Q : Les produits Microsoft peuvent être gérées avec cmdlets Windows PowerShell ?

AActuellement, la liste inclut Exchange Server 2007, System Center Virtual Machine Manager, System Center Operations Manager et System Center Data Protection Manager. SQL Server 2008 inclut également certaines cmdlets Windows PowerShell, bien qu'ils vous adaptés largement l'activation de l'exécution d'instructions Transact-SQL (Transact-SQL est le langage de script natif dans SQL Server).

Mais il n'y a aucune raison d'arrêter il. Vous pouvez également gérer Active Directory avec un ensemble libre de cmdlets de www.quest.com/PowerShell; cmdlets pour les services Internet (IIS) 7.0 sont en cours de développement ; et il sont cmdlets même pour les produits non Microsoft, comme VMWare, IBM WebSphere MQ, etc.. Vous pouvez également utiliser des outils de ligne de commande existants pour gérer les composants Windows, tels que IIS, DNS, DHCP, le Pare-feu Windows et bien plus encore.

Certains Thoughts final

J'espère que vous trouverez le script terminé et toutes ses fonctions subordonnées pour être, au minimum, un point de départ utile dans Création de vos propres scripts d'attribution de privilèges d'accès. Par l'intermédiaire de conclusion, je souhaite proposer quelques commentaires sur des décisions Qu'avez apportées dans.

J'AI choisi d'utiliser hashtables pour les informations utilisateur plutôt que des objets personnalisés car hashtables fournissent un moyen un peu plus simple pour énumérer à travers un ensemble de propriétés lorsque j'ignorez à l'avance quels seront toutes ces propriétés. En d'autres termes, hashtables sont un peu plus faciles à utiliser lorsque je sais que je besoin ajouter davantage d'attributs, et je ne peut-être pas utiliser les mêmes attributs de chaque fois que j'exécuter le script.

J'AI choisi d'utiliser cacls.exe pour modifier les autorisations de dossier car, comme J'AI décrit dans la partie 3 de cette série, il est simplement plus facile que le shell *-cmdlets de listes de contrôle d'accès. En outre, à l'aide de cacls.exe m'a permis illustrer une façon de vous pouvez paramétrer des outils de ligne de commande externes à l'aide de variables d'environnement.

J'AI choisi d'utiliser de Quest cmdlets d'Active Directory plutôt que ADSI parce que les cmdlets offrir que J'AI pensé une approche plus natif pour manipuler le répertoire dans Windows PowerShell. ADSI peut être une difficulté pour travailler avec, et vous pour utiliser un style de programmation plus procédural sur le style de commande-centrée sur que j'ai pu utiliser dans cet exemple.

Si vous choisissez de prendre les décisions mêmes pour vos scripts, ou non J'espère que vous trouverez ces techniques et approches différentes utile pour résoudre des défis votre automatisation administrative. J'AI également vous invitons à partager vos suggestions et les améliorations avec moi. Sur mon site Web, ConcentratedTech.com, vous trouverez une page contact vous êtes de M'envoyer un message électronique. Et, veillez me permettant de savoir si partager vos commentaires dans un futur de TechNet Magazine.

Don Jones est cofondateur de Technologie concentrée, où il blogs hebdomadaires sur Windows PowerShell, SQL Server, Application-V et d'autres rubriques. Contacter par le biais de son site Web.