Flash info

Prenez une longueur d'avance avec PowerShell. Faire ce choix c'est anticiper l'avenir des produits Microsoft mais aussi être plus performant dans son travail quotidien d'admin système.

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
Joran
Utilisateur

PowerShelleur Débutant
Messages: 16
graphgraph
Karma: 3  
[Résolu] Raccourcir un script - 12/07/18 09:19 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:

  $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 }



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 : https://www.computerperformance.co.uk/powershell/powershell_functions.htm

Voici le code de ma boucle :
Code:

  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['reg'] -name $dgami }



Merci d'avance!!

Message édité par: Joran, à: 12/07/18 09:29

Message édité par: Arnaud, à: 16/07/18 08:17
  | | L'administrateur a désactivé l'accés public en écriture.
Whitatrax
Utilisateur

PowerShelleur Débutant
Messages: 26
graphgraph
Karma: 3  
Re: - 12/07/18 10:27 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:

 ID;regpath;value;...... P739;hklm:\\...;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
  | | L'administrateur a désactivé l'accés public en écriture.
Joran
Utilisateur

PowerShelleur Débutant
Messages: 16
graphgraph
Karma: 3  
Re: - 12/07/18 10:38 alors eu... j'ai pas tout compris...
  | | L'administrateur a désactivé l'accés public en écriture.
Whitatrax
Utilisateur

PowerShelleur Débutant
Messages: 26
graphgraph
Karma: 3  
Re: - 13/07/18 07:36 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:

  ID;regpath;key;value P374;HKLM:\System\CurrentControlSet\Control\Lsa;Forceguest;0 P375;HKLM:\System\CurrentControlSet\Control\Lsa;RestrictAnonymous;1



Code:

  $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" } }



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
  | | L'administrateur a désactivé l'accés public en écriture.
Joran
Utilisateur

PowerShelleur Débutant
Messages: 16
graphgraph
Karma: 3  
Re: - 13/07/18 10:31 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:

  ID;regpath;key;value P374;HKLM:\System\CurrentControlSet\Control\Lsa;Forceguest;0 P375;HKLM:\System\CurrentControlSet\Control\Lsa;RestrictAnonymous;1



Code:

  $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" } }



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 !

Message édité par: Joran, à: 13/07/18 10:32
  | | L'administrateur a désactivé l'accés public en écriture.
© 2018 PowerShell-Scripting.com