ADInit : un script PowerShell pour déployer une organisation dans AD

Quand il s’agit de déployer une organisation complète dans un annuaire Active Directory (OU, Groupes, délégations, etc.), il est souvent impensable de faire ça  à la main dans la console d’administration AD de la MMC ou autre navigateur LDAP. Et à moins d’embaucher des chinois dans un cave, pour créer les quelques centaines d’objets dans AD, la solution passe généralement par un script.

Oui mais voilà, généralement on créé des structures relativement identiques, et si on pouvais disposer d’un script suffisamment générique pour créer tout ça ?

Eh bien oui c’est possible, voilà donc un script PowerShell à base de PS 2.0, qui reçoit en entrée un fichier texte décrivant les opérations à faire dans l’annuaire AD de son choix. Ce script m’a été inspiré par un script VBS que j’ai eu l’occasion d’utiliser il y a bientôt deux ans dans un grand groupe international, merci à l’auteur de ce premier script dont j’ai malheureusement complétement oublié le nom Oo.

J’ai créé une page dédiée à ce script, n’hésitez pas à l’utiliser et à me faire part de vos remarques ^^

La page du script ADInit : ADInit

La page de téléchargement : ADInit Download

Protéger un objet des suppressions accidentelles avec PowerShell

Lorsque l’on utilise PowerShell pour créer des objets dans ActiveDirectory, il peut être intéressant dans le cas d’une OU ou d’un container d’appliquer le paramètres de Protection de l’objet des suppressions accidentelles, comme le fait si bien la case à cocher disponible dans la MMC.

Bon, une case à cocher c’est très bien, mais quand on viens de faire un joli script qui nous créé en une seule passe les 150 OU de notre organisation AD, quand viens le moment de cocher 150 cases il viens comme une envie de se pendre (surtout qu’avant d’atteindre la case à cocher il aura fallu malmener sérieusement le clic gauche de la souris -_-)

En réalité, derrière cette case à cocher se cache trois ACE très simples, l’octroi du refus pour le groupe Builtin « Tout le monde » sur l’objet en question:

  • Delete
  • DeleteChild
  • DeleteTree

Maintenant il ne me reste plus qu’à vous montrer comment appliquer des ACE sur un objet de l’AD avec un script PowerShell.

Read More

Authentification SSH sans mot de passe par échange de clefs RSA

Lorsque l’on se connecte en SSH sur une machine Linux (ou Unix) pour effectuer des commandes à distance depuis un script ou pour effectuer des tâches administratives, il peut être très intéressant d’éviter d’utiliser une authentification par mot de passes, souvent simplistes. D’autant plus dans le cas de script, ou même lorsque l’on utilise des mot de passes élaborés, il est souvent nécessaire de mettre le mot de passe dans le script, donc en clair, ce qui évidement rend inutile le fait d’utiliser des mot de passes élaborés.

L’utilisation de Kerberos ou de certificats peut palier l’utilisation de mot de passes et donc rendre l’authentification bien plus sécurisée. Une autre alternative et l’utilisation de clefs RSA pour l’authentification SSH. L’authentification RSA pour les connexions SSH se basent sur un échange de clefs et la signature de jetons d’authentification au moment de la connexion.

Read More

Comment manipuler simplement une SecureString en PowerShell

Lorsque l’on écrit un script PowerShell il y a toujours un moment où l’on préfèrera demander une authentification utilisateur par prompt plutôt que de mettre un mot de passe en dur dans le code (sisi c’est mieux :) )

Sauf que lorsque l’on veut demander un mot de passe à l’utilisateur il n’y a pas dix mille façon de le faire proprement : il faut le stocker dans une chaîne de type System.Security.SecureString

Ok… C’est super… Mais comment faire pour ensuite donner ce mot de passe en paramètre à des fonctions ou actions puisque le contenu de ce chaîne est haché ?

Et bien pour effectuer un reverse du hash il existe une classe : System.Runtime.InteropServices.Marshal

Read More

Utiliser les GPO de préférence pour personnaliser l’affichage Explorer

Si comme moi vous en avez marre, à chaque fois que vous utilisez une nouvelle VM d’un serveur Windows ou d’une station, de systématiquement modifier les paramètres d’affichage de l’Explorateur et de modifier ces foutus paramètres d’Economiseur d’écran qui vous mettent en pause les machines : alors voici LA solution pour personnaliser l’Explorer par GPO.

En effet si l’utilisateur lambda n’a aucune envie de voir les fichiers cachés du système, ni les extensions de fichiers, mon sang de Geek m’oblige à aller paramétrer tout ca à chaque fois que je me fait une VM Windows (et d’ailleurs ces pareils pour les machines physiques dans l’absolue). Lorsque l’on travaille au quotidien sur des environnement de démo ou de qualification, il est pénible de reparamérter tout ca à chaque fois.

Voici donc une astuce pour le faire ue bonne fois pour toute pour un environnement AD, et le tout par GPO évidement ;)

Read More

Ajuster la durée de rétention des ressources dans le portail FIM

Par défaut la durée de rétention des ressources système est de 30 jours, cette valeur ne peut être modifiée pas même par les administrateurs du portail sans avoir au préalable créé une MPR appropriée. Cette durée de 30 jours peut provoquer un alourdissement de la base de données important selon le nombre de synchronisations et la fréquence de celles-ci. De manière générale une période de 48h est plus raisonnable, mais cette valeur doit être ajustée en fonction de vos besoins.

NOTE : La durée de rétention des ressources système permet de marquer toutes les ressources créées dans le portail d’une date d’expiration : cette date correspondant à la date de création plus la durée de rétention.

Read More

Sauvegarde et restauration de la configuration d’un serveur FIM Service

Microsoft fournit des Cmdlets Powershell permettant d’exporter et d’importer la configuration d’un serveur FIM Service. Ces commandes sont inclus dans le module FIM Automation pour Powershell et sont fort utile pour : sauvegarder la configuration, restaurer la configuration, migrer la configuration, ou encore exporter et importer des ressources dans le portail FIM.

Les Cmdlets disponibles sont les suivants :

Compare-FIMConfig : Compare les attributs de ressources FIM et retourne une liste des changements à effectuer.
ConvertFrom-FIMResource : Sérialise une ressource FIM et l’exporte sous forme d’un fichier XML (converti une ressource en XML).
ConvertTo-FIMResource : Désérialise une ressource FIM depuis un fichier XML donné (converti des données XML en une ressource).
Export-FIMConfig : Exporte les ressources FIM de configuration depuis FIM Service (appel au Web Service FIM).
Import-FIMConfig : Importe une liste de changement dans FIM Service en utilisant le Web Service.
Join-FIMConfig : Joint deux listes d’objets de type ressource FIM en utilisant un ou plusieurs critères de rapprochement.

Grâce à ces Cmdlets il est possible de faire une sauvegarde de la configuration de FIM Service ou de restaurer cette configuration. Il est possible également de migrer la configuration d’un serveur vers un autre, par exemple pour appliquer des changements effectués sur un serveur de développement sur un serveur de production.

Vous trouverez des exemples de script que j’ai écrit sur la page code source de ce site. Notamment les scripts s’inspirant des exemples du Technet et s’intitulant : Backup-FIM-Configuration et Restore-FIM-Configuration

Vous trouverez également de nombreux exemples sur les différents liens du technet et sur la FIM Scriptbox du Forum FIM :

Configurer l’utilisation de la mémoire de SQL Server

On se demande parfois pourquoi un serveur sur lequel tourne une instance SQL Server rame abominablement alors que l’on a aujourd’hui des machines puissantes. Vous avez beau mettre des sommes importantes dans une machine et vous enorgueillir de ce beau serveur quadri-processeur multi coeurs avec 8Go de RAM ou plus, dès que vous utilisez SQL les performances de votre serveur de course sont quasi nulles. Et pour cause…

Il existe un paramètre dans SQL Server qui indique quelle est la quantité maximale de mémoire que peux allouer SQL, par défaut ce paramètre est positionné à 2 To !

Il est donc fortement recommandé de modifier ce paramètre et de le positionner à une valeur adaptée à la machine exécutant SQL Server. La commande magique est la suivante :

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 2048;
GO
RECONFIGURE;
GO

Vous noterez que l’on donne la quantité de mémoire maximale en Mo, ici 2048 pour 2Go de mémoire. C’est une valeur que j’ai l’habitude de positionner pour un serveur disposant de 4Go de RAM hébergeant SQL Server 2008 et FIM Synchronization Service. Bien entendu, en production si vous disposez d’un serveur plus puissant il faut augmenter ce paramètres, un bon début est de positionner cette valeur à 60% de la quantité de mémoire physique, mais je laisse le soin à votre DBA de vous conseiller sur la meilleure valeur ;)

Réindexation des bases de données FIM 2010

Lorsqu’une base de données SQL traite de nombreuses transactions, il s’en suit une fragmentation des données, à la manière des informations écrites sur un disque dur. Dans le cas des bases de données FIM Service et FIM Synchronization Service utilisées par FIM 2010, cela peut entrainer un timeout lors du traitement des synchronisation ou lorsque l’on effectue des requêtes de recherche dans le portail FIM.

Pour éviter ce genre de désagrément il est fort utile de ré-indexer régulièrement les bases de données utilisées par FIM 2010. Et comme on est tous un peu fainéant, le mieux est encore de charger SQL de le faire tout seul avec un Job planifié.

Read More

Astuce pour tester les filtres XPath dans FIM 2010

N’étant pas un génie du langage XPath j’ai souvent besoin de tester mes filtres XPath pour vérifier leur bonne syntaxe.

Lorsque l’on définit les critères d’un Ensemble (ou Set), il existe plusieurs cas où une définition est impossible à décrire avec le formulaire, il est donc nécessaire d’écrire un filtre XPath et de l’insérer directement dans l’attribut Filter d’une Ressource de type Set (disponible dans les attributs étendus de la vue avancée) entre les balises <filter></filter>.

D’abord tenté par écrire un script PowerShell permettant de tester les filtres XPath, par manque de temps je me suis tourné vers une autre solution : utiliser  l’aperçu du formulaire des Ressources de type Search Scope .

Read More