Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Brève description
Décrit comment utiliser des méthodes pour effectuer des actions sur des objets dans PowerShell.
Description longue
PowerShell utilise des objets pour représenter les éléments dans les magasins de données ou l’état de l’ordinateur. Par exemple, les objets FileInfo représentent les fichiers dans les lecteurs de système de fichiers et les objets ProcessInfo représentent les processus sur l’ordinateur.
Les objets ont des propriétés, qui stockent des données sur l’objet et des méthodes qui vous permettent de modifier l’objet.
Une « méthode » est un ensemble d’instructions qui spécifient une action que vous pouvez effectuer sur l’objet. Par exemple, l’objet FileInfo inclut la méthode CopyTo qui copie le fichier que l’objet FileInfo représente.
Pour obtenir les méthodes d’un objet, utilisez l’applet de commande Get-Member. Utilisez sa propriété MemberType avec la valeur « Method ». La commande suivante obtient les méthodes des objets de traitement.
Get-Process | Get-Member -MemberType Method
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
BeginErrorReadLine Method System.Void BeginErrorReadLine()
BeginOutputReadLine Method System.Void BeginOutputReadLine()
...
Kill Method System.Void Kill()
Refresh Method System.Void Refresh()
Start Method bool Start()
ToString Method string ToString()
WaitForExit Method bool WaitForExit(int milliseconds), ...
WaitForInputIdle Method bool WaitForInputIdle(int millisecon...
Pour effectuer ou « appeler » une méthode d’un objet, tapez un point (.), le nom de la méthode et un ensemble de parenthèses « () ». Si la méthode a des arguments, placez les valeurs d’argument entre parenthèses. Les parenthèses sont requises pour chaque appel de méthode, même en l’absence d’arguments. Si la méthode accepte plusieurs arguments, elles doivent être séparées par des virgules.
Par exemple, la commande suivante appelle la méthode Kill des processus pour mettre fin au processus du Bloc-notes sur l’ordinateur.
$notepad = Get-Process notepad
$notepad.Kill()
Cet exemple peut être raccourci en combinant les instructions ci-dessus.
(Get-Process Notepad).Kill()
La commande Get-Process est placée entre parenthèses pour s’assurer qu’elle s’exécute avant l’appel de la méthode Kill. La méthode Kill est ensuite appelée sur l’objet Process retourné.
Une autre méthode très utile est la méthode Replace de chaînes. La méthode Replace remplace le texte dans une chaîne. Dans l’exemple ci-dessous, le point (.) peut être placé immédiatement après la citation de fin de la chaîne.
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
Comme indiqué dans les exemples précédents, vous pouvez appeler une méthode sur un objet que vous obtenez à l’aide d’une commande, d’un objet dans une variable ou de tout ce qui entraîne un objet (comme une chaîne entre guillemets).
À compter de PowerShell 4.0, l’appel de méthode à l’aide des noms de méthodes dynamiques est pris en charge.
En savoir plus sur les méthodes
Pour trouver les définitions des méthodes d’un objet, consultez la rubrique d’aide du type d’objet dans MSDN et recherchez sa page de méthodes. Par exemple, la page suivante décrit les méthodes des objets de processus System.Diagnostics.Process.
Pour déterminer les arguments d’une méthode, passez en revue la définition de la méthode, comme le diagramme de syntaxe d’une applet de commande PowerShell.
Une définition de méthode peut avoir une ou plusieurs signatures de méthode, qui sont similaires aux ensembles de paramètres d’applets de commande PowerShell. Les signatures affichent tous les formats valides de commandes à appeler la méthode.
Par exemple, la méthode CopyTo de la classe FileInfo contient les deux signatures de méthode suivantes :
CopyTo(String destFileName)
CopyTo(String destFileName, Boolean overwrite)
La première signature de méthode prend le nom du fichier de destination (et un chemin d’accès). L’exemple suivant utilise la première méthode CopyTo pour copier le fichier Final.txt dans le répertoire C:\Bin.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Remarque
Contrairement à l’argument powerShell mode, les méthodes d’objet s’exécutent en mode expression, qui est un pass-through au .NET Framework sur lequel PowerShell est basé. Dans expression mode arguments de mots nus (chaînes non mises en guillemets) ne sont pas autorisés. Vous pouvez le voir dans le chemin de différence en tant que paramètre, par rapport au chemin d’accès en tant qu’argument. Vous pouvez en savoir plus sur les modes d’analyse dans about_Parsing
La deuxième signature de méthode prend un nom de fichier de destination et une valeur booléenne qui détermine si le fichier de destination doit être écrasé, s’il existe déjà.
L’exemple suivant utilise la deuxième méthode CopyTo pour copier le fichier Final.txt dans le répertoire C:\Bin et remplacer les fichiers existants.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Méthodes des objets et collections Scalar
Les méthodes d’un objet (« scalaire ») d’un type particulier sont souvent différentes des méthodes d’une collection d’objets du même type.
Par exemple, chaque processus a une Kill méthode, mais une collection de processus n’a pas de méthode Kill.
À partir de PowerShell 3.0, PowerShell tente d’empêcher les erreurs de script résultant des différentes méthodes des objets scalaires et des collections.
Si vous soumettez une collection, mais que vous demandez une méthode qui n’existe que sur des objets uniques (« scalaires »), PowerShell appelle la méthode sur chaque objet de la collection.
Si la méthode existe sur les objets individuels et sur la collection, seule la méthode de la collection est appelée.
Cette fonctionnalité fonctionne également sur les propriétés des objets scalaires et des collections. Pour plus d’informations, reportez-vous à la section about_Properties.
Exemples
L’exemple suivant exécute la méthode Kill d’objets de processus individuels sur une collection d’objets de processus. Cet exemple fonctionne uniquement sur PowerShell 3.0 et les versions ultérieures de PowerShell.
La première commande démarre trois instances du processus du Bloc-notes. La deuxième commande utilise la Get-Process commande pour obtenir les trois instances du processus du Bloc-notes et les enregistrer dans la variable $p.
Notepad; Notepad; Notepad
$p = Get-Process Notepad
La troisième commande utilise la propriété Count de toutes les collections pour vérifier qu’il y a trois processus dans la variable $p.
$p.Count
3
La quatrième commande exécute la méthode Kill sur les trois processus de la variable $p.
Cette commande fonctionne même si une collection de processus n’a pas de méthode Kill.
$p.Kill()
La cinquième commande utilise la commande Get-Process pour confirmer que la Kill commande a fonctionné.
Get-Process Notepad
Get-Process : Cannot find a process with the name "notepad". Verify the proc
ess name and call the cmdlet again.
At line:1 char:12
+ Get-Process <<<< notepad
+ CategoryInfo : ObjectNotFound: (notepad:String) [Get-Process]
, ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShel
l.Commands.GetProcessCommand
Pour effectuer la même tâche sur PowerShell 2.0, utilisez l’applet Foreach-Object de commande pour exécuter la méthode sur chaque objet de la collection.
$p | ForEach-Object {$_.Kill()}
Méthodes ForEach et Where
À partir de PowerShell 4.0, le filtrage des collections à l’aide d’une syntaxe de méthode est pris en charge. Cela permet d’utiliser deux nouvelles méthodes lors de la gestion des collections ForEach et des Where.
Vous pouvez en savoir plus sur ces méthodes dans about_arrays