Il y a toujours de la place pour la créativité dans l'administration. Souhaitez-vous automatiser une tâche de routine ? S'il te plaît! Avez-vous besoin de vérifier régulièrement l'activité de quelque chose ? Aucun problème! Voulez-vous traiter un rapport géant et afficher uniquement les données pertinentes ? C'est possible aussi. Toutes ces tâches et bien d'autres sont mieux résolues à l'aide de scripts, et PowerShell est le choix optimal dans le cas de Windows.

Qu’est-ce que PowerShell et pourquoi est-il efficace ?

Les utilisateurs d'UNIX et de Linux, et à un moment donné aussi de macOS, sont habitués à toujours avoir Bash à portée de main - un outil un peu démodé, mais universel et puissant avec lequel vous pouvez faire des choses étonnantes en quelques lignes seulement. Vous enregistrez un nouveau script dans cron - et vous avez terminé, il s'exécute déjà sur votre ordinateur ou votre serveur et fait discrètement quelque chose d'utile.

En revenant à Windows (et parfois on ne peut plus s'en passer), vous comprenez que les scripts .bat, bien que bons, ne vous sauvent pas toujours : leurs capacités sont très limitées. Et si vous pensez toujours que PowerShell est une chose inconnue pour laquelle vous devez sélectionner et configurer quelque chose, alors ne vous précipitez pas pour tirer des conclusions - si vous le regardez, ce n'est pas mal du tout.

Windows PowerShell est un outil d'automatisation extensible et open source composé d'un shell (ligne de commande) et d'un langage de script. Il a été présenté pour la première fois en 2003 (alors appelé Monad). PowerShell 2.0 a été publié avec Windows 7 et Windows Server 2008 R2 et constitue depuis lors une fonctionnalité standard de Windows. Il était même inclus dans Windows XP SP3. PowerShell est construit sur et intégré au .NET Framework. PowerShell peut accéder à COM, WMI et ADSI et, bien sûr, exécute également les commandes de la console.

En général, chic a des liens étroits avec les produits Microsoft, qu'il s'agisse d'Active Directory ou du serveur de messagerie Exchange. Cela vous permet d'y accéder via la console et d'émettre des commandes sans vous connecter à l'équipement du serveur.

Si PowerShell ne vous intéressait pas auparavant, vous disposez probablement de la deuxième version. Je recommande de passer au moins au troisième - il contient beaucoup plus de fonctionnalités et de fonctionnalités utiles. Sans entrer dans les détails, PowerShell 2.0 comprend environ une douzaine de modules et environ 350 commandes, et PowerShell 3.0 compte déjà environ 2 300 applets de commande provenant de plus de 70 modules. Le « hacker » a également expliqué en quoi la dernière version 5 de PowerShell diffère de Windows 10.

Choisir un environnement et des outils de développement

Voyons maintenant où il est le plus pratique d'écrire du code. Vous pouvez bien sûr également le faire dans Notepad, Notepad++ ou Sublime. Mais dans ce cas, ce n’est pas le choix le plus judicieux de l’éditeur. Il est préférable de commencer à vous familiariser avec PowerShell armé du fichier .


Ce n'est même pas un éditeur, mais un environnement de développement presque à part entière. Il existe une fonctionnalité IntelliSense qui vous permet d'afficher une liste d'applets de commande et de leurs paramètres, variables, utilitaires, etc. Les extraits de code sont pris en charge, il est possible d'étendre l'ensemble des fonctions grâce à divers modules complémentaires. La fenêtre Commandes est également très utile. Vous pouvez y composer des commandes en mode visuel : vous sélectionnez un module, recherchez l'applet de commande souhaitée et y définissez les paramètres nécessaires. La commande résultante peut être copiée sur la console ou immédiatement exécutée. En général, une sorte de concepteur pour l'administrateur. Et bien sûr, il existe une coloration syntaxique, un débogueur et bien plus encore.

Cependant, PowerShell ISE a également de dignes concurrents. L'un d'eux - .

PowerGUI est une extension visuelle de PowerShell. Il facilite la création de vos propres scripts avant de choisir les applets de commande dont vous avez besoin. Vous prenez ce dont vous avez besoin pour résoudre le problème et faites glisser et déposez des parties du code jusqu'à ce que vous obteniez un script. L'une des principales fonctionnalités de PowerGUI réside dans les Power Packs, des scripts prêts à l'emploi publiés par la communauté des utilisateurs et mis à disposition en accès gratuit. Il existe des commandes simples, comme l'ajout d'utilisateurs, et des commandes complexes, comme la gestion des commutateurs et des machines virtuelles. Tous peuvent être facilement complétés et modifiés selon les besoins.


Les entreprises Sapien constituent un environnement plus avancé, conçu pour le développement conjoint d'un projet par un grand nombre de participants. Si vous avez déjà travaillé avec Visual Studio, je pense que vous remarquerez les similitudes. Certaines fonctionnalités utiles de PowerShell Studio incluent le panneau du ruban, la prise en charge du débogage à distance et les fonctions du compilateur qui vous permettent d'inclure des scripts dans des fichiers exécutables. Il existe une prise en charge pour différentes versions de PowerShell.


Le navigateur de scripts pour Windows PowerShell ISE mérite également d'être mentionné. Il ne s'agit pas d'un environnement de développement, mais d'un outil très intéressant développé par Microsoft. Script Browser donne accès à une base de données de scripts prêts à l'emploi qui peuvent être utilisés comme exemples pour écrire votre propre code. Cette chose peut également analyser le code que vous écrivez et suggérer comment l'améliorer.


Quelques astuces utiles

Après avoir compris l'éditeur, vous pouvez commencer à écrire du code. PowerShell n'est pas un langage compliqué et je pense que vous vous y habituerez rapidement. Les commandes ici sont appelées applets de commande et chacune d’elles se compose de deux parties. Vient d’abord l’action, par exemple Get, Set, Add, Invoke, Remove. Ensuite, il indique à quoi vise l'action : Service, VM, AzureAccount, DHCPServerSetting. Chaque partie est séparée de l'autre par un trait d'union. Il s'avère, par exemple, get-process. Soit dit en passant, il s'agit d'une commande utile qui affiche une liste de processus. Disons que si vous écrivez

get - traiter BadTh *

nous verrons quelque chose comme ceci :

Gère NPM (K) PM (K) WS (K) VM (M) CPU(s) Id ProcessName

------------------------

28 4 - 210844 - 201128 - 163 25,67 2792 MauvaisThread

Vous pouvez maintenant mettre fin au processus gelé :

Vous pouvez le visualiser de manière récursive, mais avec une logique un peu plus complexe :

Vous pouvez également faire

À propos, vous pouvez accéder à chaque champ de la fenêtre des options du compte ou de l'ordinateur et lire les données. De cette façon, vous pouvez créer des sections entières. Voici, par exemple, une requête basée sur des données sur les numéros de téléphone :

Get - AdUser - Filtre * - Propriétés OfficePhone | FT OfficePhone, UserPrincipalName

PowerShell contre chauve-souris

Parfois, un problème peut être résolu soit en utilisant la méthode ancienne, soit en utilisant PowerShell. Je recommande de ne pas être paresseux et d'utiliser PS, ne serait-ce que simplement parce que de cette façon, vous l'apprendrez plus rapidement et pourrez l'utiliser dans des situations plus complexes. De plus, vous apprécierez progressivement sa syntaxe – plus élégante et cohérente. Voici quelques exemples de la façon dont les choses ont été faites auparavant et comment elles peuvent l'être à l'aide de PowerShell.

La ligne de commande suivante redémarrera l'ordinateur avec un délai de dix secondes :

Voici comment redémarrer le service dnscache (ou tout autre) via bat :

sc arrêter le cache DNS

sc démarrer le cache DNS

Exécution du script par défaut Windows PowerShell interdite dans le système. Pour des raisons de sécurité, tous les scripts PowerShell doivent être signés numériquement, cette méthode est appelée - politique d'exécution. Si le script ne remplit pas cette condition, l'exécution de scripts PowerShell sur le système est interdite. Cela est principalement dû au fait que le script peut contenir du code malveillant susceptible d'endommager le système d'exploitation.


PowerShell dispose de plusieurs modes d'exécution qui déterminent quel type de code est autorisé à s'exécuter. Il existe 5 modes d'exécution différents :

Limité
Valeur par défaut. L'exécution de tout script est bloquée et le fonctionnement de commandes interactives est autorisé.
Tous signés
L'exécution de scripts dotés d'une signature numérique est autorisée.
Signé à distance
Les scripts locaux fonctionnent sans signature. Tous les scripts téléchargés doivent être signés numériquement.
Libre
L'exécution de tous les scripts est autorisée. Lors de l'exécution d'un script non signé téléchargé depuis Internet, le programme peut nécessiter une confirmation.
Contourne
Rien n'est bloqué, aucun avertissement ou demande n'apparaît.

Le mode par défaut pour PowerShell est "Limité". Dans ce mode, PowerShell s'exécute comme un shell interactif. Si vous n'avez jamais configuré PowerShell auparavant, au lieu d'exécuter le script, vous verrez un message d'erreur écrit en rouge, comme dans la capture d'écran ci-dessous.

Le moyen le plus sûr de résoudre ce problème consiste à modifier la stratégie d'exécution en stratégie d'exécution sans restriction, à exécuter le script, puis à revenir à la stratégie restreinte.

Pour modifier la politique d'exécution en illimitée, utilisez la console PowerShell avec les droits d'administrateur et exécutez la commande suivante :

Oui (Oui)

Vous pouvez maintenant exécuter le script. Cependant, vous exposez le système à de sérieux risques. Par conséquent, une fois l'exécution du script terminée, assurez-vous de redéfinir la politique d'exécution en mode restreint. Vous pouvez le faire en utilisant la commande suivante :

Après avoir exécuté la commande, il vous sera demandé de confirmer le changement de politique d'exécution. Nous répondrons Oui (Oui)

L'exécution de tous les scripts est bloquée. Valeur par défaut.

Set-ExecutionPolicy restreint

L'exécution de scripts dotés d'une signature numérique est autorisée.

Les scripts préparés sur l'ordinateur local peuvent être exécutés sans restrictions, les scripts téléchargés depuis Internet - uniquement s'ils disposent d'une signature numérique.

Set-ExecutionPolicy RemoteSigné

L'exécution de tous les scripts est autorisée. Lors de l'exécution d'un script non signé téléchargé depuis Internet, le programme peut nécessiter une confirmation.

Set-ExecutionPolicy sans restriction

Rien n'est bloqué, aucun avertissement ou demande n'apparaît.

Pour exécuter les commandes ci-dessus sans confirmer la modification, utilisez l'option
-Force , par exemple exécutez la commande :

Set-ExecutionPolicy Bypass-Force

Désormais, lors de l'exécution de commandes, vous n'avez plus besoin de confirmer les modifications apportées.

PowerShell dispose d'un certain nombre de modes d'exécution qui déterminent quel type de code est autorisé à s'exécuter. Tout cela est contrôlé par une clé de registre qui réside dans HKLM. Il existe 4 modes d'exécution différents :

Limité(Restriction) : la stratégie d'exécution par défaut n'autorise pas l'exécution de scripts et autorise uniquement l'exécution de commandes interactives.

Tous signés(Tous signés) : permet à tous les scripts de s'exécuter. Certes, tous les scripts et fichiers de configuration doivent être signés par un éditeur de confiance ; Ce mode vous expose au risque d'exécuter des scripts signés (mais malveillants) après avoir reçu une confirmation de confiance de la part de l'éditeur.

Supprimé signé(Signé à distance) : les scripts locaux fonctionnent sans signature. Tous les scripts téléchargés doivent être signés numériquement.

Illimité(Illimité) : Tous les scripts et fichiers de configuration reçus d'applications de communication telles que Microsoft Outlook, Internet Explorer, Outlook Express et Windows Messenger fonctionnent après avoir confirmé que vous comprenez que le fichier provient d'Internet ; aucune signature numérique n'est requise ; Ce mode vous expose au risque d’exécuter des scripts malveillants non signés.

Par défaut, PowerShell utilise le mode restreint. Dans ce mode, PowerShell fonctionne uniquement comme un shell interactif. Il ne permet pas l'exécution de scripts et charge uniquement les fichiers de configuration signés par un éditeur de confiance.

Si vous obtenez une erreur rouge gênante, c'est dans la plupart des cas parce que vous essayez d'exécuter un script non signé. Le moyen le plus sûr de résoudre ce problème consiste à modifier la stratégie d'exécution en stratégie d'exécution sans restriction, à exécuter le script, puis à revenir à la stratégie restreinte.

Pour modifier la stratégie d'exécution en illimitée, exécutez la commande suivante dans PowerShell d'administration :

Set-ExecutionPolicy sans restriction

Vous verrez une demande de confirmation. Appuyez sur Entrée.

Vous pouvez maintenant exécuter le script téléchargé. Cependant, vous vous exposez à de sérieux risques. Une fois l'exécution du script terminée, assurez-vous de remettre la politique d'exécution en mode restreint. Vous pouvez le faire en utilisant la commande suivante :

Set-ExecutionPolicy restreint

Une fois de plus, vous verrez une demande de confirmation. Appuyez sur Entrée.

C'est tout! Bonne chance à toi!

1. Écrire un scénario

Un script PowerShell (quelle que soit la version) est un fichier texte avec une extension *.ps1.

Voici un exemple de script Power Shell simple (file systemInfo.ps1) :

# Récupérer l'objet WMI pour le système d'exploitation

Get-WmiObject Win32_OperatingSystem

Ce fichier peut être créé et modifié, par exemple, dans FAR Manager.

noteque FAR Manager, bien qu'il puisse fonctionner dans la console Power Shell, exécute des scripts sous lui-même dans l'environnement d'une console Windows standard cmd . Autrement dit, FAR Manager ne peut être utilisé que pour créer et modifier des scripts PowerShell, mais pas pour les exécuter. Mais avant d’être déçu, lisez le point 3.

2. Exécuter le script

Le script doit être exécuté à partir de la console Power Shell et non à partir de la console Windows standard. Dans la console Power Shell, vous devez vous rendre dans le répertoire où se trouve le script (avec les commandes CD ), puis exécutez le script lui-même, en veillant à inclure les caractères devant lui".\" . Par exemple, nous avons le chemin d'accès au fichier script d:\work\systemInfo.ps1 . Ensuite, les commandes de lancement ressembleront à ceci :

CD\

travail sur CD

.\systemInfo.ps1

ou comme ceci (spécifiez simplement le chemin complet du script) :

d:\work\systemInfo.ps1

Très probablement, l'erreur suivante apparaîtra lors de l'exécution du script :

Le fichier D:\work\systemInfo.ps1 ne peut pas être chargé car l'exécution de script n'est pas autorisée sur ce système. Tapez « get-help about_signing » pour plus d’informations.

ligne:1 caractère: 18

CategoryInfo : NotSpecified : (:), PSSecurityException

FullyQualifiedErrorId : RuntimeException

L'erreur apparaît car, par défaut, Power Shell a la stratégie de sécurité maximale activée, ce qui vous permet d'exécuter des commandes PowerShell sur la ligne de commande, mais ne vous permet pas d'exécuter un script avec des commandes PowerShell sur la même ligne de commande.

Pour activer l'exécution de scripts PowerShell, vous devez créer un fichier *.bat, par exemple activateScript.bat avec le contenu suivant :

powershell -Command Set-ExecutionPolicy RemoteSigned

Ce fichier *.bat peut être exécuté dans n'importe quelle console : soit en PowerShell, soit dans une console standard cmd . Après avoir exécuté ce fichier, les scripts PowerShell s'exécuteront dans la console PowerShell.

3. Exécution d'un script PowerShell à partir d'une console cmd Windows standard

Le script PowerShell peut également être exécuté à partir d'une console Windows classique. Pour ce faire vous pouvez utiliser la commande :

Powershell -Fichier ./systemInfo.ps1

De cette façon, vous pouvez exécuter des scripts directement depuis FAR Manager et ils fonctionneront.

Mais il y a ici une légère subtilité. Paramètre-Déposer se déclenche uniquement sur les chemins locaux, même si le chemin est relatif"./" . Autrement dit, si *.ps1 - le fichier est sur le disque local Corde: , alors un tel appel fonctionnera. Mais si vous essayez d'exécuter un script situé sur une ressource de domaine, le script ne sera pas trouvé. Peut-être que cela sera corrigé dans les futures versions de PowerShell.

Il existe plusieurs manières différentes d'exécuter le script, les principales sont ci-dessous :

  1. Lancer PowerShell et exécutez le script dedans (entrez le chemin d'accès au fichier et le nom du fichier, par exemple, comme ceci : C:\Scripts\test.ps1, ou allez dans le dossier du script avec la commande cd C:\Scripts et exécutez-le avec la commande.\test.ps1) Le shell peut être trouvé et lancé de plusieurs manières. Une solution consiste à utiliser le menu Démarrer. Pour Windows 7 - vous devez aller dans "Tous les programmes" - "Accessoires" - "Windows PowerShell" et lancer le shell "Windows PowerShell". Pour Windows 10, vous devez trouver le groupe avec la lettre « W » et vous y trouverez « Windows PowerShell ».
  2. Lancez « Windows PowerShell ISE » est un programme - un environnement de développement qui vous permet d'éditer et de déboguer des scripts PowerShell, qui est également disponible par défaut avec PowerShell lui-même. Après l'avoir lancé, il vous suffit de cliquer sur le bouton "Ouvrir" ou d'aller dans le menu Fichier - Ouvrir et de sélectionner le script souhaité, puis d'appuyer sur F5 ou sur le bouton "Exécuter le script". Vous pouvez retrouver Windows PowerShell ISE au même endroit que le shell PowerShell - dans le menu Démarrer .
  3. Lancer la ligne de commande standard et écris-y :
    fichier PowerShell<имя_скрипта> (exemple : powershell -file myscript.ps1)

Si vous n'avez jamais exécuté de scripts PowerShell auparavant, vous recevrez probablement le message suivant : Impossible de télécharger le fichier<имя_скрипта>, puisque l'exécution de scripts est interdite pour ce système. Tapez « get-help about_signing » pour plus d’informations. Cela est dû au fait que pour des raisons de sécurité et pour éviter l'exécution accidentelle de code malveillant, tous les scripts doivent être signés numériquement.

Comment autoriser l’exécution d’un script PowerShell non signé ?

1. Dans PowerShell, avant d'exécuter le script, exécutez la commande pour autoriser l'exécution de scripts non signés pour la session shell en cours :

Processus Set-ExecutionPolicy RemoteSigned -Scope

2. Au démarrage à partir de la ligne de commande standard utilisez le paramètre -executionpolicy, c'est-à-dire exécutez le script comme ceci :

<имя_скрипта>

Les deux méthodes définissent la politique uniquement pour la session en cours, tandis que la politique de sécurité pour l'exécution des scripts PowerShell écrits dans le registre ne sera pas modifiée et restera la même. Si vous souhaitez modifier la politique de sécurité d'exécution du script en « permanente », utilisez cette méthode :

3. Autoriser le lancement pour toujours: Lancez PowerShell en tant qu'administrateur, puis exécutez la commande :

Set-ExecutionPolicy RemoteSigné

Note: Si le script a été téléchargé depuis Internet, afin d'éviter une demande de confirmation de lancement, vous devez utiliser Bypass au lieu de RemoteSigned - en désactivant complètement toutes les demandes et avertissements.

Comment exécuter un script PowerShell en arrière-plan ?

Pour cela, il suffit d'utiliser le paramètre de lancement -WindowStyle, qui peut prendre les valeurs suivantes : Normal, Minimized, Maximized et Hidden. Ainsi, pour exécuter un script non signé en arrière-plan, vous devez exécuter la commande :

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -fichier<имя_скрипта>

Vous pouvez également ajouter -NonInteractive si vous le souhaitez, afin que le script ne pose aucune question. Ainsi, le script sera exécuté inaperçu par l'utilisateur. Soyez prudent lorsque vous utilisez cette méthode.

Exécuter un script PowerShell avec des paramètres

Le lancement réel doit être effectué comme si vous lanciez un programme normal ou un fichier bat avec des paramètres. Par exemple, pour exécuter un script avec des paramètres depuis la ligne de commande, vous pouvez écrire la commande suivante :

powershell -executionpolicy RemoteSigned -fichier<имя_скрипта>param1 param2 "un autre paramètre de texte"

Dans le script lui-même, vous pouvez obtenir ces paramètres comme ceci :

Param ($var1, $var2, $var3) echo $var1, $var2, $var3

Dans PowerShell ISE, vous pouvez exécuter un script avec des paramètres de la même manière à l'aide du volet de commande.

Comment exécuter un script PowerShell à l’aide d’un raccourci ?

Cette tâche peut être accomplie de deux manières :

  1. Créez un fichier bat/cmd dans lequel écrire une commande pour exécuter le script (vous avez lu les paramètres ci-dessus)
  2. Créez un raccourci vers PowerShell, qui se trouve dans le dossier c:\Windows\System32\WindowsPowerShell\v<версия>\ et dans les propriétés du raccourci dans le champ "Objet", ajoutez les paramètres nécessaires.

Ainsi, par exemple, pour exécuter un script PowerShell lorsque l'utilisateur se connecte, vous pouvez simplement créer un raccourci comme décrit au point 2 et le placer au démarrage. De plus, créer un raccourci à l'aide de l'une des méthodes ci-dessus vous permettra d'exécuter facilement le script en tant qu'administrateur ou en tant que tout autre utilisateur en tant que programme standard.

Le langage de script PowerShell est un outil assez puissant pour résoudre divers problèmes, mais il peut être utilisé non seulement pour de bonnes choses, mais aussi pour de mauvaises choses, alors utilisez-le à bon escient ;)


Fermer