Windows Developer – Powershell für .NET Entwickler

Dieser Post enthält die Code Snippets für den “Powershell für .NET Entwickler” Artikel aus dem Windows Developer. Viel Spass!

Zum Download:

PowershellFuerDotNetEntwicklerTeil2.zip

Und das komplette Skript am Stück:

 

#Windows Developer. Powershell für .NET Entwickler Teil2
#Autor: Manuel Meyer www.manuelmeyer.net
#Quelle: http://manuelmeyer.net/2016/03/powershell/ ‎

#Beschreibung:
#Dieses Skript enthält alle Powershell Codefragmente aus dem oben erwähnten Artikel aus dem Windows Developer.



#### Listing 1: Powershell Remoting

#Variante 1: Enter-PSSession
#Öffnen einer Remoting Session auf Zielrechner LTMME05
Enter-PSSession –ComputerName LTMME05

#Der Rechnername wird in der Eingabeaufforderung angezeigt und Befehle können auf dem Remote-Rechner ausgeführt werden.
#[LTMME05] PS C:\> hostname


#Variante 2 : Cmdlet mit Option –Computername
PS C:\> Get-Process -ComputerName LTMME05 | Select-Object -First 1


#Variante 3 : Invoke-Command
#Das Beispiel holt einen EventLog Eintrag von 3 Rechnern
PS C:\> Invoke-Command -ComputerName LTMME05, LTMME06, LTMME07 -ScriptBlock {Get-EventLog Security -Newest 1}

#Alternativ können die Rechnernamen auch aus einer Textdatei gelesen werden
PS C:\> Invoke-Command –ComputerName (Get-Content Rechnerliste.txt)



#### Listing 2: Sprachausgabe mit COM und Excel Interop

#Sprachausgabe mit COM Interop
$voice = New-Object –ComObject SAPI.SPVoice
$voice.Speak("Hello Windows Developer");

#Vorlesen einer Datei
$voice = New-Object –ComObject SAPI.SPVoice
$text = Get-Content C:\Datei.txt
$voice.Speak($text)


#Erstellen eines Excel Sheets mit COM Interop
[Threading.Thread]::CurrentThread.CurrentCulture = "EN-us"
$ex = New-Object -ComObject Excel.Application
$ex.visible = $true
$exWb = $ex.Workbooks.Add()
$exWs = $exWb.Worksheets.Item(1)

$exWs.Cells.Item(2, 1).EntireColumn.ColumnWidth = 40

$exWs.Cells.Item(2,1) = "Services Name"
$exWs.Cells.Item(2,2) = "Service Status"

$row = 3
$services = Get-Service | Select-Object -First 20
foreach($Service in $services)
{
    $exWs.Cells.Item($row,1) = $Service.DisplayName
    $exWs.Cells.Item($row, 2) = $Service.Status.ToString()
    if($Service.Status -eq "Running")
    {
        $exWs.Cells.Item($row,1).Font.ColorIndex = 10
        $exWs.Cells.Item($row,2).Font.ColorIndex = 10
    }
    elseif($Service.Status -eq "Stopped")
    {
        $exWs.Cells.Item($row,1).Font.ColorIndex = 3
        $exWs.Cells.Item($row,2).Font.ColorIndex = 3
    }
    $row++
    Write-Host "row++"
}
$exWs.SaveAs("C:\ServiceStatusReport.xlsx");



#### Listing 3: Powershell Provider
#Anzeigen aller verfügbaren Provider
Get-PSProvider


#Wechsel zum Registry Provider über das „HKLM“ Drive
#Hinweis: HKLM steht hier für den Registry-Ast HKEY_LOCAL_MACHINE
cd hklm:


#Navigation durch die Registry zum PowerShellEngine Eintrag
#Hinweis: Mit der Tabulatortaste können die Einträge vervollständigt werden.
dir
cd .\SOFTWARE\Microsoft\PowerShell\1\
dir
# und so weiter...


#### Listing 4: Powershell Provider für Sql Server und IIS
#Importieren der Provider für Sql Server und IIS
Import-Module SQLPS
Import-Module WebAdministration 
Get-PSProvider


#Anzeigen aller Sites im IIS
cd IIS:
dir


#Anzeige aller Application Pools und deren Applications
dir apppools


#Hinweis: Die AppPools können auch von einem anderen Drive aus aufgerufen werden ohne explizit in den Provider zu wechseln:
cd c:\
dir iis:\apppools


#Erstellen eines neuen Application Pools
cd iis:
New-Item AppPools\NewAppPool


#Setzen eines Application Pools
PS IIS:\> Set-ItemProperty 'sites\MySite1\AppB' –Name applicationPool –Value NewAppPool


#Wechsel auf den SqlServer Provider
cd sqlserver:
dir


#Pfad zu einer Tabelle
#SQLSERVER:\sql\ltmme02\default\databases\mydb1\tables\dbo.mytable




#### Listing 5: SOAP und REST WebServices aufrufen

#Aufruf eines SOAP WebServices mit einem typisierten Client
$uri = 'http://www.webservicex.net/airport.asmx?WSDL'
$airportProxy = New-WebServiceProxy -Uri $uri -Namespace ws
$airportProxy.getAirportInformationByAirportCode('ZRH')


#Durch Zuweisung an eine Variable vom Typ XML wird die Antwort in ein XML Objekt gespeichert werden, mit welchem weitergearbeitet werden kann
[XML]$xml = $airportProxy.getAirportInformationByAirportCode('FRA');
$xml.NewDataSet.Table[0].CityOrAirportName


#Aufruf eines REST WebServices
#Es soll über die Google Maps API die Distanz zwischen der Basta Spring (Darmstadt) und der Basta (Mainz) ermittelt werden.
$uri = 'https://maps.googleapis.com/maps/api/directions/json'
$query = '?mode=driving&origin=Rheinstrasse 105, 64283 Darmstadt&destination=Rheinstrasse 66, 55116 Mainz'
$response = Invoke-RestMethod $uri$query


#Die Variable $response enthält ein JSON Objekt
$response.routes[0].legs[0].distance
$response.routes[0].legs[0].duration



#### Listing 6: Gemischte Snippets

#Testen von Format Strings
[string]::Format("{0:r}", [DateTime]::Now);


#Hinweis: Dasselbe geht auch mit dem Powershell Operator „-f“
„{0:r}“ –f [DateTime]::Now


#Testen von Regex
#Finde alle zweistelligen Zahlen
$regex = [regex]"\b\d\d\b"
$regex.Matches("123 45 1 95 1412 99 343 0202 23") | % { $_.value }


#Ausgabe des voll qualifizierten Assemblynamen eines Typs
[System.IO.FileStream].AssemblyQualifiedName


#Finden des ASCII/Unicode für ein Zeichen
[int][char]'£'


#Installieren der IIS Rolle auf mehreren Windows Servern
'Server1', 'Server2', 'Server3' | Foreach-Object { Install-WindowsFeature Web-Server –IncludeAllSubFeature –IncludeManagementTools –ComputerName $_}


#Anzeigen einer Windows Forms MessageBox
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Hallo Windows Developer!")


#Den Performance Counter „Total CPU Percentage“ jede Sekunde abfragen
Get-Counter '\Processor(_total)\% Processor Time' -Continuous -SampleInterval 1 -ComputerName LTMME05


#Messen der Zeit, die für einen REST Aufruf benötigt wird
$uri = 'https://maps.googleapis.com/maps/api/directions/json'
$query = '?mode=driving&origin=Rheinstrasse 105, 64283 Darmstadt&destination=Rheinstrasse 66, 55116 Mainz'
(Measure-Command {Invoke-RestMethod $uri$query}).TotalMilliseconds


#Die ersten 100 Einträge im application EventLog als HTML-Datei exportieren
get-eventlog -log "application" | select -first 100 | ConvertTo-Html > c:\evt.html