Question
[Résolu] Raccourcir un script
- Joran
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
Je reviens vers vous encore une fois... J'ai crée un script de plusieurs centaines de lignes mais j'aimerai le raccourcir... Imaginons pour deux règles, actuellement j'ai ça :
[code:1]
$P374 = Get-ItemProperty -Path Registry::HKLM\SYSTEM\CurrentControlSet\Services\wlidsvc | Select-Object -ExpandProperty start
if ($P374 -eq 4) {
Write-Output \"P374 = OK\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P374 -Type String -Value '1' -Force
} elseif ($P374 -eq 2) {
Write-Output \"P374 = KO, le service est en mode automatique\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P374 -Type String -Value '0' -Force
} elseif ($P374 -eq 3) {
Write-Output \"P374 = KO, le service est en mode manuel\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P374 -Type String -Value '0' -Force
} else {
Write-Output \"P374 = KO\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P374 -Type String -Value '0' -Force
}
$P376 = Get-ItemProperty -Path Registry::HKLM\SYSTEM\CurrentControlSet\Services\NcdAutoSetup | Select-Object -ExpandProperty start
if ($P376 -eq 4) {
Write-Output \"P376 = OK\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P376 -Type String -Value '1' -Force
} elseif ($P376 -eq 2) {
Write-Output \"P376 = KO, le service est en mode automatique\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P376 -Type String -Value '0' -Force
} elseif ($P376 -eq 3) {
Write-Output \"P376 = KO, le service est en mode manuel\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P376 -Type String -Value '0' -Force
} else {
Write-Output \"P376 = KO\"
New-ItemProperty -Path HKLM:\SYSTEM\ENGEP\check.dgami\services -Name P376 -Type String -Value '0' -Force
}
[/code:1]
J'ai commencé par crée une boucle mais je sais pas si mon IN correspond bien et si le reste à possibilité de fonctionner... Je me suis aidé du site : www.computerperformance.co.uk/powershell...rshell_functions.htm
Voici le code de ma boucle :
[code:1]
function verif_services {param ([string] $regle, [string] $regedit, [string] $dgami)
$regle = Get-ItemProperty -Path Registry::$regedit | Select-Object -ExpandProperty start
if ($regle -eq 4) {
Write-Output \"$regle = OK\"
New-ItemProperty -Path $dgami -Name P$regle -Type String -Value '1' -Force
} elseif ($regle -eq 2) {
Write-Output \"$regle = KO\"
New-ItemProperty -Path $dgami -Name P$regle -Type String -Value '0' -Force
} elseif ($regle -eq 3) {
Write-Output \"$regle = KO\"
New-ItemProperty -Path $dgami -Name P$regle -Type String -Value '0' -Force
} else {
Write-Output \"$regle = KO\"
New-ItemProperty -Path $dgami -Name P$regle -Type String -Value '0' -Force
}
}
$list = array(
P374 => HKLM\SYSTEM\CurrentControlSet\Services\wlidsvc
);
foreach ($list IN $regle => $regedit ) {
verif_services -regle $regle -regedit $regedit -name $dgami
}
[/code:1]
Merci d'avance!!
Message édité par: Joran, à: 12/07/18 09:29<br><br>Message édité par: Arnaud, à: 16/07/18 08:17
Connexion ou Créer un compte pour participer à la conversation.
- Quentin
- Hors Ligne
- Membre senior
-
- Messages : 47
- Remerciements reçus 0
Il y a peu j'ai aussi rencontré ce problème.
Au final, j'ai fait une boucle simple qui fait appel à un csv. Je m'explique :
tu crées tes en-têtes en fonction des paramètres que tu utilises
par exemple :
[code:1]ID;regpath;value;......
P739;hklm:\\...;1;......[/code:1]
a partir de là si tu fais la même chose sur toutes tes entrées tu crées une boucle foreach qui fait toujours la meme chose en prenant les infos que tu as besoin dans ton csv
Cordialement,
Whitatrax
Connexion ou Créer un compte pour participer à la conversation.
- Joran
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
- Quentin
- Hors Ligne
- Membre senior
-
- Messages : 47
- Remerciements reçus 0
Tu fais donc une boucle qui avale un fichier csv que tu prépares dans laquelle tu vas faire l'ensemble de tes conditions
Ce fichier csv, tu vas y définir l'ensemble des données qui peuvent te servir dans la boucle.
Si un jour tu as besoin de tester plus de valeurs, tu rajoute simplement une ligne dans le CSV plutôt que de devoir modifier ton script et ajouter tout un bloc de 10-20 lignes
Exemple de ce que tu pourrais faire (après c'est à ton bon vouloir)
Admettons que ton fichier csv soit fait comme ceci :
[code:1]
ID;regpath;key;value
P374;HKLM:\System\CurrentControlSet\Control\Lsa;Forceguest;0
P375;HKLM:\System\CurrentControlSet\Control\Lsa;RestrictAnonymous;1
[/code:1]
[code:1]
$liste = import-csv <tonchemindecsv> -delimiter \";\"
foreach ($item in $liste)
{
$test = Get-ItemProperty -Path $item.regpath | Select-Object -ExpandProperty start
if ($test -eq 0)
{
Write-host -foregroundcolor green \"$item.ID = Ok\"
}
else
{
Write-host -foregroundcolor red \"$item.ID = NOK\"
}
}
[/code:1]
Après tu peux, très facilement adapter la chose. Par exemple, tu peux comparer dans tes conditions, la valeur que tu récupères en temps réel via le get-itemproperty à une valeur que tu définis dans le CSV (colonne value dans mon exemple)
Voilà pour l'exemple d'utilisation comme je le ferais.
Essaie d'adapter cette partie de script en prenant tes différents blocs que tu avais déjà écris.
Cordialement, Whitatrax
Connexion ou Créer un compte pour participer à la conversation.
- Joran
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 16
- Remerciements reçus 0
Si je ne me trompe pas, tu fais toujours le même processus sur plusieurs valeurs différentes.
Tu fais donc une boucle qui avale un fichier csv que tu prépares dans laquelle tu vas faire l'ensemble de tes conditions
Ce fichier csv, tu vas y définir l'ensemble des données qui peuvent te servir dans la boucle.
Si un jour tu as besoin de tester plus de valeurs, tu rajoute simplement une ligne dans le CSV plutôt que de devoir modifier ton script et ajouter tout un bloc de 10-20 lignes
Exemple de ce que tu pourrais faire (après c'est à ton bon vouloir)
Admettons que ton fichier csv soit fait comme ceci :
[code:1]
ID;regpath;key;value
P374;HKLM:\System\CurrentControlSet\Control\Lsa;Forceguest;0
P375;HKLM:\System\CurrentControlSet\Control\Lsa;RestrictAnonymous;1
[/code:1]
[code:1]
$liste = import-csv <tonchemindecsv> -delimiter \";\"
foreach ($item in $liste)
{
$test = Get-ItemProperty -Path $item.regpath | Select-Object -ExpandProperty start
if ($test -eq 0)
{
Write-host -foregroundcolor green \"$item.ID = Ok\"
}
else
{
Write-host -foregroundcolor red \"$item.ID = NOK\"
}
}
[/code:1]
Après tu peux, très facilement adapter la chose. Par exemple, tu peux comparer dans tes conditions, la valeur que tu récupères en temps réel via le get-itemproperty à une valeur que tu définis dans le CSV (colonne value dans mon exemple)
Voilà pour l'exemple d'utilisation comme je le ferais.
Essaie d'adapter cette partie de script en prenant tes différents blocs que tu avais déjà écris.
Cordialement, Whitatrax
Mercii beaucouppp !!!! Cela m'a vraiment aidé, ce que je vais pouvoir faire maintenant est beaucoup plus gros, donc encore merci!!
Sujet résolu !
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Raccourcir un script