Exemples de scripts PowerShell pour Windows

Probablement, tout le monde a entendu parler de PowerShell, mais à peu près tout le monde ne travaillait pas avec lui. Pour ceux qui commencent à mettre leur chemin dans les débranchies de PowerShell, nous apportons la traduction de la publication, publiée sur le portail 4SYSOPS.COM. On raconte environ 7 équipes qui aideront ceux qui viennent de commencer à travailler avec PowerShell. Pour plus de détails - Bienvenue sur Cat.

Obtenir de l'aide.

La toute première et la plus importante CMDLET POWERSHELL est un appel de certificat. À l'aide de la cmdlet Get-Help, vous pouvez vérifier la syntaxe, afficher des exemples d'utilisation et une description détaillée des paramètres de n'importe quelle cmdlet PowerShell. Cette cmdlet est notable du fait que vous pouvez simplement taper des services d'aide à obtenir une liste de toutes les cmdlets qui conviennent au fonctionnement des services.
Exemple:
PS C: \\\u003e Service d'aide

Vous pouvez choisir n'importe quelle cmdlet dans la liste affichée ci-dessus pour obtenir un certificat de celui-ci. Par example,
PS C: \\\u003e Get-Help -Name Get-Service
Vous obtenez toutes les informations sur la malédiction Get-Service (sera discutée ci-dessous).


Obtenir du contenu

La lecture du contenu des fichiers est l'exigence la plus fréquente pour les débutants qui essaient d'apprendre PowerShell. La procédure de lecture avec PowerShell est simplifiée. Même un non-spécialiste peut lire le contenu du fichier, simplement en le transmettant à la cmdlet Get-Content.
Exemple.
PS C: \\\u003e Get-Content C: \\ scripts \\ Computers.txt myTestPC1 Techibee.com DummyNotresolvingShost.com PS C: \\\u003e

Besoin de plus d'informations sur la malédiction? Utilisez Get-Help:
PS C: \\\u003e Get-Aide Get-Contenu -Détiner

Get-Service.

Cette cmdlet répertorie tous les services installés sur l'ordinateur. Vous pouvez l'utiliser pour plus d'informations sur le service spécifique, la totalité des services ou à peu près tous les services de l'ordinateur.
Exemple:
PS C: \\\u003e Get-Service Wwansvc, Nom de l'état du spouleur displayName ------ -------------------------- Spouleur d'impression Spouleur arrêté Wwansvc Wwan Autoconfig PS C: \\\u003e



Ici, nous avons demandé des informations sur deux services WWANSVC et SPOOLER
Une table avec le statut du service, son nom et son nom affichés sont affichés.
Nous pouvons voir que le service de spouleur est en cours d'exécution et Wwansvc s'est arrêté

Arrêt-service et service de démarrage

Services d'exécution et d'arrêt - Un moment assez important dans le travail administrateur Windows. PowerShell a des cmdlets intégrés qui simplifient le travail de l'administrateur, sans nécessiter la découverte. console MMC. À l'aide de ces cmdlets, vous pouvez arrêter / exécuter des services à la fois sur des ordinateurs locaux et supprimés.
Exemples:
Service de départ / arrêt sur ordinateur local (Sur l'exemple du service de spouleur):
PS C: \\\u003e Stop-Service -Name Spooler PS C: \\\u003e Start-Service -Name Spooler

Service de départ / arrêt sur ordinateur distant (Spouleur):
PS C: \\\u003e $ ServiceObj \u003d Get-Service -ComputerTername MyPC1 -Name Spooler PS C: \\\u003e STOCK-SERVICE -InputObj $ ServiceObJ PS C: \\\u003e Start-Service -InputObj $ ServiceObj

Get-processus.

Cette cmdlet vous permet de savoir quels processus fonctionnent sur des ordinateurs locaux ou distants. Le nom et l'identifiant du processus sont affichés, ainsi que le chemin d'accès au fichier exécutable, le nom de la société, la version du fichier exécutable et la mémoire utilisée par le processus.
Exemples:
Recevoir des informations sur les processus exécutés sur l'ordinateur local:

PS C: \\\u003e Get-Process


Entrez la cmdlet suivante pour obtenir des informations détaillées Sur les processus de course
PS C: \\\u003e Get-Process | Liste de format * -force

Obtenir des informations sur les processus exécutés sur un ordinateur distant:
PS C: \\\u003e Get-PROCESSE -ComputerTern MyPC1 | Liste de format * -force

MyPC1 doit être remplacé par le nom de cet ordinateur à partir de laquelle vous souhaitez obtenir des informations sur les processus de fonctionnement.

Processus d'arrêt.

Cette cmdlet arrête le processus sur un ordinateur local ou distant. Il prend un nom ou un identifiant de processus et complète ce processus. Ceci est utile dans les cas où l'application ne répond pas.
Exemple:
Arrêtez le processus avec ID 22608 sur l'ordinateur local:
PS C: \\\u003e Stop-Process -ID 22608
Arrêtez tous les processus Excel sur l'ordinateur local:
PS C: \\\u003e Stop-Process-Nom Excel

Conseil: Bien que la cmdlet STOP-PROCESS ne dispose pas de paramètre -ComputerName, vous pouvez toujours l'utiliser pour compléter les processus distants à l'aide de la carte supposée:
PS C: \\\u003e $ obj \u003d get-Process-Nom Excel -Commutername MyPC1 PS C: \\\u003e STOP-PROCESS-PROCESSAIRE $ OBJ

UPD:
Le poste est donné à la traduction de l'article du portail

En administration, il y a toujours un lieu de créativité. Vouloir faire une automatisation tâche de routine? Je vous en prie! Besoin de quelque chose pour vérifier régulièrement l'activité? Aucun problème! Voulez-vous traiter n'importe quel rapport gigantesque et retirer uniquement les données pertinentes? Vous pouvez aussi. Toutes ces tâches et de nombreuses autres tâches sont mieux résolues avec l'aide de scripts et la langue PowerShell dans le cas de Windows est le choix optimal.

Qu'est-ce que PowerShell et ce qu'il est bon

Les utilisateurs UNIX et Linux, et de certaines moaena et de macos sont habitués au fait qu'il y a toujours des bash à la main - un peu d'un peu à l'ancienne, mais universel et puissant, avec lequel toute la paire de lignes peut être travaillé avec des choses étonnantes. Nous prescrivons un nouveau script en cron - et prêt, il tourne déjà sur votre ordinateur ou sur le serveur et apporte imperceptiblement quelque chose d'utile.

De retour à Windows (et sans elle parfois de quelque manière que ce soit), vous comprenez que les scripts.bat bien qu'elles ne soient pas toujours enregistrées: leurs capacités sont très limitées. Et si vous croyez toujours que PowerShell est une chose inconnue, pour laquelle vous devez élever quelque chose et configurer, alors ne vous dépêchez pas avec les conclusions - il, si vous le comprenez, assez bon.

Windows PowerShell - Il s'agit d'un outil d'automatisation extensible avec open source, qui consiste en une coque (ligne de commande) et la langue scriptée. Il a été montré en 2003 (puis il s'appelait monad). PowerShell 2.0 est sorti dans le cadre de Windows 7 et Windows Server 2008 R2 et depuis lors, sont présents sous forme de composant standard. Il était même inclus dans Windows XP SP3. PowerShell est construit sur la base de .NET Framework et intégré à elle. PowerShell peut accéder à COM, WMI et ADSI, et, bien sûr, exécute les commandes de la console.

En général, la "couture" a des connexions fortes avec les produits Microsoft, que ce soit Active Directory ou serveur de courrier Échange. Cela vous permet de vous connecter à l'outil de serveur pour y accéder via la console et de prendre des commandes.

Si vous n'êtes pas intéressé par PowerShell, vous avez probablement la deuxième version. Je recommande de mettre à niveau au moins au troisième - il contient beaucoup plus d'opportunités et chips utiles. Si vous n'entrez pas dans les détails, alors à PowerShell 2.0 concerne une douzaine de modules et environ 350 commandes, et dans PowerShell 3.0, il existe déjà environ 2300 cmdlets de plus de 70 modules. "Hacker" a également écrit sur ce que la cinquième version de la plus nouvelle version de PowerShell de Windows 10 est différente.

Sélectionnez l'environnement de développement et les outils

Maintenant, trouvons là où le plus pratique d'écrire du code. Vous pouvez bien sûr, dans "Notepad", Notepad ++ ou Sublime. Mais dans ce cas, ce n'est pas la sélection la plus compétente de l'éditeur. Il est préférable de commencer la connaissance avec PowerShell, armé de venir dans un ensemble.



Ce n'est même pas un éditeur, mais un environnement de développement pratiquement à part entière. Il y a une fonction IntelliSense ici, ce qui vous permet d'afficher une liste de cmdlets et de leurs paramètres, variables, services publics et autres choses. Les extraits sont pris en charge, il est possible d'étendre la fonction des fonctions au détriment de divers addons. Très utile et la fenêtre de commandes. Vous pouvez créer des commandes en mode Visual: vous sélectionnez le module, vous trouverez la cmdlet souhaitée et définissez-le les paramètres nécessaires. La commande résultante peut être copiée à la console ou à exécuter immédiatement à l'exécution. En général, le concepteur dur pour admin. Et bien sûr, il existe une mise en évidence de la syntaxe, un débogueur et bien plus encore.

Néanmoins, PowerShell Ise a des concurrents décents. L'un d'eux - .

PowerGui est un ajout visuel à PowerShell. Il simplifie l'assemblage de ses propres scénarios avant de sélectionner les cmdlets nécessaires. Vous prenez ce que vous devez résoudre le problème et faites glisser la partie du code jusqu'à ce que vous obteniez le script. L'un des principaux Chips Powergui est des packs électriques, des scripts prêts à l'emploi, publiés par la communauté des utilisateurs et un accès libéré. Il existe également des équipes non prétention telles que l'ajout de périphériques et complexes - par exemple, gérer les commutateurs et les machines virtuelles. Tous sont facilement complétés et modifiés conformément aux besoins.



SAPIEN - BOBAL L'environnement avancé, conçu pour développer conjointement un projet avec un grand nombre de participants. Si vous avez déjà traité avec Visual Studio, je pense que vous remarquerez la similitude. Parmi les puces UTILES POWERSHELL Studio, le panneau de ruban, la prise en charge du débogage à distance, ainsi que des fonctions du compilateur qui vous permettent d'activer les scripts dans des fichiers exécutables. Il y a un soutien différentes versions PowerShell.



Il convient de mentionner et de naviguer de script pour Windows PowerShell Ise. Ce n'est pas un environnement de développement, mais un outil intéressant développé dans Microsoft. Le navigateur de script ouvre l'accès à la base de données des scripts prêts à l'emploi pouvant être utilisés comme échantillons pour écrire leur code. Et cette chose est capable d'analyser le code que vous écrivez et indique comment l'améliorer.



Plusieurs astuces utiles

Compte tenu de l'éditeur, vous pouvez procéder au code d'écriture. PowerShell est une langue simple et, je pense que vous comprendrez rapidement quoi. Les commandes ici sont appelées Celtes et chacune d'elles se compose de deux parties. Vous êtes d'abord une action, par exemple, obtenir, définir, ajouter, invoquer, supprimer. Ensuite, il est indiqué que l'action est dirigée: Service, VM, AzureAccount, DHCPSserSetting. Chaque partie est séparée d'un autre trait d'union. Il s'avère, par exemple, get-processus. Ceci, au fait, Équipe utilequi affiche une liste de processus. Disons que si vous écrivez

obtenir du budge de processus *

nous verrons quelque chose:

Poignées NPM (K) PM (K) WS (k) VM (M) CPU (s) ID ProcessName

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

28 4 - 210844 - 201128 - 163 25.67 2792 Badthread

Maintenant, vous pouvez compléter le processus de suspension:

Il est possible de promouvoir de manière récursive, la vérité est déjà une logique plus complexe:

Vous pouvez également exécuter

Au fait, à chaque champ dans les options de la fenêtre compte ou l'ordinateur peut également être référé et compter des données. Ainsi, vous pouvez faire des sections entières. Ici, par exemple, une demande basée sur les numéros de téléphone:

Obtenir - Aduser - Filtre * - Propriétés OffrePhonephone | FT OfficePhone, userprincipalname

PowerShell en comparaison avec la chauve-souris

Parfois, la tâche peut être résolue à la fois la méthode ancienne grand-pères et aide PowerShell. Je recommande de ne pas être paresseux et d'utiliser PS, au moins simplement parce que vous l'étudierez plus rapidement et que vous pouvez appliquer dans des situations plus complexes. De plus, vous évaluerez progressivement sa syntaxe - plus élégante et plus cohérente. Voici quelques exemples, car les choses ont été faites plus tôt et comment elles peuvent être faites avec PowerShell.

Vous pouvez gérer les événements SQL Server étendus à l'aide du fournisseur SQL Server PowerShell. Le sous-dossier Xvent est situé sur le disque SQLServer. Vous pouvez accéder au dossier de l'une des manières suivantes.

Dans l'arbre de dossiers de Xevent, vous pouvez afficher des événements prolongés existants et des événements connexes, des objectifs et des prédicats. Par exemple, si dans le PS SQLSERVER: \\ XEFENT \\ ServerName \\ InstanceCename\u003e Dossier Entrez des sessions CD, appuyez sur la touche Entrée, entrez l'AIR, puis appuyez sur la touche Entrée, vous pouvez afficher la liste des sessions stockées dans cette instance. Vous pouvez également vérifier si la session est actuellement exécutée (et si elle est exécutée, alors pour quelle période) et si le début de la session est spécifié avec le début de l'instance.

Pour afficher les événements, leurs prédicats et leurs objectifs de session, vous pouvez modifier les noms des répertoires du nom de la session, puis voir le dossier d'événement ou le dossier d'objectif. Par exemple, pour afficher des événements et leurs prédicats associés à la session de suivi de la sécurité du système par défaut, dans le PS SQLSERVER: \\ XEFENT \\ SERVENAME \\ INSTANCENAME \\ Sessions\u003e Entrez la commande CD System_Health \\ Events, appuyez sur la touche Entrée, entrez le dir et appuyez sur la touche ENTER à nouveau..

Le fournisseur SQL Server PowerShell fournit une large gamme de fonctionnalités pour créer, modifier et gérer des événements étendus. La section suivante montre certains exemples simples Utilisez des scripts PowerShell avec des événements avancés.

    Les scripts doivent être exécutés à partir du PS SQLSERVER: \\\u003e Emplacement (entrez-le dessus ligne de commande SQLPS).

    Les scripts utilisent l'instance SQL Server par défaut.

    Les scripts doivent être stockés avec l'extension PS1.

    Politique eXÉCUTION POWERSHELL Doit permettre l'exécution des scripts. Pour définir la stratégie d'exécution, utilisez la cmdlet Set-exécutantpolicy. (Pour obtenir informations Complémentaires Entrer get-Help Set-ExecutionPolicy -Detailed et appuyez sur Entrée.)

Le script suivant crée une nouvelle session nommée «testsession».

#Script pour créer une session. Cd xevent $ h \u003d nom d'hôte CD $ H #ise l'instance par défaut. $ Store \u003d dir | où ($ _. displayName -Name -EQ "Par défaut") $ Session \u003d nouvel objet Microsoft.sqlserver.management.xevent.session -ArgumentList $ Store, "Testsession" $ event \u003d $ session.addevent ("sqlserver.file_written") $ Event.Addaction ("Package0.CallStack") $ session.create ()

Le script suivant ajoute la cible "tampon d'anneau" à la session créée dans l'exemple précédent. (Dans cet exemple, l'utilisation de la méthode est démontrée. Modifier.. N'oubliez pas que vous pouvez ajouter un objectif qu'après avoir créé une session.) #Script pour créer une session. Cd xevent $ h \u003d nom d'hôte CD $ H #ise l'instance par défaut. $ Store \u003d dir | Où ($ _ Un prédicat "Egal_I_unicode_string (chemin, n" c: \\ temp.log ")". $ Colonne \u003d $ store.sqlserverpackage.eventinfoset ["fichier_written"]. DataEventColumnInfoset ["Path"] $ opérande \u003d nouvel objet Microsoft.sqlserver.management.xevent.Predoperand -ArgumentList $ Colonne $ Valeur \u003d Nouveau objet Microsoft.SQLServer. Gestion.xevent.Predvalue -ArgumentList "C: \\ Temp.log" $ Comparer \u003d $ Store.package0package.predcompareinfoset ["égale_unicode_string"] $ prédicat \u003d nouvel objet microsoft.sqlserver.managementexpr -argumentlist $ Comparer, $ Opérande, $ Valeur $ Event.Sepredicate ($ prédicat) $ session.create ()

Notre revue est consacrée à l'utilisation opportunités clés Windows PowerShell pour effectuer diverses tâches administratives. Premièrement, considérez les outils de familiarisation intégrés avec les capacités de Windows PowerShell.

Connaissance avec Windows PowerShell

Vous êtes donc un administrateur qui doit maîtriser Windows PowerShell dès que possible. La première chose que vous prenez probablement (naturellement, en plus d'accéder à la documentation et système de référence) - Utilisez la commande d'aide (Fig. 1).

Examinant soigneusement les informations affichées à l'écran, nous allons comprendre les choses conceptuelles suivantes: dans Windows PowerShell, il existe des alias, des cmdlets, des fournisseurs, ainsi que des fichiers de référence. Alias \u200b\u200b(alias) servir à simplifier la saisie de la commande (par exemple, cLC. - Ceci est une équipe d'alias Contentement), CMDlets (cmdlet) est la mise en œuvre de toutes les commandes intégrées dans Windows PowerShell, les fournisseurs (fournisseur) fournissent un accès au système de fichiers, au registre, au magasin de certificats, etc. et les fichiers d'aide (helpfile) sont utilisés pour obtenir pour plus d'informations. Pour obtenir description détaillée La syntaxe suivante s'applique des commandes:

PS C:\u003e Aide à obtenir-commande

À la suite de l'exécution de cette équipe, nous obtiendrons description complète Équipes Get-Command., y compris son but, la syntaxe, les options, etc. (Fig. 2).


Pour obtenir la liste de toutes les commandes intégrées, utilisez la syntaxe suivante:

PS C:\u003e Get-Command

Notez que toutes les commandes se composent d'un verbe et d'un adjectif (par exemple, Obtenir du contenu, Export-console.) et toutes les commandes soutiennent système unifié Nommage - par exemple, pour compléter quelque chose utilise toujours l'arrêt de verbe, et non tuer, terminer, arrêter ou autres synonymes, ce qui simplifie considérablement l'étude caractéristiques PowerShell (Fig. 3).


Équipe Get-Service. Utilisé pour obtenir une liste de tous les services fonctionnant sur cet ordinateur. Par example,

PS C:\u003e Get-Service

renvoie une liste illustrée à la Fig. quatre.


Pour obtenir une liste de processus exécutés dans actuellement Sur l'ordinateur, l'équipe s'applique Get-processus. (Fig. 5):


PS C:\u003e Get-Process

Windows PowerShell est pris en charge achèvement automatique contribution. Pour vous assurer que, entrez Get-p. Et appuyez sur la touche TAB: Vous aurez la possibilité de sélectionner toutes les commandes commençant par les caractères entrés.

Pour plus d'informations environ un processus comme argument de commande Get-processus. Le nom de ce processus est défini (Fig. 6):

PS C:\u003e Explorateur de processus

Afin d'obtenir une liste de tous les processus, les noms qui commencent par un symbole spécifique, il suffit de spécifier ce symbole et "*" (Fig. 7):


PS C:\u003e Get-Process I *

Faites attention aux haut-parleurs contenant des informations - poignées, NMP (K), etc. Par défaut, les informations sont affichées comme une table, mais toutes les commandes renvoient des objets. Ces objets peuvent être transmis pour entrer d'autres commandes à l'aide du symbole "|" (Fig. 8):


PS C:\u003e Get-Process I * | Liste de format.

Maintenant, la liste de poursuite est disponible dans une autre vue. Pour plus d'informations sur divers formats, vous pouvez utiliser la commande suivante:

PS C:\u003e Format d'aide *

Autres formats possibles:

PS C:\u003e Get-Process I * | Format à l'échelle.

PS C:\u003e Get-Process I * | Format-coutume

Étant donné que la sortie éteint toujours l'objet, vous pouvez les manipuler pour effectuer des opérations supplémentaires, par exemple le filtrage:

PS C:\u003e Get-Process | Où ($ _. Handlecount -gt 400)

ou tri:

PS C:\u003e Get-Process | Où ($ _. Handlecount -gt 400) | Poignées d'objet de tri

Il peut y avoir une question complètement raisonnable: et d'où nous avons appris que l'objet décrivant le processus est une propriété handlocount.? Pour obtenir une liste de toutes les propriétés de l'objet, la commande suivante est utilisée (Fig. 9):


PS C:\u003e Get-Process | Get-Membre.

Effectuer une commande Get-Process | Get-Member - Lors du formatage par défaut, il n'est pas possible d'obtenir les données souhaitées. Nous transformons la commande à:

PS C:\u003e Get-Process | Société Get-Member | Liste de format.

Le résultat de sa transformation est illustré à la Fig. dix.


PS C:\u003e Get-Process | Société de tri-objet | Format-Table-Group Nom de l'entreprise, description, poignées

Le résultat de l'exécution de cette commande est illustré à la Fig. Onze.


Équipe processus d'arrêt. Vous permet d'arrêter processus d'exécution, par exemple:

PS C:\u003e Bloc-notes de get-process | Processus d'arrêt.

Cette fonctionnalité n'est pas toujours sûre, il est donc préférable d'utiliser de telles commandes avec l'option et qu'est-ce qui se passerait si.Ce qui montre ce qui se passera lors de l'exécution d'une commande ou d'une autre, mais en fait, l'équipe n'est pas exécutée:

PS C:\u003e Bloc-notes de get-process | Arrêt-processus -whatif

De plus, vous pouvez spécifier la nécessité de confirmer avant d'exécuter la commande:

PS C:\u003e Bloc-notes de get-process | Arrêt-processus -confirmon

Le résultat de l'exécution de la commande de confirmation est illustré à la Fig. 12


Dans le dernier exemple, nous obtenons une description des actions que la commande exécute et peut choisir, confirmer son exécution ou non.

De plus, vous pouvez créer vos propres fichiers de commandes, qui sont des fichiers avec l'extension * .ps1 dans laquelle les commandes PowerShell sont placées et les exécutent. Pour la sécurité, les fichiers par lots doivent être signés. Lorsque vous testez, vous pouvez désactiver l'exigence de départ uniquement des fichiers signés:

PS C:\u003e SET-EXPERANCULYPOLICY UNSFRICTEDITION

mais après la fin du test, n'oubliez pas d'activer cette option à l'aide de la commande suivante:

PS C:\u003e SET-ExecutionPolicy AllsInd

Après datation S. basé sur Windows PowerShell Voyons voir comment diverses tâches administratives peuvent être résolues à l'aide de cet utilitaire.

Travailler avec le système de fichiers

Une des tâches à partir de laquelle de nombreux spécialistes informatiques sont souvent confrontés à des manipulations de fichiers, telles que la copie, le déplacement, le renommage, la suppression de fichiers et des répertoires. En figue. 13 montre le secteur commandes Windows PowerShell utilisé pour les manipulations avec système de fichiers: nouvel article., article de copie., move-item., renommer-item. et retirer l'objet..


Contrairement à d'autres coquilles dans lesquelles il existe un ensemble de commandes pour les fichiers (par exemple, supprimer ou renommer), et un ensemble de répertoires (par exemple, RD ou MD), dans Windows PowerShell, un ensemble unique de commandes est utilisé pour les manipulations avec les deux fichiers et avec des catalogues.

La première équipe de notre exemple - nouveau-Item TextFiles -IntemType Annuaire - Il est utilisé pour créer un nouveau sous-répertoire de TextFiles dans le répertoire actuel. Si vous abaissez le paramètre -Templype, Windows PowerShell demandera ce que nous créons - fichier (fichier) ou répertoire (répertoire). Notez que l'équipe nouvel article. Il y a des alias - Ni. À la forme abrégée, notre première équipe ressemblera à ceci:

PS C:\u003e NI TextFiles -Iltype Annuaire

Ensuite, nous utilisons l'équipe article de copie. (Alias \u200b\u200b- cPI, CP, copie) Pour copier tous les fichiers avec l'extension * .txt sur le sous-répertoire TextFiles. Si vous appliquez cette commande dans fichier batchIl est logique de le rendre plus compréhensible en spécifiant les paramètres -Chemin. (source) et -Destination (destinataire):

PS C:\u003e Copier-élément -Path '. \\ *. TXT' -DESTINATION '. \\ TextFiles'

Après avoir exécuté la commande de copie, nous utilisons la commande. placé Aller au sous-répertoire de TextFiles. Avec l'aide de l'équipe renommer-item. Renommez le fichier psdemo.txt dans psdemo.bak. Si nécessaire, vous pouvez appliquer des options -Chemin. et -Nouveau nom.. Une fois que le fichier est renommé, transférez-le sur un niveau à l'aide de la commande. move-item.. Puis appliquez la commande placé, plus précisément - son alias sL. Aller dans un autre répertoire. Manipulation Avec le système de fichiers Nous complétions le retrait de l'ensemble du répertoire de TextFiles à l'aide de la commande. retirer l'objet.. Depuis le répertoire TextFiles contenant des fichiers. -Recurse.. Si cette option n'est pas spécifiée, Windows PowerShell demandera une confirmation avant d'exécuter la commande. retirer l'objet..

Travailler avec le registre

Tout en faisant paramètres différents Et tente de détecter tous les paramètres, nous devons parfois faire référence au registre système à la recherche de clés, de valeurs, etc. Avec l'utilisation de fonctionnalités Windows PowerShell, cette tâche peut être suffisamment résolue. façon simple. Les fonctionnalités Windows PowerShell sont illustrées à la Fig. Quatorze.


Notre première équipe utilise des alias sL. Pour remplir l'équipe placéPar lequel change notre emplacement actuel à partir du système de fichiers à la succursale HKEY_CURRENT_USER dans le registre système:

PS C: \\\u003e SL HKCU:

Notez que, comme dans le cas de la collaboration avec le système de fichiers, PowerShell applique un fournisseur spécial pour accéder au registre.

Les analogues de la commande ci-dessus sont des équipes:

PS C: \\\u003e SL Registry: HKCU

PS C: \\\u003e SL HKEY_CURRENT_USER

La commande suivante charge le contenu de l'ensemble de la branche de registre HKEY_CURRENT_USER dans la variable REG:

PS HKCU: \\\u003e $ reg \u003d gci. -Rec -a silencieusementContinuer.

Pour ce faire, nous utilisons l'équipe get-Childem. (Alias \u200b\u200b- gci), le principe de fonctionnement est similaire à travailler avec le système de fichiers. Le premier argument de cette équipe est "". - Indique que nous voulons obtenir le contenu de la branche de registre actuelle - HKEY_CURRENT_USER. Le deuxième argument est une réduction de l'option -Recurse. Et indique que nous avons besoin d'une collecte de données récursives de toutes les sous-titres de la branche de registre actuelle. Enfin, le troisième argument - -Aair silencieusementContinuer. - indique que l'équipe devrait continuer à être effectuée même en cas d'erreur liée à l'absence de droits d'accès à certains rapports du registre.

Prochaine équipe dans notre exemple:

PS HKCU: \\\u003e $ S \u003d $ reg | % (si (GP $ _. PSPATH) -Match 'PowerShell') ($ _. Pspath))

copies des données de registre contenant une chaîne 'PowerShell'. Nous commençons par le fait que nous prenons l'objet registre Et rediriger-le à la commande % qui est une équipe d'alias pour chaque.. Il effectue un contournement récursif de tous les éléments de registre de l'objet registre et à chaque étape sauve un élément dans un objet spécial PowerShell nommé ‘_’ . Dans des crochets frisés, nous indiquons les actions qui doivent être exécutées à chaque étape d'exécution de la commande. pour chaque.. À l'intérieur du bloc pour chaque. Nous utilisons le chèque si Afin de savoir si l'entrée de registre actuelle correspond à la propriété Pspath, que nous obtenons dans le cadre de l'appel de commandement obtenir-itemproperty. (par alias. gp.), notre critère - la présence de chaîne 'PowerShell'. Si la conformité est trouvée, nous retournons la valeur de la propriété pspath.. Toute la conformité trouvée persiste dans l'objet. S..

Travaillez avec le registre Nous complétions la redirection des résultats de recherche sélection-objet (par alias. sÉLECTIONNER) Et montrer les deux premiers résultats trouvés. En tant qu'exercice, vous pouvez rediriger les résultats finaux du fichier à l'aide de la commande. dossier.

Accès aux processus

Une autre tâche avec laquelle les spécialistes informatiques peuvent rencontrer sont liées à la détection d'anomalies dans le fonctionnement du système, par exemple des processus qui consomment de grandes quantités de mémoire. Voyons comment cette tâche est résolue outils Windows PowerShell (Fig. 15).


Dans la première équipe, nous enregistrons des informations sur tous les processus exécutés sur cet ordinateur, dans une variable $ AllProcs:

Ps c: \\\u003e $ allProcs \u003d get-processus

Après cela, nous redirigeons la commande d'informations reçue pour chaque.qui peut également être indiqué par alias % ou alors pour chaque.. Cette commande passe par tous les objets associés au processus et à chaque étape enregistre des informations dans l'objet interne. $_ . Cet objet peut être consacré par l'objet actuel. Comme paramètres pour la commande pour chaque. Nous spécifions la comparaison de la qualité de la propriété virtualMemorySize Avec la taille de la mémoire, vous êtes intéressé (20 Mo dans notre exemple). Si la valeur de cette propriété est pour l'objet actuel plus spécifié, nous affichons le nom du processus à l'écran. Notez que, dans PowerShell, les réductions principales sont prises en charge pour spécifier la taille - KB, MB, GB, qui est très utile car il n'est pas nécessaire de compter les zéros lors de la spécification des volumes de mémoire, des disques, etc.

Accès au journal du système

Lorsque vous essayez de détecter les causes des échecs, nous appliquons souvent au magazine système dans lequel l'ensemble est stocké. informations utiles Sur les événements qui ont eu lieu dans le système. Habituellement pour la recherche magazine système Viewer d'événements (EventVwr.exe) est utilisé. À PowerShell, nous pouvons utiliser les équipes intégrées, telles qu'une équipe get-EventLog., Pour étudier rapidement le contenu du journal du système (Fig. 16).


Notre première équipe chargée information clé Du journal système:

PS C: \\\u003e Get-EventLog -List

Sans utilisation d'option -Lister. PowerShell se référera à l'indication exacte du nom du journal du système. Dans notre exemple, nous voyons plusieurs points d'entrée dans le journal système: application, Internet Explorer., System, Shell d'alimentation Windows, etc. Notre prochaine équipe extrait des enregistrements du journal système qui est de type "Erreur":

PS C: \\\u003e $ Bad \u003d Get-EventLog "Système" | Où-objet ($ _. Entrée -EQ -eq "erreur")

Nous utilisons l'équipe get-EventLog.qui spécifient le paramètre "SYSTÈME" Pour extraire uniquement des enregistrements système, nous pourrions plus clairement définir cela en appliquant le paramètre logname.. Le contenu de la variable $ Mauvais. transmis à l'entrée de commande où-objet. Filtrer uniquement les enregistrements d'intérêt. Comme arguments de l'équipe où-objet. Nous indiquons que nous ne recherchons que des entrées qui possèdent une propriété. Entrée également "Erreur".

Nous complétons l'étude du journal du système avec la sortie sur l'écran cinq records récents sur les erreurs utilisant l'équipe pour cela sélection-objet avec paramètre -Durer.:

PS C: \\\u003e $ mauvais | Select-Object -Last 5

Accès à WMI

Comme nous le savons, Windows Management Instrumentation est mis en œuvre par Microsoft Common Information Model Standard (CMI). Dans la plupart des cas, WMI est utilisé par des experts informatiques pour obtenir des informations sur le matériel et logicielinstallé sur cet ordinateur. Comme nous le verrons dans l'exemple suivant, utilisation de Windows PowerShell facilite grandement l'accès aux informations stockées dans WMI (fig. 17).


Dans la première ligne, nous appliquons la commande get-WMIObject. Pour plus d'informations sur le fichier utilisé pour balancer la mémoire sur disque et enregistrer ces informations dans une variable $ PFU.:

PS C: \\\u003e $ PFU \u003d Get-WMIObject - Classe 'Win32_PageFileSage'

PS C: \\\u003e $ PFU | Get-Member -memberType | Où_object ($ _. Nom -nomatch '_')

Habituellement, pour trouver des informations sur une classe spécifique, vous pouvez utiliser la commande. get-Membre. Sans spécifier les paramètres, mais dans notre exemple, nous ne sommes intéressés que dans les propriétés disponibles et seuls ceux qui ne contiennent pas de symbole souligné dans le nom. Le lecteur attentionné peut avoir une question: comment nous avons appris sur l'existence d'une classe win32_PageFileSage.? Après tout, il est connu que plus de mille classes sont soutenues dans WMI, en plus de cela, un certain nombre d'applications ajoutent leurs cours. Vous pouvez appliquer la commande:

Ps c: \\\u003e get-wmiobject -list

pour obtenir la liste de tous existant dans le système de classe. Après avoir identifié les propriétés de la classe à la disposition des États-Unis, nous apportons le contenu des propriétés de l'intérêt pour nous à l'écran:

Ps c: \\\u003e $ pfu.caption; $ Pfu.Currentatusage.

La deuxième partie de notre exemple est dédiée à une autre classe - win32_diskdrive.qui stocke des informations sur les disques installés dans le système. Cette classe est un exemple de classe WMI contenant plus d'un objet. Dans notre exemple, nous définissons la valeur de la propriété. légende Premier disque installé dans le système:

PS C: \\\u003e $ dd.caption

Utilisation de fichiers XML

DANS dernièrement Les fichiers XML sont de plus en plus utilisés pour stocker des informations de configuration. Lorsque les données du fichier XML s'accumulent, il devient moins pratique pour la lecture. Ensuite, nous examinerons comment appliquer caractéristiques Windows PowerShell fonctionne avec des fichiers XML.

Par exemple, prenez une configuration fichier Windows Calendrier, qui ressemble à ceci (Fig. 18):

et effectuer les manipulations sur elle, présentées à la Fig. dix-neuf.

Dans la première ligne, nous téléchargeons le contenu de l'ensemble du fichier XML sur la variable à l'aide de la commande. obtenir du contenu:

PS C: \\\u003e $ doc \u003d get-content '. \\ Paramètres.xml'

Faites attention à l'application du type de données : Si vous ne spécifiez pas l'utilisation de ces données de type, il sera simplement chargé de texte dans la variable.

Dans la deuxième ligne, nous sélectionnons une branche de fichier XML spécifique - pour cette méthode est utilisée selectnodes. Un objet stockant XML Data and XPath-Description de l'adresse de la branche:

PS C: \\\u003e $ Paramètres \u003d $ doc.SelectNode ('CalendarSettings / X-racine / vcalendar')

Après cela, nous utilisons l'équipe foreach-objet. Pour obtenir la valeur de la propriété Nom. Pour tous les articles de cette branche.

Conclusion

Nous avons regardé le principal caractéristiques Windows PowerShell pour simplifier les tâches découlant des spécialistes informatiques. Comme nous le savons, ces tâches sont souvent résolues à l'aide de la langue de script VBScript. Windows PowerShell a la possibilité d'utiliser un code existant sur VBScript, et la migration est donc significativement simplifiée (Fig. 20).


Dans l'exemple ci-dessus, il est montré comment utiliser le code existant sur VBScript dans PowerShell. Dans la première ligne, nous créons un nouvel objet COM, ce qui est le noyau d'exécution des programmes de script - ScriptControl. Ensuite, nous indiquons que nous utiliserons la langue du script Visual Basic. Dans la troisième ligne, le code lui-même est spécifié sur VBScript - dans notre exemple, il s'agit d'un appel à la fonction MSGBox, mais dans la pratique, il est possible, par exemple, de télécharger le code de fichier. Enfin, dans la dernière ligne, nous ajoutons du code à VBScript à notre objet - et le code entre dans l'exécution.

Ressources réseau

Développeurs de produits Blog: http://blogs.msdn.com/powershell/.

Utilitaires, éditeurs et ajouts: http://www.powershell.com/.

Blog Dmitry Sotnikova à partir de la quête: http://dmirsotnikov.wordpress.com/.

PowerGadgets - Un exemple de capacités d'expansion de PowerShell illimitées:

Avez-vous aimé l'article? Partager avec des amis: