IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Lister les Unités d'organisation d'un domaine AD non connu à l'avance .. [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 15
    Par défaut Lister les Unités d'organisation d'un domaine AD non connu à l'avance ..
    Bonjour à tous,

    Etant formateur pour Windows 2008 R2 Serveur , je voudrais lancer un script Powershell sur chaque machine de mes élèves qui "scanne" les OU d'un domaine AD.
    Le but étant de reproduire l'arborescence qui se trouve dans 'utilisateurs et ordinateurs active Directory".
    Exemple d'arborecence d'OU (noms d'OU fictifs) :

    Groupes-DL
    ||
    ===> Groupes-01

    Entreprise-X
    ||
    ===> DRH
    ||
    ===> Production
    ||
    ===> Outils



    J'ai donc opté pour une boucle récursive qui scanne les OU du domaine, voici mon script :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # Import du module AD
    Import-Module ActiveDirectory
     
    # Récupération du DN du domaine courant
    $dom = (Get-AdDomainController).defaultpartition
     
    function Scan-OU
    {
        param
        (
        [Parameter(Mandatory=$true)][string]$PATH
        )
     
    	$ou = Get-ADOrganizationalUnit -filter * -SearchBase $path -SearchScope onelevel
     
    	Foreach ($item in $ou)
    	{
    		if ($item.name -ne "Domain Controllers")
            {
                if ($item.name -ne $null)
                {
                write-host $item.name
                }
            }
        }
    write-host
    if ($item.name -ne $null)
    {
    Scan-OU -path $item.DistinguishedName
    }
    }
     
    Scan-ou -path $dom
    Résultat :
    le script fonctionne mais me liste les OU de la façon suivante:

    Groupes-DL
    Entreprise-X

    Groupes-01
    DRH
    Production

    Outils

    je sens que je ne suis pas loin , il me manque l'affichage et le décalage des "||" et des "====>"

    Merci d'avance pour votre éventuelle aide..
    Gros Bisous.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Il nous faut connaitre le niveau de l'OU pour la mise en page.

    J'ai modifié légèrement la logique de récursivité et devine le niveau à partir du nombre "\" présent dans la propriété "CanonicalName".
    Je n'ai pas d'AD sous la main aussi ce code est à débuger/adapter.


    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    # Import du module AD
    Import-Module ActiveDirectory
     
    # Récupération du DN du domaine courant
    $dom = (Get-AdDomainController).defaultpartition
     
    function Scan-OU
    {
    	param
    	(
    	[Parameter(Mandatory=$true)][string]$PATH
    	)
     
    	$ou = Get-ADOrganizationalUnit -filter * -SearchBase $path -SearchScope onelevel -Properties CanonicalName, name, DistinguishedName
     
    	Foreach ($item in $ou)
    	{
    		if ($item.name -ne "Domain Controllers" -and $item.name -ne $null)
    		{
    			$level = ($item.CanonicalName.Split("\\")).count - 1
     
    			if ($level -eq 0)
    			{
    				write-host $item.name
    			}
    			else
    			{
    				write-host "||".PadLeft($level * 5, " ")
    				write-host ("===> " + $item.name).PadLeft($level * 5, " ")
    			}
     
    			Scan-OU -path $item.DistinguishedName
     
    			if ($level -eq 0)
    			{
    				write-host
    			}
    		}
     
    	}
    }
     
    Scan-ou -path $dom

  3. #3
    Membre averti
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 15
    Par défaut
    Salut ericlm128,

    merci de ta réponse,

    voila ce que me script m'affiche :
    Groupes-DL
    Groupes-01

    Entreprise-X
    DRH
    Production
    Outils

    j'ai testé il me scanne bien l'arbo mais ne m'affiche pas les "||" et les "=====>" et donc ne décale pas...
    je bosse un peu ça pour essayer de décaler et je reviens vers toi...

    N.B super idée de compter les \ dans la propriété "CanonicalName"

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ok comme ci que $level valait toujours 0.
    Essai avec un seul \ peut être dans ...Split("\"))... ou en l’échappent ...Split("`\"))...

    Je ne suis pas un féru de PowerShell mais l'idée est la.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Quoique non sinon tu aurai toujours le retour ligne ... faut tester en pas à pas je pense.

  6. #6
    Membre averti
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 15
    Par défaut
    oui j'ai testé le compteur est tjs egal à o donc il n'execute pas le if et n'afiche pas les "||" et les "====>"

  7. #7
    Membre averti
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 15
    Par défaut
    il me faudrait un autre compteur...

  8. #8
    Membre averti
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 15
    Par défaut
    pff marche pas avec un compteur..

    3 semaines a bosser sur ce truc.. j'abandonne.

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Voici, j'ai testé pour toi sur mon AD et corrigé le script

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    # Import du module AD
    Import-Module ActiveDirectory
     
    # Récupération du DN du domaine courant
    $dom = (Get-AdDomainController).defaultpartition
     
    function Scan-OU
    {
    	param
    	(
    	[Parameter(Mandatory=$true)][string]$PATH
    	)
     
    	$ou = Get-ADOrganizationalUnit -filter * -SearchBase $path -SearchScope onelevel -Properties CanonicalName, name, DistinguishedName
     
    	Foreach ($item in $ou)
    	{
    		if ($item.name -ne "Domain Controllers" -and $item.name -ne $null)
    		{
    			$level = ($item.CanonicalName.Split("/")).count - 2
     
    			if ($level -eq 0)
    			{
    				write-host $item.name
    			}
    			else
    			{
    				write-host $((" " * ($level * 5)) +"||")
    				write-host $((" " * ($level * 5)) + "===> " + $item.name)
    			}
     
    			Scan-OU -path $item.DistinguishedName
     
    			if ($level -eq 0)
    			{
    				write-host
    			}
    		}
     
    	}
    }
     
    Scan-ou -path $dom

  10. #10
    Membre averti
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 15
    Par défaut
    Salut ,

    merci d'avoir cherché pour moi.
    Du coup j'ai modifié aussi et j'ai travaillé sur la virgule du DN..
    Ca marche aussi,

    Au cas ou voila le code :


    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function Scan-OU
    {
    	param
    	(
    	[Parameter(Mandatory=$true)][string]$path
    	)
     
    	$ou = Get-ADOrganizationalUnit -filter * -SearchBase $path -SearchScope onelevel
     
    	Foreach ($item in $ou)
    	{
    		if ($item.name -ne "Domain Controllers" -and $item.name -ne $null)
    		{
            $level = ($item.DistinguishedName.Split(",").count - $leveldom)
     
    			if ($level -eq 1)
    			{
    			write-host $item.name
    			}
    			else
    			{
                #write-host "||".PadLeft($level * 5, " ")
    			write-host ("     ===> " + $item.name).PadLeft($level+$level*8)
    			}
     
    			Scan-OU -path $item.DistinguishedName
            }
     
        }
    }



    J'ai testé le tiens il fonction enickel aussi..

    Merci d'avoir pris du temps pou rmoi.
    Résolu et bonne soirée..

    Valéry,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lister les ordinateurs d'un domaine
    Par dimainfo dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2011, 15h53
  2. Lister les domaines d'une adresse IP
    Par Fobec dans le forum Langage
    Réponses: 0
    Dernier message: 01/07/2010, 15h18
  3. Réponses: 0
    Dernier message: 20/04/2010, 14h14
  4. [VB6] Comment lister les serveurs SQL d'un domaine ?
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/01/2004, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo