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