Question [Résolu] Raccourcir un script

Plus d'informations
il y a 7 ans 10 mois #25730 par Joran
Bonjour,

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!!:blush: :woohoo:

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.

Plus d'informations
il y a 7 ans 10 mois #25731 par Quentin
Réponse de Quentin sur le sujet Re:
Bonjour,

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.

Plus d'informations
il y a 7 ans 10 mois #25732 par Joran
Réponse de Joran sur le sujet Re:
alors eu... j'ai pas tout compris...:whistle:

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

Plus d'informations
il y a 7 ans 10 mois #25740 par Quentin
Réponse de Quentin sur le sujet Re:
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 &lt;tonchemindecsv&gt; -delimiter \&quot;;\&quot;

foreach ($item in $liste)
{
$test = Get-ItemProperty -Path $item.regpath | Select-Object -ExpandProperty start
if ($test -eq 0)
{
Write-host -foregroundcolor green \&quot;$item.ID = Ok\&quot;
}
else
{
Write-host -foregroundcolor red \&quot;$item.ID = NOK\&quot;
}
}
[/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.

Plus d'informations
il y a 7 ans 10 mois #25742 par Joran
Réponse de Joran sur le sujet Re:
Whitatrax écrit:

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 &lt;tonchemindecsv&gt; -delimiter \&quot;;\&quot;

foreach ($item in $liste)
{
$test = Get-ItemProperty -Path $item.regpath | Select-Object -ExpandProperty start
if ($test -eq 0)
{
Write-host -foregroundcolor green \&quot;$item.ID = Ok\&quot;
}
else
{
Write-host -foregroundcolor red \&quot;$item.ID = NOK\&quot;
}
}
[/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 !:woohoo: :woohoo:<br><br>Message édité par: Joran, à: 13/07/18 10:32

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

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