Retour aux bases : Comprendre les objets PowerShell

PowerShell est un langage puissant. Mais qu’est-ce qui rend ce langage de script si puissant ? Les objets PowerShell. Quels sont ces objets magiques et comment PowerShell travaille-t-il avec eux ? Restez à l’écoute pour le découvrir.

PowerShell est un langage orienté objet et un shell. C’est une rupture par rapport aux shells traditionnels tels que cmd et Bash. Ces shells traditionnels se concentraient sur le texte, alias les chaînes, et bien qu’ils soient encore utiles, ils sont limités dans leurs capacités. Presque tout dans PowerShell est un objet.

Dans cet article, vous apprendrez quelques concepts clés en ce qui concerne les objets dans PowerShell. À la fin de cet article, vous aurez appris comment appliquer ces connaissances à votre propre script grâce à des exemples de code utiles et des visualisations.

Si vous êtes plutôt un apprenant visuel, n’hésitez pas à regarder la vidéo complémentaire de cet article ci-dessous.

Alors attachez vos ceintures ! Vous vous apprêtez à vivre une expérience mémorable qui vous aidera à maîtriser le concept d’objets dans PowerShell !

Prérequis

Dans cet article, vous allez apprendre à connaître les objets dans PowerShell grâce à une approche pratique. Si vous choisissez de suivre et d’essayer les exemples de code, Windows PowerShell 5.1 ou n’importe quelle version de PowerShell 6+ devrait fonctionner. Cependant, tous les exemples que vous verrez seront réalisés sur Windows 10 version 1903 avec Windows PowerShell 5.1.

Comprendre l’anatomie d’un objet

Les objets sont partout dans PowerShell. Vous vous demandez peut-être : « À quoi ressemble un objet ? » Dans cette première section, vous aurez un aperçu de ce dont est composé un objet. Une fois que vous aurez une vision globale de ce qui fait qu’un objet est un objet, vous pourrez plonger dans quelques exemples de code !

Découverte des membres d’un objet avec Get-Member

Les objets ont de nombreux types d’informations qui leur sont associés. Dans PowerShell, ces informations sont parfois appelées membres. Un membre d’un objet est un terme générique qui désigne toutes les informations associées à un objet.

Pour découvrir les informations d’un objet (les membres), vous pouvez utiliser la commande Get-Member. La commande Get-Member est une commande pratique qui vous permet de trouver les propriétés, les méthodes, etc. disponibles pour n’importe quel objet dans PowerShell.

Par exemple, disons que vous voulez afficher les membres d’un objet spécifique renvoyé par la commande Get-Service. Vous pouvez le faire en utilisant l’opérateur de redirection de sortie de la commande Get-Service vers la commande Get-Member, comme indiqué ci-dessous.

language-powershell
Get-Service -ServiceName 'BITS' | Get-Member

Habituez-vous à la commande Get-Member. Vous allez l’utiliser beaucoup dans cet article.

Chaque commande PowerShell qui produit une sortie peut être redirigée vers Get-Member. N’oubliez pas de placer cette commande en dernière position dans le pipeline, car elle écrasera la sortie avec sa propre sortie.

Types d’objets et classes

Sans entrer dans les détails de la programmation orientée objet, chaque objet a un « schéma ». Le « schéma » d’un objet est une sorte de modèle qui contient le plan pour créer un objet. Ce plan est appelé un type.

Chaque objet dans PowerShell a un type spécifique. Chaque objet a un plan à partir duquel il a été créé. Un type d’objet est défini par une classe. Considérez cet exemple ; 9 est un nombre, Bluegill est un poisson, Labrador est un chien, etc. La classe vient avant le type.

Les objets sont des instances de classes avec un type particulier.

Ne vous inquiétez pas de plonger profondément dans ce sujet. À moins que vous ne soyez un développeur de logiciels, vous n’avez probablement pas besoin de vous préoccuper trop de la sémantique à ce stade. Cependant, c’est un concept important à connaître à un niveau de base.

Propriétés

Le concept le plus important à comprendre à propos des objets est celui des propriétés. Les propriétés sont des attributs qui décrivent un objet. Un objet peut avoir de nombreuses propriétés différentes qui représentent divers attributs.

L’un des moyens les plus simples de découvrir quelles propriétés existent sur les objets est d’utiliser la cmdlet Get-Member. Vous pouvez voir ci-dessous qu’en utilisant le paramètre MemberType, Get-Member limitera la sortie renvoyée aux seuls objets. Vous verrez également qu’il affiche également le type d’objet System.ServiceProcess.ServiceController.

PS51> Get-Service | Get-Member -MemberType Property
Get-Service object properties

Maintenant, prenez l’exemple du service BITS mentionné précédemment et voyez les valeurs spécifiques des propriétés de cet objet en utilisant le code ci-dessous. La cmdlet Get-Member vous permet de trouver les noms des propriétés mais pas les valeurs. Cependant, en utilisant la cmdlet Select-Object de PowerShell, vous pouvez inspecter les valeurs des propriétés.

Vous pouvez voir ci-dessous que StartType est une propriété de l’objet. L’objet retourné a de nombreux membres différents, mais en utilisant la cmdlet Select-Object, il limite la sortie à ne montrer que cette propriété.

PS51> Get-Service -ServiceName 'BITS' | Select-Object -Property 'StartType'
BITS service start type

Les propriétés sont, de loin, les composants les plus courants d’un objet avec lesquels vous travaillerez dans PowerShell.

Alias

Certaines propriétés ont un MemberType de Alias. Les alias sont des pseudonymes pour les noms des propriétés. Ils peuvent parfois donner des noms de propriétés plus intuitifs.

Vous pouvez voir un exemple d’objet avec des alias en utilisant à nouveau la cmdlet Get-Service comme indiqué ci-dessous. La propriété Name est un alias de ServiceName et RequiredServices est un alias de la propriété ServicesDependedOn.

PS51> Get-Service | Get-Member -MemberType 'AliasProperty'
AliasProperty members on service objects

Lorsqu’une propriété a un alias, vous pouvez référencer la valeur de cette propriété en utilisant le nom de l’alias plutôt que le nom réel de la propriété. Dans cet exemple, un attribut descriptif comme Name et RequiredServices est plus intuitif et plus facile à taper que ServiceName et ServicesDependedOn.

Vous pouvez voir un exemple de référencement de ces alias ci-dessous.

# Utilisez AliasProperty à la place d'un nom de propriété réel
PS51> $Svc = Get-Service -ServiceName 'BITS' # Objet sur lequel vous travaillez
PS51> $Svc.Name
BITS
PS51> $Svc.RequiredServices

Vous devriez voir la sortie suivante. Remarquez à nouveau que vous gardez le code court, propre et concis. Les informations sont les mêmes, que vous utilisiez l’alias ou non :

Properties on the BITS service object

Méthodes

Les propriétés ne sont qu’un élément qui crée un objet ; les méthodes sont également un concept important à comprendre. Les méthodes sont les actions qui peuvent être effectuées sur un objet. Comme les propriétés, vous pouvez découvrir les méthodes sur un objet en utilisant la cmdlet Get-Member.

Pour limiter la sortie de Get-Member aux seules méthodes, définissez la valeur du paramètre MemberType sur Method comme indiqué ci-dessous.

PS51> Get-Service | Get-Member -MemberType 'Method'
Methods on service objects

En tant que débutant, vous utiliserez beaucoup moins fréquemment les méthodes que les propriétés.

Autres types de membres

Les propriétés, les méthodes et les alias ne sont pas les seuls types de membres qu’un objet peut avoir. Cependant, ils seront, de loin, les types de membres les plus courants avec lesquels vous travaillerez.

Pour plus de complétude, voici quelques autres types de membres que vous pourriez rencontrer.

  • Propriété de script – Elles sont utilisées pour calculer les valeurs des propriétés.
  • Propriété de note – Elles sont utilisées pour les noms de propriété statiques.
  • Ensembles de propriétés – Ce sont comme des alias qui contiennent exactement ce que le nom suggère ; des ensembles de propriétés. Par exemple, vous avez créé une propriété personnalisée appelée Specs pour votre fonction Get-CompInfo. Specs est en réalité un sous-ensemble des propriétés Cpu, Mem, Hdd, IP. Le but principal des ensembles de propriétés est de fournir un seul nom de propriété pour concaténer un groupe de propriétés.

Il est également important de mentionner le concept d’événements d’objets. Les événements sont en dehors du champ d’application de cet article.

Travailler avec des objets dans PowerShell

Maintenant que vous avez une compréhension de base de ce qu’est un objet, mettons-nous à l’œuvre et passons au code.

De nombreuses commandes PowerShell produisent une sortie, mais parfois vous n’avez pas besoin de voir toute cette sortie. Vous devez limiter ou manipuler cette sortie d’une manière ou d’une autre. Heureusement, PowerShell dispose de quelques commandes différentes qui vous permettent de le faire.

Commençons par un exemple d’énumération de tous les services sur l’ordinateur local en utilisant la cmdlet Get-Service comme indiqué ci-dessous. Vous pouvez voir par la sortie que de nombreux services (objets) différents sont renvoyés.

PS51> Get-Service -ServiceName *
Using a wildcard on ServiceName parameter

Contrôler les propriétés des objets retournés

Poursuivons avec l’exemple de Get-Service, peut-être que vous n’avez pas besoin de voir chaque propriété. Au lieu de cela, vous avez juste besoin de voir les propriétés Status et DisplayName. Pour limiter les propriétés renvoyées, vous utiliseriez la cmdlet Select-Object.

Le cmdlet Select-Object « filtre » diverses propriétés pour qu’elles ne soient pas renvoyées au pipeline PowerShell. Pour « filtrer » les propriétés d’objet à renvoyer, vous pouvez utiliser le paramètre Property et spécifier un ensemble de une ou plusieurs propriétés séparées par des virgules.

Vous pouvez voir ci-dessous un exemple de retour uniquement des propriétés Status et DisplayName.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName'
Showing the Status and DisplayName properties

Tri d’objets

Peut-être que vous construisez un rapport pour montrer les services et leur statut. Pour une digestion facile de l’information, vous souhaitez trier les objets renvoyés par la valeur de la propriété Status. Pour ce faire, vous pouvez utiliser le cmdlet Sort-Object.

Le cmdlet Sort-Object vous permet de collecter tous les objets renvoyés, puis de les afficher dans l’ordre que vous définissez.

Par exemple, en utilisant le paramètre Property de Sort-Object, vous pouvez spécifier une ou plusieurs propriétés sur les objets entrants de Get-Service à trier par. PowerShell passera chaque objet au cmdlet Sort-Object, puis les renverra triés par la valeur de la propriété.

Vous pouvez voir ci-dessous un exemple de retour de tous les objets de service triés par leur Status correctement renvoyés dans l’ordre décroissant en utilisant le paramètre de commutation Descending de Sort-Object.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName' |
	Sort-Object -Property 'Status' -Descending
Using Sort-Object to sort service objects by Status in descending order

Le pipe [ | ] dans PowerShell est l’une des quelques techniques de continuation de ligne que vous devriez utiliser lorsque nécessaire. Utilisez-le plutôt que des backticks.

Filtrage des objets

Peut-être décidez-vous de ne pas vouloir voir tous les services sur une machine. Au lieu de cela, vous devez limiter la sortie en fonction de critères spécifiques. Une façon de filtrer le nombre d’objets retournés est d’utiliser le cmdlet Where-Object.

Tandis que le cmdlet Select-Object limite la sortie des propriétés spécifiques, le cmdlet Where-Object limite la sortie des objets entiers.

Le cmdlet Where-Object est similaire en fonction à la clause WHERE de SQL. Il agit comme un filtre de la source originale pour ne renvoyer que certains objets qui correspondent à des critères spécifiques.

Peut-être avez-vous décidé que vous ne voulez que des objets renvoyés avec une valeur de propriété Status de Running et seulement ceux avec une valeur de propriété DisplayName qui commence par A.

Vous pouvez voir dans le prochain extrait de code qu’une référence Where-Object a été insérée entre Select-Object et Sort-Object dans l’ordre du pipeline. En utilisant une valeur de scriptblock avec une condition requise créée pour que chaque objet la remplisse via le paramètre FilterScript, vous pouvez créer n’importe quel type de requête que vous souhaitez.

Consultez le cmdlet Format-Table si vous souhaitez manipuler la façon dont la sortie est renvoyée à la console.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object -FilterScript {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Format-Table -AutoSize
Formatting object output

Compter et calculer la moyenne des objets retournés

La commande Get-Service renvoie de nombreux objets différents. En utilisant la cmdlet Where-Object, vous avez filtré une partie de ces objets mais combien ? Introduisons la cmdlet Measure-Object.

La cmdlet Measure-Object est une commande PowerShell qui, parmi d’autres opérations mathématiques, peut compter le nombre d’objets qu’elle reçoit via le pipeline.

Peut-être aimeriez-vous savoir combien d’objets sont finalement renvoyés lorsque vos commandes combinées s’exécutent. Vous pouvez rediriger la sortie finale vers la cmdlet Measure-Object pour trouver le nombre total d’objets renvoyés comme indiqué ci-dessous.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Measure-Object

Une fois que les commandes ont fini de traiter, vous verrez, dans ce cas, qu’il y avait 21 objets initialement renvoyés créés avec la cmdlet Get-Service.

Finding the number of objects returned with Measure-Object

Peut-être recherchez-vous seulement le nombre total d’objets renvoyés. Comme la commande Measure-Object renvoie le nombre total d’objets trouvés via une propriété Count, vous pouvez à nouveau faire référence à la cmdlet Select-Object. Mais cette fois, ne renvoyez que la propriété Count.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending |
			Measure-Object |
				# Nous recommençons, filtrant d'abord, formattant en dernier
				Select-Object -Property 'Count'
Only returning the count property

Agir sur les Objets avec des Boucles

À mesure que chaque objet est traité via le pipeline, vous pouvez agir sur chaque objet avec une boucle. Il existe différents types de boucles en PowerShell, mais en restant sur des exemples de pipeline, regardons la cmdlet ForEach-Object.

La cmdlet ForEach-Object vous permet d’agir sur chaque objet qui passe par elle. Ce comportement est mieux expliqué avec un exemple.

Continuant à utiliser un exemple avec Get-Service, peut-être souhaitez-vous trouver tous les services sur un ordinateur Windows dont le nom commence par « Windows » et qui sont en cours d’exécution. En utilisant la cmdlet Where-Object, vous pouvez créer les conditions comme vous l’avez fait précédemment.

Where-Object -FilterScript {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'}

Mais maintenant, au lieu de renvoyer des objets entiers ou même quelques propriétés, vous souhaitez renvoyer la chaîne <ServiceName> is running pour chaque objet en utilisant le code **Write-Host -ForegroundColor 'Yellow' <ServiceName> "is running".

Vous manipulez maintenant la sortie et créez votre propre chaîne. La seule façon de le faire est d’utiliser la cmdlet ForEach-Object comme indiqué ci-dessous. Vous pouvez voir que pour chaque objet retourné via Where-Object, PowerShell exécute le code Write-Host -ForegroundColor 'Yellow' $_.DisplayName "is running".

PS51> Get-Service -ServiceName * |
	Where-Object {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'} | 
		Foreach-Object {
			Write-Host -ForegroundColor 'Yellow' $_.DisplayName "is running"
		}
Filtering by property with Where-Object

La cmdlet ForEach-Object est utile de plusieurs manières. Par exemple, vous pourriez intégrer une logique supplémentaire pour énumérer chaque objet de service trouvé et, en fonction d’une valeur de propriété, changer la couleur et le libellé de la chaîne de sortie, voire effectuer une action supplémentaire comme démarrer un service arrêté.

Imaginez les possibilités que cela vous offre ! Avec un peu de réflexion et de planification, vous pourriez créer un script qui prend une commande et l’exécute sans effort sur de nombreux objets.

Comparaison d’objets

Parfois, vous devez examiner deux objets et comparer les valeurs de propriété.

Peut-être avez-vous deux systèmes sur votre réseau qui sont presque identiques. Cependant, vous rencontrez ce que vous pensez être un problème de configuration avec un service sur l’un des deux systèmes.

Vous en concluez que puisque ces systèmes sont dans différentes parties de votre réseau, vous devrez utiliser des commandes à distance pour recueillir les informations dans une session PowerShell. Vous ouvrez votre éditeur préféré et créez un script. Ce script, comme vous pouvez le voir ci-dessous, se connecte à deux serveurs différents et énumère tous les processus sur chacun d’eux.

$A = 'Svr01a.contoso.com'
$B = 'Svr02b.contoso.com'

$ProcA = Invoke-Command -Computername $A -Scriptblock {Get-Process -Name *}
$ProcB = Invoke-Command -ComputerName $B -Scriptblock {Get-Process -Name *}

Vous avez maintenant capturé tous les processus sur chaque ordinateur dans les variables $ProcA et $ProcB. Vous devez maintenant les comparer. Vous pourriez parcourir manuellement chaque ensemble de processus, ou vous pourriez le faire facilement en utilisant une cmdlet appelée Compare-Object.

Compare-Object vous permet de comparer les valeurs de propriété de deux objets différents. Cette cmdlet lit chaque propriété dans chaque objet, examine leurs valeurs et retourne ensuite ce qui est différent, par défaut et aussi ce qui est identique.

Pour utiliser Compare-Object, spécifiez un paramètre ReferenceObject et un paramètre DifferenceObject en fournissant chaque objet comme valeurs de paramètre comme indiqué ci-dessous.

Compare-Object -ReferenceObject $ProcA -DifferenceObject $ProcB

Par défaut, Compare-Object ne retournera que les différences dans les objets indiqués par la propriété SideIndicator. Les symboles ou indicateurs de côté utilisés sont >, < , & = pour montrer les correspondances des objets en cours de comparaison.

Running Compare-Object

Vous pouvez utiliser le paramètre de commutation InclureEgal avec Compare-Object pour retourner les propriétés d’objet qui sont les mêmes. Si tel est le cas, vous verrez == en tant qu’indicateur de côté. De même, vous pouvez utiliser ExclureDifférent pour exclure les différences.

Le cmdlet Compare-Object est un cmdlet très utile. Si vous souhaitez en savoir plus, assurez-vous de visiter la documentation en ligne.

Travailler avec des objets personnalisés

Maintenant que vous avez une bonne compréhension de ce que sont les objets et comment vous pouvez travailler avec eux, il est temps de créer vos propres objets!

Créer des objets personnalisés à partir de tables de hachage

Une façon de créer vos propres objets est d’utiliser des tables de hachage. Les tables de hachage sont des ensembles de paires clé/valeur précisément ce dont vous avez besoin pour créer des propriétés pour un objet.

Commençons par créer un objet PowerShell personnalisé avec quelques clés/valeurs en utilisant une table de hachage. Dans l’exemple ci-dessous, vous créez une table de hachage. Cette table de hachage représente un seul objet et ses propriétés. Une fois que la table de hachage $CarHashtable a été définie, vous pouvez alors utiliser le PsCustomObject accélérateur de type.

Le type accélérateur pscustomobject est un moyen rapide de créer une instance de la classe pscustomobject. Ce comportement est appelé casting.

À la fin du morceau de code ci-dessous, vous avez un objet ($CarObject) de type pscustomobject avec cinq propriétés lui étant assignées.

## Définir la table de hachage
$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}

## Créer un objet
$CarObject = [PsCustomObject]$CarHashTable

Alternativement, vous pouvez également utiliser la cmdlet New-Object. En utilisant la même table de hachage, au lieu d’utiliser l’accélérateur de type pscustomobject, vous pourriez le faire de manière détaillée avec New-Object. Un exemple est montré ci-dessous.

$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}
#Créer un objet
$CarObject = New-Object -TypeName PsObject -Properties $CarHashtable

Lorsque $CarObject est créé, vous pouvez maintenant voir ci-dessous que vous pouvez référencer chacune des propriétés comme si elle venait d’une cmdlet PowerShell intégrée comme Get-Service.

Inspecting object properties

Ajouter et supprimer des propriétés

Non seulement vous pouvez créer des objets personnalisés, mais vous pouvez également y ajouter. Vous vous souvenez d’avoir utilisé la cmdlet Get-Member? Get-Member a un équivalent appelé Add-Member. La cmdlet Add-Member ne répertorie pas les membres, elle les ajoute.

En utilisant l’objet personnalisé précédemment créé comme exemple, peut-être souhaitez-vous ajouter une propriété d’année de modèle à cet objet. Vous pouvez le faire en redirigeant un objet vers Add-Member en spécifiant :

  • Le type de membre (dans ce cas, un simple \texttt{NoteProperty})
  • Le nom de la propriété (\texttt{Year})
  • La valeur de la propriété (\texttt{Value})

Vous pouvez voir un exemple ci-dessous.

PS51> $CarObject | Add-Member -MemberType NoteProperty -Name 'Year' -Value '2010'

Vous pouvez voir ci-dessous à nouveau que cela apparaît comme n’importe quelle autre propriété.

Adding and viewing a new property

Vous pouvez utiliser des techniques similaires pour ajouter de nombreux types de membres différents. Si vous souhaitez explorer davantage par vous-même, jetez un œil à la \texttt{documentation} \diy7{Add-Member}

Vous pouvez tout aussi facilement supprimer un membre d’un objet. Bien qu’il n’y ait pas de cmdlet \texttt{Remove-Member}, vous pouvez toujours le faire en appelant la méthode \texttt{Remove()} sur l’objet comme indiqué ci-dessous. Vous en apprendrez plus sur les méthodes dans la prochaine section.

PS51> $CarObject.psobject.properties.remove('Drivetrain')

Introduction rapide aux Méthodes

Tout au long de cet article, vous avez travaillé avec des propriétés. Vous avez lu des valeurs de propriété, créé vos propres propriétés et les avez ajoutées et supprimées. Mais vous n’avez pas vraiment agi sur l’environnement. Vous n’avez rien changé sur le serveur. Passons à l’action avec les \diy11{méthodes}!

Les méthodes effectuent une sorte d’action. Les objets stockent des informations tandis que les méthodes agissent.

Par exemple, vous connaissez peut-être la commande \texttt{Stop-Service}. Cette commande arrête un service Windows. Pour ce faire, vous pouvez envoyer un objet de \texttt{Get-Service} directement à \texttt{Stop-Service} pour que cela se produise.

Vous pouvez voir ci-dessous un exemple d’arrêt du service BITS. Cet exemple arrête le service BITS puis vérifie son état pour s’assurer qu’il est arrêté. Vous avez effectué deux actions avec des cmdlets : arrêter le service et vérifier son état.

PS51> Get-Service -ServiceName 'BITS' | Stop-Service
PS51> Get-Service -ServiceName 'BITS'

Au lieu d’exécuter Get-Service deux fois et d’exécuter une commande séparée, Stop-Service, vous pouvez plutôt utiliser des méthodes intégrées aux objets de service. De nombreux objets ont des méthodes. Dans ce cas, Stop-Service et cette deuxième référence à Get-Service ne sont même pas nécessaires.

Running commands to stop and start a service

En invoquant des méthodes sur l’objet de service lui-même, vous pouvez arrêter et récupérer l’état mis à jour tout en utilisant un seul objet. Vous pouvez voir cela en action ci-dessous. Remarquez qu’en utilisant les méthodes  Stop()  et Start(), vous pouvez manipuler le service exactement comme le faisaient les commandes.

Pour garantir que la valeur de la propriété Status est à jour après que l’état du service a changé, vous pouvez invoquer la méthode Refresh() qui agit comme un autre appel de commande Get-Service.

## Arrêtez BITS sur la machine locale
$Svc = Get-Service -ServiceName 'BITS' #Objet sur lequel vous travaillez
$Svc.Stop() #Méthode / action que vous effectuez
$Svc.Refresh() #Méthode / action que vous effectuez
$Svc.Status #Propriété

#Démarrez BITS sur la machine locale
$Svc = Get-Service -ServiceName 'BITS' #Objet sur lequel vous travaillez
$Svc.Start() #Méthode / action que vous effectuez
$Svc.Refresh() #Méthode / action que vous effectuez
$Svc.Status #Propriété

Vous devriez voir la sortie suivante:

Executing methods on the service object

Pour plus d’informations sur les méthodes, consultez le sujet d’aide about_Methods.

Conclusion

Vous pouvez faire beaucoup de choses avec les objets en PowerShell. Cet article était juste une introduction pour vous aider à commencer à les apprendre. Dans cet article, vous avez appris les bases de ce que sont les objets, comment agir, les manipuler et les créer. Vous avez vu quelques scénarios différents qui vous ont montré comment effectuer ces tâches avec des exemples de code. Restez calme et apprenez PowerShell. Merci de votre lecture !

Source:
https://adamtheautomator.com/powershell-objects/