Question Création d'une GPO - Modèles d'administration

Plus d'informations
il y a 8 ans 1 mois #25230 par Joran
Bonjour à tous,

Pour mon apprentissage, je dois créer un script en Powershell (sa fait deux semaines que je commence powershell :whistle: ).

Mon travail au début était de créer un script afin de vérifier que mes GPOs était bien installé, et j'ai réussi!!:woohoo:

Maintenant je dois créer un script afin de créer des GPOs... J'ai donc écrit ceci :

[code:1]
$P210 = Get-Item -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\AppModel\StateManager 2>&1 | Out-Null
if($P210 -eq $NULL) {
New-Item -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\AppModel
New-Item -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\AppModel\StateManager 2>&1 | Out-Null
Set-ItemProperty -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\ApModel\StateManager -Name AllowSharedLocalAppData -Value 0
Write-Output \"P210 - OK la clé & la règle ont été crées\"
} ElseIf ($P210 -eq $true) {
Set-ItemProperty -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\AppModel\StateManager -Name AllowSharedLocalAppData -Value 0
Write-Output \"P210 - la règle a été crée\"
}
else {
Write-Output \"P210 - MANQUANT\"
}
[/code:1]

Donc voilà mon code, en gros, j’essaie de crée une clé dans ma base de registre suivi d'une valeur mais Si la clé est déjà crée alors il ne crée que la règle.

Sauf que le souci, c'est que pour ce P210, il faut que je crée deux clé : AppModel et StateManager.

L'erreur qu'il m'affiche est :
[code:1]

New-Item : Il existe déjà une clé à cet emplacement
Au caractère Ligne:4 : 5
+ New-Item -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (Microsoft.Power...RegistryWrapper:RegistryWrapper) [New-Item], IOException
+ FullyQualifiedErrorId : System.IO.Exception,Microsoft.Poershell.Commands.NewItemCommand

[/code:1]

Je sias que j'ai une erreur au début de mon ElseIf mais j'arrive pas a voir où, pourriez-vous m'aidez?

Merci d'avance!:dry:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25234 par Philippe
salut Joran et bienvenue

Je suis pas sur de comprendre le rapport entre les GPO et ton script !?

mais ton script a bien une voir plusieurs erreur de conception des la premiere ligne

[code:1]$P210 = Get-Item -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\AppModel\StateManager 2>&1 | Out-Null[/code:1]

tu a mis a la fin de ta ligne \"2>&1\" et \"| Out-Null\"
sais tu a pourquoi ?

\"| Out-Null\" renvoie le résultat de ou des précédente instruction dans le néant ! le pipe \"|\" fait le renvoie et \"out-null\" fait le néant, ou si tu préfère nul part

\"2>&1\" fait une redirection vers...rien puisque tu n'a pas indiqué de destination !

au final ta variable $P210 reste vide quelque soit le contenue de la base de registre

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25237 par Joran
Salut, merci pour ta réponse

Alors pour répondre à ta question, mon script est censé permettre l'automatisation de certaines GPO sachant que j'en ai déjà fait un qui vérifie que certaines GPO soient bien installés.

Le script qui installe mes GPO directement dans la base de registres sans passer par la partie graphique ainsi une fois construite on gagnera un temps considérable.

La partie de ma commande \"2>&1 | Out-Null\" me permet d'éviter d'avoir un retour de ma commande
[code:1]
$P210 = Get-Item -Path Registry::HKLM\SOFTWARE\Policies\Microsoft\Windows\AppModel\StateManager 2>&1 | Out-Null
[/code:1]

Car enfait il est censé me dire s'il trouve ou pas la clé dans la base de registres donc je n'ai aucun retour. Quelles formulations auriez-vous écrites afin de remplacer ma ligne?

Ensuite, mon script vérifie dans la base de registres qu'une clé existe SI elle n'existe pas il la crée suivi de la valeur qui va avec SINON il ne crée que la valeur. Sauf qu'on ma demandé d'ajouter une ligne afin d'avoir un retour ERREUR si jamais ça ne marche pas donc j'ai placé mon SINON dans un ElseIf et dans mon else le renvoi à erreur mais je bloque à mon ElseIf...

Qu'elle valeur retournée?

Merci d'avance

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25244 par Arnaud Petitjean
Bonjour,

Pourquoi se compliquer la vie à créer des GPOs de la sorte alors qu'il existe un module PowerShell pour cela ?

Voir ici : New-CPO cmdlet

Personnellement je ne me risquerais pas à créer des GPOs en allant bidouiller directement dans la base de registres alors que l'on peut faire autrement et en plus c'est supporté par Microsoft... :whistle:


Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25250 par Philippe
je rejoint Arnaud sur ça reflection. Dis toi que ce qui fonctionne aujourd'hui peut ne plus fonctionner demain vu la technique employer !

pour en revenir a ton erreur

La partie de ma commande \"2>&1 | Out-Null\" me permet d'éviter d'avoir un retour de ma commande

la tu ne retourne vraiment plus rien même pas les valeur trouver !!!
utilise plutôt le parametre commun aux instruction PowerShell \"ErrorAction\", qui va te permettre de bloquer les message d'erreur tout en ayant les infos. la doc ici
[code:1]$P210 = Get-Item -Path Registry::HKLM\SOFTWARE\... -ErrorAction SilentlyContinue[/code:1]

apres pour le if je mettrais [code:1]if ($p210.Property -contains \"StateManager\"«») {...[/code:1] pour verifier si \"StateManager\" existe !

le \"if($P210 -eq $NULL)\" reste utile en cas d'erreur puisque quand cas d'erreur get-item renvoie $null

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 4 semaines #25353 par Quentin
Bonjour,

Je me suis retrouvé dans le même cas que Joran.
Dans un soucis d'industrialisation de mise en place de GPO spécifiques, j'ai également scripté la création ou la modification de clés de registres.

La solution d'Arnaud est effectivement optimisée. Cependant, elle n'est valable qu'à partir d'un OS sous WS 2012.

Il faut donc bien prendre en compte les éléments suivants pour la création / modification des clés de registres :

- tester tes chemins d'accès aux clés ou aux propriétés

[code:1]Test-Path -Path $tonchemin
#renvoie $true ou $false[/code:1]

- savoir quel type de clé ou de propriété tu modifies (DWORD,String, ...)

- en fonction de ce que ton test de chemin te retourne, soit créer la clé + propriétés / soit modifier la clé + propriétés
[code:1]#créer une clé :
New-item -path $tonchemin -name $nomclé
#créer une propriété
New-Itemproperty -path $tonchemin -name $nompropriété -value $tavaleur -propertytype $typedepropriété #(les types sont : Dword, MultiString, Binary,String)
#modifier une propriété :
Set-ItemProperty -Path $tonchemin -name $tapropriété -value $tavaleur[/code:1]

Je te laisse essayer, pour moi ça a fonctionné pour plus de 180 GPOs.
En pièce jointe, un fichier Excel tiré de chez Microsoft qui te précise quelles clés de registres sont modifiées pour quelle GPO.

Whitatrax

[EDIT] Bon, fichier trop volumineux, même compressé je ne peux pas te le déposer Sorry<br><br>Message édité par: Whitatrax, à: 26/04/18 09:00

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena