Question
rediriger resultat get-gpinheritance vers fichier
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
Donc :
[code:1]$objGPO = foreach ($_.distinguishedname in $listPcs) {
Get-GPInheritance -target $_.distinguishedname -Domain contoso.com |
where {$_.gpolinks -ne \"{}\"}
}
$objGPO | Select-Object Name, ContainerType, Path, GpoInheritanceBlocked, GpoLinks, InheritedGpoLinks |
export-csv c:\scripts\liste_pcs.txt -NoTypeInformation[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Steinfield
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Comme je te l'indiquais au départ, il faut utiliser le paramètre '-NoTypeInformation'.
Donc :
[code:1]$objGPO = foreach ($_.distinguishedname in $listPcs) {
Get-GPInheritance -target $_.distinguishedname -Domain contoso.com |
where {$_.gpolinks -ne \"{}\"}
}
$objGPO | Select-Object Name, ContainerType, Path, GpoInheritanceBlocked, GpoLinks, InheritedGpoLinks |
export-csv c:\scripts\liste_pcs.txt -NoTypeInformation[/code:1]
Oui, j'ai appliqué ce paramètre et il enlève effectivement la première ligne. Encore une fois merci pour çà.
Par contre mon problème est dans le fichier, comme indiqué ci-dessous :
#TYPE Microsoft.GroupPolicy.Som
\"GpoInheritanceBlocked\",\"Name\",\"Path\",\"ContainerType\",\"GpoLinks\",\"InheritedGpoLinks\"
\"False\",\"pcs\",\"ou=pcs,dc=contoso,dc=com\",\"OU\",\"Microsoft.GroupPolicy.GpoLinksCollection\",\"Microsoft.GroupPolicy.GpoLinksCollection\"
C'est à la ligne 3 que \"Microsoft.GroupPolicy.GpoLinksCollection\" apparait et que je n'obtiens pas la valeur souhaitée {PCS}.
Je cherche à savoir comment pouvoir récupérer la bonne valeur comme avec la cmdlet \"out-file\"
Merci.
Bonne soirée.<br><br>Message édité par: steinfield, à: 12/10/11 21:53
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
\"Microsoft.GroupPolicy.GpoLinksCollection\"
Il s'agit d'une collection et il faut donc énumérer les membres de cette collection pour pouvoir les récupérer dans le csv.
J'ai retrouvé un article qui traite exactement de ce sujet (merci Google et merci Daniel Lange !) :
daniellange.wordpress.com/tag/ad-cmdlets/
Du coup, est-ce que cette ligne te suffirait ?
[code:1] Get-QADObject -type organizationalunit -sizelimit 0 -DontUseDefaultIncludedProperties | %{ (Get-GPInheritance -Target $_).GPOLinks } | select DisplayName,Enabled,Enforced,Target | Export-csv \"GPOLinkInfo.csv\" -NoTypeInformation[/code:1]
Sinon, pourrais tu STP poster la totalité de ton code ?
Aussi, je ne comprends pas pourquoi tu récupères des GPO à partir d'une liste de machines et non à partir d'une liste d'OU. Les GPO sont liées aux OU et non pas directement à des machines. De ce fait, il faut utiliser le distinguishedname de l'OU contenant la machine et non pas le distinguishedname de la machine elle-même, ce qui je pense éviterait d'avoir à préciser ' where {$_.gpolinks -ne \"{}\"}'.
Enfin, je vais faire quelques tests de mon côté et je reviendrai ici avec mon propre code.
@ +
Matthew BETTON<br><br>Message édité par: Matthew BETTON, à: 13/10/11 09:57
Connexion ou Créer un compte pour participer à la conversation.
- Steinfield
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Encore merci pour la réponse.
Effectivement je travaille sur les OUs.
Le but est de répliquer les OUs PC et les OUs users qui ont une GPO liée, dans une OU de test.
Les GPO doivent être copiées et renommées puis liées aux GPO de test.
Ci-dessous le code que j'ai commencé à écrire, sachant que je n'ai pas de notions en programmation (le code peut certainement être optimisé) :
[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy
# VARIABLE COMMUNE
$LISTEMesUSER = \"C:\Scripts\InOut\Mes_users_ou_list.txt\"
$LISTEUSERGPPATH = \"C:\Scripts\InOut\gppath.txt\"
$LISTEUSERGPLINK = \"C:\Scripts\InOut\gplinks.txt\"
$LISTENEWOUTEST = \"C:\Scripts\InOut\gpnewoupath.txt\"
$LISTEMesPC = \"C:\Scripts\InOut\Mes_pcs_ou_list.txt\"
$LISTEPCGPPATH = \"C:\Scripts\InOut\gppcpath.txt\"
$LISTEPCGPLINK = \"C:\Scripts\InOut\gppclinks.txt\"
$LISTEPCNEWOUTEST = \"C:\Scripts\InOut\gppcnewoupath.txt\"
# OU USER
Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase 'ou=Mes_users,dc=contoso,dc=com' -SearchScope Subtree | select-object DistinguishedName | Export-Csv $LISTEMesUSER -NoTypeInformation
$listOUusers = Import-Csv $LISTEMesUSER
$resultu = ForEach ($_.DistinguishedName in $listOUusers) {Get-GPInheritance -Target $_.DistinguishedName -Domain contoso.com | where {$_.Gpolinks -ne '{}'}}
$resultu | Select-Object path | Out-file $LISTEUSERGPPATH -Encoding unicode
$resultu | Select-Object GpoLinks | Out-file $LISTEUSERGPLINK -Encoding unicode
$bu = get-content $LISTEUSERGPPATH
$bu1 = get-content $LISTEUSERGPLINK
$cu = get-content $LISTEUSERGPPATH | foreach {$_ -replace \"{\",\"\"} | foreach {$_ -replace \"}\",\"\"} | select -skip 3 -Unique
$cu | Set-Content $LISTEUSERGPPATH
$cu1 = get-content $LISTEUSERGPLINK | foreach {$_ -replace \"{\",\"\"} | foreach {$_ -replace \"}\",\"\"} | select -skip 3 -Unique
$cu1 | Set-Content $LISTEUSERGPLINK
$du = foreach ($_ in $cu){$_.trim()}
$du | Set-Content $LISTEUSERGPPATH
$du1 = foreach ($_ in $cu1){$_.trim()}
$du1 | Set-Content $LISTEUSERGPLINK
$eu = Get-Content $LISTEUSERGPPATH | where { $_ -ne \"$null\"}
$eu | Set-Content $LISTEUSERGPPATH
$eu1 = Get-Content $LISTEUSERGPLINK | where { $_ -ne \"$null\"}
$eu1 | Set-Content $LISTEUSERGPLINK
$fu = Get-Content $LISTEMesUSER | foreach-object {$_ -replace(\",OU=Mes_Users,DC=contoso,DC=com\",\",OU=Mes_Users,OU=Mes_Test,DC=contoso,DC=com\"«»)} | select -skip 2 -Unique
$fu | Set-Content $LISTENEWOUTEST
# Get-Content $LISTENEWOUTEST | foreach-object {write-host \"foreach-object { dsadd ou '$_'}\"}
Get-Content $LISTENEWOUTEST | foreach-object { dsadd ou $_}
# OU PC
Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase 'ou=Mes_pcs,dc=contoso,dc=com' -SearchScope Subtree | select-object DistinguishedName | Export-Csv $LISTEMesPC -NoTypeInformation
$listOUpcs = Import-Csv $LISTEMesPC
$resultp = ForEach ($_.DistinguishedName in $listOUpcs) {Get-GPInheritance -Target $_.DistinguishedName -Domain contoso.com | where {$_.Gpolinks -ne '{}'}}
$resultp | Select-Object path | Out-file $LISTEPCGPPATH -Encoding unicode
$resultp | Select-Object GpoLinks | Out-file $LISTEPCGPLINK -Encoding unicode
$bp = get-content $LISTEPCGPPATH
$bp1 = get-content $LISTEPCGPLINK
$cp = get-content $LISTEPCGPPATH | foreach {$_ -replace \"{\",\"\"} | foreach {$_ -replace \"}\",\"\"} | select -skip 3 -Unique
$cp | Set-Content $LISTEPCGPPATH
$cp1 = get-content $LISTEPCGPLINK | foreach {$_ -replace \"{\",\"\"} | foreach {$_ -replace \"}\",\"\"} | select -skip 3 -Unique
$cp1 | Set-Content $LISTEPCGPLINK
$dp = foreach ($_ in $cp){$_.trim()}
$dp | Set-Content $LISTEPCGPPATH
$dp1 = foreach ($_ in $cp1){$_.trim()}
$dp1 | Set-Content $LISTEPCGPLINK
$ep = Get-Content $LISTEPCGPPATH | where { $_ -ne \"$null\"}
$ep | Set-Content $LISTEPCGPPATH
$ep1 = Get-Content $LISTEPCGPLINK | where { $_ -ne \"$null\"}
$ep1 | Set-Content $LISTEPCGPLINK
$fpu = Get-Content $LISTEMesPC | foreach-object {$_ -replace(\",OU=Mes_PCS,DC=contoso,DC=com\",\",OU=Mes_PCS,OU=Mes_Test,DC=contoso,DC=com\"«»)} | select -skip 2 -Unique
$fpu | Set-Content $LISTEPCNEWOUTEST
# Get-Content $LISTEPCNEWOUTEST | foreach-object {write-host \"foreach-object {dsadd ou $_}\"}
Get-Content $LISTEPCNEWOUTEST | foreach-object {dsadd ou $_}
[/code:1]
Je regarde ce que tu m'as fourni et je te tiens au courant.
Merci.
Bonne journée.
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
[code:1]
Import-Module ActiveDirectory
Import-Module grouppolicy
Function Get-GPInheritanceFromAllComputers(){
$listPcs = Get-ADComputer -filter *
$CptsList = @()
foreach ($Computer in $listPcs) {
$DN = $Computer.distinguishedname
$OU = $DN.replace(\"CN=$($Computer.Name),\",\"\"«»)
write-host $OU
try{
$GPInheritance = Get-GPInheritance -target $OU -ErrorAction Stop
}
catch{
#Write-Error \"Erreur lors de la récupération des liens GPO sur '$OU'\"
Continue
}
$GPOLinks = $GPInheritance.GpoLinks
$InheritedGpoLinks = $GPInheritance.InheritedGpoLinks
$objComp = New-Object PSObject -Property @{
\"ComputerName\" = $Computer.Name
\"OUName\" = $GPInheritance.Name
\"OUPath\" = $GPInheritance.Path
\"GpoInheritanceBlocked\" = $GPInheritance.GpoInheritanceBlocked
\"GpoLinks\" = \"\"
\"InheritedGpoLinks\" = \"\"
}
foreach($GPOLink in $GPInheritance.GPOLinks){
$objComp.GPOLinks += $GPOLink.Displayname + \" | \"
}
# Retrait du dernier '|' dans la chaine
$objComp.GPOLinks = ($objComp.GPOLinks).Substring(0,($objComp.GPOLinks).lastindexofany(\"|\"«»)-1)
foreach($InheritedGpoLink in $GPInheritance.InheritedGpoLinks){
$objComp.InheritedGpoLinks += $InheritedGpoLink.DisplayName + \" | \"
}
# Retrait du dernier '|' dans la chaine
$objComp.InheritedGpoLinks = ($objComp.InheritedGpoLinks).Substring(0,($objComp.InheritedGpoLinks).lastindexofany(\"|\"«»)-1)
$CptsList += $objComp
}
return $CptsList
}
cls
Get-GPInheritanceFromAllComputers | Select-Object ComputerName, OUName, OUPath, GpoInheritanceBlocked, GpoLinks, InheritedGpoLinks |
export-csv C:\scripts\liste_pcs.txt -NoTypeInformation[/code:1]
Ce code extrait les liens de GPO liés à une OU, pour chaque machine trouvée dans l'AD...
En espérant que cela puisse t'aider.
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 13/10/11 15:10
Connexion ou Créer un compte pour participer à la conversation.
- Steinfield
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Merci beaucoup.
J'ai retrouvé un article qui traite exactement de ce sujet (merci Google et merci Daniel Lange !) :
Oui, j'ai trouvé cet articles, mais interdit d'installer d'autres modules que ceux fournies par MS, donc inutilisable car fait appel à un module \"Quest\".
Concernant ton script, c'est excellent et cela me donne quelques idées pour le traitement des chaînes de caractères.
J'admire le travail (quel efficacité), mais cela ne répond pas à ma problématique.
Comme je le disais le but est de répliquer des OUs qui ont une GPO liée (dans mon cas celles contenant les objets PCs et Users, je n'ai pas besoin de savoir si elles sont vide ou pas), dans une OU de test.
Ensuite on fait une copie des GPO existantes, on doit les renommer en rajoutant \"Test\" pour les associer aux OU de test, correspondantes qui viennent d'être créées.
Encore une fois merci et toutes mes excuses pour mes posts qui ne sont certainement pas très clairs.
Bonne journée.<br><br>Message édité par: steinfield, à: 13/10/11 16:20
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- rediriger resultat get-gpinheritance vers fichier