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.