Spezielle Daten

[System.Net.Mail.MailAddress]‘Some User<some.person@somewhere.com>‘

Hier mal beispielhaft ein Link zur Dokumentation dieser Klasse im Namespace System: https://msdn.microsoft.com/de-de/library/system.net.mail.mailaddress.aspx

Sortieren mit Typen

1,10,3,2 | Sort-Object
# 1
# 2
# 3
# 10
'1','10','3','2' | Sort-Object
# 1
# 10
# 2
# 3
# type conversion:
'1','10','3','2' | Sort-Object -Property { [Double]$_ }
# 1
# 2
# 3
# 10

Konvertieren

$binary = ‘1110111000010001’
[System.Convert]::ToInt64($binary, 2)
# 60945

0xFFFF
# 65535

Methode Großschreibung (und : entfernen)

$DriveList = 'a', 'b:', 'd', 'Z', 'x:'
$DriveList | ForEach-Object { $_.ToUpper()[0] } | Sort-Object

Zufallszahlen:

Get-Random -Min 100 -Max 200  # ehemals aus den PSCX - jetzt PS Utility

oder mit .NET-Klasse System.Random

$rnd = New-Object System.Random
$zufallszahl = $rnd.next(100)+100
$zufallszahl

Finde Statische Methoden

# [DateTime]::
[DateTime] | Get-Member -Static
[DateTime]::IsLeapYear(2012)

Statische Eigenschaften nutzen

[System.Environment] | Get-Member -Static -MemberType *property
[System.Environment]::SystemDirectory
[System.Environment]::OSVersion
[System.Environment]::OSVersion.ServicePack    # Null ab Windows 8
[System.Environment]::OSVersion.Version
[System.Environment]::Is64BitOperatingSystem
[System.Environment]::MachineName

Dot.Net-Link

[System.Enum]::GetNames([System.Environment+SpecialFolder])
[System.Environment]::GetFolderPath(‘CommonMusic’)

[System.Net.Dns]::GetHostByName(‘microsoft.com’)

Runtime Dir

[System.Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()

Windows Updates auflisten – hier mit COM-Objekt (Link MS COM)

Updates mit COM-Objekt
1 $Session = New-Object -ComObject Microsoft.Update.Session
2 $Searcher = $Session.CreateUpdateSearcher()
3 $HistoryCount = $Searcher.GetTotalHistoryCount()
4 if ( $HistoryCount -gt 0)
5 {
6     $Searcher.QueryHistory(1,$HistoryCount) |
7     Select-Object Date, Title, Description
8 }

Moderne Alternative: Modul PSWindowsUpdate mit passenden Cmdlets

Nützliche .Net Types auflisten – deutlich mehr als array, byte, char, datetime, double und Co

$typename = ‘System.Management.Automation.TypeAccelerators’
$shortcut = [PSObject].Assembly.GetType($typename)::Get
$shortcut.Keys | Sort-Object | ForEach-Object { “[$_]” }

Here-String (über mehrere Zeilen - lange Texte)

#Here-String
@'
Eine lange Zeile
kann in spezielle
Begrenzer
verpackt werden
'@

Variablen funktionieren auch in Zeichenketten (doppelte Anführungszeichen) $ macht Ausdruck klar - nicht bei einfachen Limitern! Also wie bei PHP und Co Skripten

"1+3 = $(1+3)"
"Aktuelle Uhrzeit: $((Get-Date).ToShortTimeString())"
# vergleichen mit
"Anzahl der laufenden Prozesse: $((Get-Process).Count)"

Escape-Sequenzen - Sonderzeichen

  • ( Gravis a) Ton (Beep)

  • ( Gravis b) Backspace

  • ( Gravis f) Form Feed (für Drucker)

  • ( Gravis n) New Line

  • ( Gravis r) Carriage Return

  • ( Gravis r Gravis n) Carriage Return und New Line

  • ( Gravis t) Tabulator

Erste Ausgaben mit Write-Host: (mehr dann bei Ausgabetechnik)

# Das "Echo" für die PS: Write-Host
Write-Host "Guckst Du" -ForegroundColor Yellow

Zeichenketten Operationen (Methoden) ermitteln:

"" | Get-Member -m Method