Powershell : Utiliser foreach

Le passage shell unixien à powershell ne se fait pas sans mal… Le tout objet de MS a du bon, encore faut-il s’y faire.

Voici comment récupérer la liste de services d’un ordinateur et créer un fichier batch.

foreach ($svc in Get-Service) { "sc sdset "+ svc.Name + " D:(A;;CCLCRPRC;;;< --SID_USER-- >)D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)" | Out-File -Encoding ascii -Append C:\sc.bat }

Analysons cela de plus près.

La condition du foreach, plutôt simple, on apprécie ici ne pas devoir encadré la commande Get-Service entre backquote ou $() pour faire comprendre au shell que c’est une commande. Ici Chaque objet retourné par Get-Service sera stocké dans la variable $svc.
Ensuite viens le traitement, entre accolades, ici je voulais créer un script batch. On écrit donc tout simplement la ligne en veillant à sortir $svc.Name d’entre accolade sans quoi cela sera la clé et non la valeur qui sera affichée. Puis petite subtilité, ne pas utilisé la redirection >> ou > pour mettre le contenu dans un fichier directement. En effet,cela aura pour effet de stocker ce contenu en utf16… Préférez plutôt piper la ligne vers la commande Out-File (c’est en faite elle qui est appelée avec les > et >> mais sans l’option d’encodage) à qui on spécifiera l’encodage de sortie, en n’oubliant pas l’option Append pour un équivalent des >>.

Il ne vous reste plus qu’à exécuter votre batch :)

NE PAS CHANGER EN MASSE AVEC LA COMMANDE F0URNIE LES DROITS SUR LES SERVICES !!!! CELA EMPECHERA LE SYSTEME DE CORRECTEMENT FONCTIONNER.

Posted Wednesday, June 10th, 2015 under Dev, MS Windows, PowerShell.

Leave a Reply