PowerShell
Classes PowerShell
Recherche…
Introduction
Une classe est un modèle de code de programme extensible permettant de créer des objets, fournissant des valeurs initiales pour l'état (variables membres) et des implémentations de comportement (fonctions ou méthodes membres). Une classe est un modèle pour un objet. Il est utilisé comme modèle pour définir la structure des objets. Un objet contient des données auxquelles nous accédons via des propriétés et que nous pouvons utiliser en utilisant des méthodes. PowerShell 5.0 a ajouté la possibilité de créer vos propres classes.
Méthodes et propriétés
class Person {
[string] $FirstName
[string] $LastName
[string] Greeting() {
return "Greetings, {0} {1}!" -f $this.FirstName, $this.LastName
}
}
$x = [Person]::new()
$x.FirstName = "Jane"
$x.LastName = "Doe"
$greeting = $x.Greeting() # "Greetings, Jane Doe!"
Liste des constructeurs disponibles pour une classe
Dans PowerShell 5.0+, vous pouvez répertorier les constructeurs disponibles en appelant la new
méthode statique sans parenthèses.
PS> [DateTime]::new
OverloadDefinitions
-------------------
datetime new(long ticks)
datetime new(long ticks, System.DateTimeKind kind)
datetime new(int year, int month, int day)
datetime new(int year, int month, int day, System.Globalization.Calendar calendar)
datetime new(int year, int month, int day, int hour, int minute, int second)
datetime new(int year, int month, int day, int hour, int minute, int second, System.DateTimeKind kind)
datetime new(int year, int month, int day, int hour, int minute, int second, System.Globalization.Calendar calendar)
datetime new(int year, int month, int day, int hour, int minute, int second, int millisecond)
datetime new(int year, int month, int day, int hour, int minute, int second, int millisecond, System.DateTimeKind kind)
datetime new(int year, int month, int day, int hour, int minute, int second, int millisecond,
System.Globalization.Calendar calendar)
datetime new(int year, int month, int day, int hour, int minute, int second, int millisecond,
System.Globalization.Calendar calendar, System.DateTimeKind kind)
C'est la même technique que vous pouvez utiliser pour répertorier les définitions de surcharge pour n'importe quelle méthode.
> 'abc'.CompareTo
OverloadDefinitions
-------------------
int CompareTo(System.Object value)
int CompareTo(string strB)
int IComparable.CompareTo(System.Object obj)
int IComparable[string].CompareTo(string other)
Pour les versions antérieures, vous pouvez créer votre propre fonction pour répertorier les constructeurs disponibles:
function Get-Constructor {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true)]
[type]$type
)
Process {
$type.GetConstructors() |
Format-Table -Wrap @{
n="$($type.Name) Constructors"
e={ ($_.GetParameters() | % { $_.ToString() }) -Join ", " }
}
}
}
Usage:
Get-Constructor System.DateTime
#Or [datetime] | Get-Constructor
DateTime Constructors
---------------------
Int64 ticks
Int64 ticks, System.DateTimeKind kind
Int32 year, Int32 month, Int32 day
Int32 year, Int32 month, Int32 day, System.Globalization.Calendar calendar
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, System.DateTimeKind kind
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, System.Globalization.Calendar calendar
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, Int32 millisecond
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, Int32 millisecond, System.DateTimeKind kind
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, Int32 millisecond, System.Globalization.Cal
endar calendar
Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second, Int32 millisecond, System.Globalization.Cal
endar calendar, System.DateTimeKind kind
Surcharge du constructeur
class Person {
[string] $Name
[int] $Age
Person([string] $Name) {
$this.Name = $Name
}
Person([string] $Name, [int]$Age) {
$this.Name = $Name
$this.Age = $Age
}
}
Obtenir tous les membres d'une instance
PS > Get-Member -InputObject $anObjectInstance
Cela retournera tous les membres de l'instance de type. Voici une partie d'un exemple de sortie pour l'instance String
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
CompareTo Method int CompareTo(System.Object value), int CompareTo(string strB), i...
Contains Method bool Contains(string value)
CopyTo Method void CopyTo(int sourceIndex, char[] destination, int destinationI...
EndsWith Method bool EndsWith(string value), bool EndsWith(string value, System.S...
Equals Method bool Equals(System.Object obj), bool Equals(string value), bool E...
GetEnumerator Method System.CharEnumerator GetEnumerator(), System.Collections.Generic...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
...
Modèle de classe de base
# Define a class
class TypeName
{
# Property with validate set
[ValidateSet("val1", "Val2")]
[string] $P1
# Static property
static [hashtable] $P2
# Hidden property does not show as result of Get-Member
hidden [int] $P3
# Constructor
TypeName ([string] $s)
{
$this.P1 = $s
}
# Static method
static [void] MemberMethod1([hashtable] $h)
{
[TypeName]::P2 = $h
}
# Instance method
[int] MemberMethod2([int] $i)
{
$this.P3 = $i
return $this.P3
}
}
Héritage de la classe parent à la classe enfant
class ParentClass
{
[string] $Message = "Its under the Parent Class"
[string] GetMessage()
{
return ("Message: {0}" -f $this.Message)
}
}
# Bar extends Foo and inherits its members
class ChildClass : ParentClass
{
}
$Inherit = [ChildClass]::new()
SO, $ Inherit.Message vous donnera le
"Son sous la classe parente"