PowerShell
PowerShell-Klassen
Suche…
Einführung
Eine Klasse ist eine erweiterbare Programmcode-Vorlage zum Erstellen von Objekten, zur Bereitstellung von Anfangswerten für Status (Elementvariablen) und Implementierungen von Verhalten (Elementfunktionen oder -methoden). Eine Klasse ist ein Entwurf für ein Objekt. Es wird als Modell verwendet, um die Struktur von Objekten zu definieren. Ein Objekt enthält Daten, auf die wir über Eigenschaften zugreifen und an denen mit Methoden gearbeitet werden kann. In PowerShell 5.0 wurde die Möglichkeit hinzugefügt, eigene Klassen zu erstellen.
Methoden und Eigenschaften
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!"
Verfügbare Konstruktoren für eine Klasse auflisten
In PowerShell 5.0+ können Sie verfügbare Konstruktoren auflisten, indem Sie die statische new
Methode ohne Klammern aufrufen.
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)
Mit dieser Methode können Sie Überladungsdefinitionen für jede Methode auflisten
> 'abc'.CompareTo
OverloadDefinitions
-------------------
int CompareTo(System.Object value)
int CompareTo(string strB)
int IComparable.CompareTo(System.Object obj)
int IComparable[string].CompareTo(string other)
Für frühere Versionen können Sie eine eigene Funktion erstellen, um verfügbare Konstruktoren aufzulisten:
function Get-Constructor {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true)]
[type]$type
)
Process {
$type.GetConstructors() |
Format-Table -Wrap @{
n="$($type.Name) Constructors"
e={ ($_.GetParameters() | % { $_.ToString() }) -Join ", " }
}
}
}
Verwendungszweck:
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
Konstruktor überladen
class Person {
[string] $Name
[int] $Age
Person([string] $Name) {
$this.Name = $Name
}
Person([string] $Name, [int]$Age) {
$this.Name = $Name
$this.Age = $Age
}
}
Holen Sie sich alle Mitglieder einer Instanz
PS > Get-Member -InputObject $anObjectInstance
Dadurch werden alle Mitglieder der Typinstanz zurückgegeben. Hier ist ein Teil einer Beispielausgabe für die String-Instanz
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()
...
Grundlegende Klassenvorlage
# 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
}
}
Vererbung von übergeordneter Klasse zu untergeordneter Klasse
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()
Also , $ Inherit.Message gibt Ihnen die
"Es ist unter der Elternklasse"