Question
AD OU Keep tree order
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 11 ans 6 mois #18578
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:AD OU Keep tree order
Un oubli.
Une autre possibilité est de redéfinir la méthode ToString() :
[code:1]
$Obj=1|select Name,count
$Obj.Name='c:\temp'
$Obj.Count=0
Add-Member -InputObject $Obj -MemberType ScriptMethod -Name ToString -Value { $this.Name } -Force
$Obj|dir
[/code:1]
Dans certains cas et en dernier recours cela peut servir.
Une autre possibilité est de redéfinir la méthode ToString() :
[code:1]
$Obj=1|select Name,count
$Obj.Name='c:\temp'
$Obj.Count=0
Add-Member -InputObject $Obj -MemberType ScriptMethod -Name ToString -Value { $this.Name } -Force
$Obj|dir
[/code:1]
Dans certains cas et en dernier recours cela peut servir.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Dela
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 47
- Remerciements reçus 0
il y a 11 ans 6 mois #18580
par Dela
Réponse de Dela sur le sujet Re:AD OU Keep tree order
Laurent je t'en prie ne t'excuse pas !!!
Il n'y a aucune perte de temps !! Au contraire ! Tout ce que je vois me servira tôt ou tard et je vous remercie encore pour le partage de vos connaissances !!
J'ai fait un beau printscreen tout à l'heure ! Il ne s'est pas joint ! Dommage !! j'ai quitté le travail là ! Je fais mon menage et je me remets dessus ! je vais finir de creer mon arborescence ( hier KO j'ai pas terminé ) à la maison ! pour les Printscreen ca sera bcp plus claire car je n'aurais pas à cacher les infos de mon ad .... ca restera lisible oD
Je pense que j'ai emmelé les crayons à tlm à partir du moment ou l'on a refait le script !
Pour bien faire je vais finir mon arbo ! executer le script, faire des printscreen, mon export csv ae ce qui me va et ce qui ne me va pas ! et vous expliquer CLAIREMENT ce qu'il me faut , je sais qu'on a tous les éléments là ! Et je pense qu'avec mes histoires de LVL on a rajouté une couche inutile ;oD j'en suis dsl ! Je vous dis à plus tard.
Je vais prendre le tps de le faire bien
Il n'y a aucune perte de temps !! Au contraire ! Tout ce que je vois me servira tôt ou tard et je vous remercie encore pour le partage de vos connaissances !!
J'ai fait un beau printscreen tout à l'heure ! Il ne s'est pas joint ! Dommage !! j'ai quitté le travail là ! Je fais mon menage et je me remets dessus ! je vais finir de creer mon arborescence ( hier KO j'ai pas terminé ) à la maison ! pour les Printscreen ca sera bcp plus claire car je n'aurais pas à cacher les infos de mon ad .... ca restera lisible oD
Je pense que j'ai emmelé les crayons à tlm à partir du moment ou l'on a refait le script !
Pour bien faire je vais finir mon arbo ! executer le script, faire des printscreen, mon export csv ae ce qui me va et ce qui ne me va pas ! et vous expliquer CLAIREMENT ce qu'il me faut , je sais qu'on a tous les éléments là ! Et je pense qu'avec mes histoires de LVL on a rajouté une couche inutile ;oD j'en suis dsl ! Je vous dis à plus tard.
Je vais prendre le tps de le faire bien
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 5 mois #18582
par Philippe
Réponse de Philippe sur le sujet Re:AD OU Keep tree order
Merci Laurent pour cette formation qui est ta marque de fabrique et ce qui y a de bien chez toi !! 
pour alexis
si j'ai bien compris (apres quelques tests sur mon AD)
le script fonctionne bien et le résultat est bon, mais dans le désordre (les différentes arborescence sont mélangé).
D'après ce que je vois Get-ADOrganizationalUnit renvoie les infos dans l'ordre d'ajout dans l'AD, ce qui avec le temps n'est plus bon.
Pour ne pas compliqué le script la première idée qui me viens s'est de triée la sortir de Get-ADOrganizationalUnit sur distinguishedname avec une fonction du type :
[code:1]$String = \"'OU=AsiaPacific,OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM'\"
([regex]::Matches($String,'.','RightToLeft') | ForEach {$_.value}) -join ''
# ou
$String = \"'OU=AsiaPacific,OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM'\"
$String = $String.ToCharArray()
[Array]::Reverse($String)
-join $String
# resultat 'MOC=CD,MAKIRBAF=CD,stnuoccAresU=UO,selaS=UO,cificaPaisA=UO'[/code:1]
pour que le trie soit bon !!
.
pour alexis
si j'ai bien compris (apres quelques tests sur mon AD)
le script fonctionne bien et le résultat est bon, mais dans le désordre (les différentes arborescence sont mélangé).
D'après ce que je vois Get-ADOrganizationalUnit renvoie les infos dans l'ordre d'ajout dans l'AD, ce qui avec le temps n'est plus bon.
Pour ne pas compliqué le script la première idée qui me viens s'est de triée la sortir de Get-ADOrganizationalUnit sur distinguishedname avec une fonction du type :
[code:1]$String = \"'OU=AsiaPacific,OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM'\"
([regex]::Matches($String,'.','RightToLeft') | ForEach {$_.value}) -join ''
# ou
$String = \"'OU=AsiaPacific,OU=Sales,OU=UserAccounts,DC=FABRIKAM,DC=COM'\"
$String = $String.ToCharArray()
[Array]::Reverse($String)
-join $String
# resultat 'MOC=CD,MAKIRBAF=CD,stnuoccAresU=UO,selaS=UO,cificaPaisA=UO'[/code:1]
pour que le trie soit bon !!
.
Connexion ou Créer un compte pour participer à la conversation.
- Dela
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 47
- Remerciements reçus 0
il y a 11 ans 5 mois #18583
par Dela
Réponse de Dela sur le sujet Re:AD OU Keep tree order
Bonjour, Désolé des urgences au taf, je dois laisser POWershell de coté qqes heures !
Enfait le resultat sort dans le desordre d'ou le fait dans mon tout premier script d'inserer les elements à chaques iteration au tableau !!
l'autre probleme est que les elements du searchscope LVL1 sont repassé au LVL2 et j'ai donc des doublons.
Enfait il me faut dans mon csv ( l'ordre des données est important car lié à de la facturation )
LVL1A TOTAL ENABLED DISABLED
LVL2de11 \" \"
LVL1B \" \"
LVL2de1B \" \"
je prends le temps des que je peux de faire les printscreen promis ! la je dois revoir des bornes créées en AutoIT ;oD je change de langage ! A plus tard je reviens rapidement vers vous !
Enfait le resultat sort dans le desordre d'ou le fait dans mon tout premier script d'inserer les elements à chaques iteration au tableau !!
l'autre probleme est que les elements du searchscope LVL1 sont repassé au LVL2 et j'ai donc des doublons.
Enfait il me faut dans mon csv ( l'ordre des données est important car lié à de la facturation )
LVL1A TOTAL ENABLED DISABLED
LVL2de11 \" \"
LVL1B \" \"
LVL2de1B \" \"
je prends le temps des que je peux de faire les printscreen promis ! la je dois revoir des bornes créées en AutoIT ;oD je change de langage ! A plus tard je reviens rapidement vers vous !
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 5 mois #18584
par Philippe
Réponse de Philippe sur le sujet Re:AD OU Keep tree order
la solution est dans la propriété canonicalName de Get-ADOrganizationalUnit :
[code:1]Get-ADOrganizationalUnit -filter * -property canonicalName | sort canonicalName[/code:1]
ton script initial devient donc :
[code:1]
[array]$table = @()
Get-ADOrganizationalUnit -filter * -SearchBase \"OU=Utilisateurs_Groupes;OU=MONAD,dc=MONDOMAINE,dc=COM\" -SearchScope 2 -property canonicalName |
where {$_.name -ne 'Utilisateurs' -and $_.name -ne 'Groupes'} | sort canonicalName | Foreach {
[string]$Name = $_.canonicalName
write-Host \"Nom : \"$name $_.distinguishedname
$obj = New-Object PSObject #objet PS contenant les résultats des requetes
$obj | Add-Member Noteproperty \"Name\" $Name
$u=Get-ADUser -filter * -searchbase $_.distinguishedname -ResultPageSize 5000 -resultSetSize 5000
$total=($u | measure-object).count
$obj | Add-Member Noteproperty \"TotalUsers\" $Total
$enabled=($u | where {$_.Enabled -eq $true} | Measure-Object).count
$obj | Add-Member Noteproperty \"Enabled\" $Enabled
$Disabled=($u | where {$_.Enabled -eq $false} | Measure-Object).count
$obj | Add-Member Noteproperty \"Disabled\" $Disabled
$NotSpec=$total-$enabled-$disabled
$obj | Add-Member Noteproperty \"NotSpec\" $NotSpec
$table+=$obj
}
$Table | Export-csv c:\test.csv
$Table | ft
[/code:1]<br><br>Message édité par: 6ratgus, à: 10/12/14 14:13
[code:1]Get-ADOrganizationalUnit -filter * -property canonicalName | sort canonicalName[/code:1]
ton script initial devient donc :
[code:1]
[array]$table = @()
Get-ADOrganizationalUnit -filter * -SearchBase \"OU=Utilisateurs_Groupes;OU=MONAD,dc=MONDOMAINE,dc=COM\" -SearchScope 2 -property canonicalName |
where {$_.name -ne 'Utilisateurs' -and $_.name -ne 'Groupes'} | sort canonicalName | Foreach {
[string]$Name = $_.canonicalName
write-Host \"Nom : \"$name $_.distinguishedname
$obj = New-Object PSObject #objet PS contenant les résultats des requetes
$obj | Add-Member Noteproperty \"Name\" $Name
$u=Get-ADUser -filter * -searchbase $_.distinguishedname -ResultPageSize 5000 -resultSetSize 5000
$total=($u | measure-object).count
$obj | Add-Member Noteproperty \"TotalUsers\" $Total
$enabled=($u | where {$_.Enabled -eq $true} | Measure-Object).count
$obj | Add-Member Noteproperty \"Enabled\" $Enabled
$Disabled=($u | where {$_.Enabled -eq $false} | Measure-Object).count
$obj | Add-Member Noteproperty \"Disabled\" $Disabled
$NotSpec=$total-$enabled-$disabled
$obj | Add-Member Noteproperty \"NotSpec\" $NotSpec
$table+=$obj
}
$Table | Export-csv c:\test.csv
$Table | ft
[/code:1]<br><br>Message édité par: 6ratgus, à: 10/12/14 14:13
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 11 ans 5 mois #18587
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:AD OU Keep tree order
6ratgus écrit:
J'ai essayé de trier des nom OUs en l'état et en ajoutant d'autres informations, mais sans résultat :
[code:1]
Function New-OU{
param(
[Parameter(Mandatory=$True,position=0)]
$DN
)
[pscustomobject]@{
PSTypeName='OU';
DN=$DN;
Parent=$DN -replace '^OU=[^,]*,','';
Level=($DN -split ',').count
}
}# New-OU
$OUs=@(
(New-OU 'OU=SERVICE1,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=PRO1,OU=PRO,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=PRO2,OU=PRO,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=SERVICE1-A,OU=SERVICE1,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=SERVICE2,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=Public1,OU=Public,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=Public2,OU=Public,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=SERVICE3,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=Public3,OU=Public,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' )
)
[/code:1]
Le tri est basé sur l'ordre des caractères pas sur un ordre d'insertion.
Comme quoi de connaitre PS n'est pas suffisant, si on ne connait pas les objets qu'on manipule.
Bravo !la solution est dans la propriété canonicalName
J'ai essayé de trier des nom OUs en l'état et en ajoutant d'autres informations, mais sans résultat :
[code:1]
Function New-OU{
param(
[Parameter(Mandatory=$True,position=0)]
$DN
)
[pscustomobject]@{
PSTypeName='OU';
DN=$DN;
Parent=$DN -replace '^OU=[^,]*,','';
Level=($DN -split ',').count
}
}# New-OU
$OUs=@(
(New-OU 'OU=SERVICE1,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=PRO1,OU=PRO,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=PRO2,OU=PRO,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=SERVICE1-A,OU=SERVICE1,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=SERVICE2,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=Public1,OU=Public,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=Public2,OU=Public,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=SERVICE3,OU=Siege,OU=UserAccounts,DC=FABRIKAM,DC=COM' ),
(New-OU 'OU=Public3,OU=Public,OU=SiteExt,OU=UserAccounts,DC=FABRIKAM,DC=COM' )
)
[/code:1]
Le tri est basé sur l'ordre des caractères pas sur un ordre d'insertion.
Comme quoi de connaitre PS n'est pas suffisant, si on ne connait pas les objets qu'on manipule.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.047 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- AD OU Keep tree order