Begrüßen Sie PowerShell

PowerShell ist seit über zehn Jahren in der Entwicklung. Microsoft investiert weiter in die Entwicklung und Einführung. Diese Investitionen haben die Leichtigkeit und Robustheit verändert, mit der Entwickler und Administratoren Windows-Aufgaben automatisieren können.


Was ist PowerShell??

PowerShell löst Administrations- und Anpassungsprobleme durch nahtlose Integration von .NET Framework.

PowerShell ist das Task Automation Framework von Microsoft. Es besteht aus einer Befehlszeilen-Shell, einer integrierten Skriptumgebung (ISE), einer auf .NET Framework basierenden Skriptsprache, einer API, mit der Sie PowerShell in Ihren .NET-Anwendungen hosten können, und ist verteilt Automatisierungsplattform. PowerShell bietet vollständigen Zugriff auf COM und WMI, sodass Sie Aufgaben auf lokalen und Remote-Windows-Systemen ausführen können.

PowerShell ist eine neue Breed-Plattform für die Automatisierung. Sie löst Administrations- und Anpassungsprobleme durch nahtlose Integration von .NET Framework. Es ist gut für Entwickler, Administratoren, Tester und mehr. Das auf .NET basierende Tool senkt die Kosten und bietet Entwicklern und Administratoren eine einfache und unternehmensbereite Möglichkeit, alle Prozesse zu automatisieren, zu messen und zu verbessern.


Folgen

In diesem Intro werde ich die Tiefe und Breite hervorheben, die PowerShell auf den Tisch bringt. Dinge wie die spielverändernde Objektpipeline, die REPL (Lesen, Eval, Print Loop), .NET-Integration und mehr.

Wenn Sie Windows 7 oder 8 ausführen, ist PowerShell bereits installiert. Laden Sie PowerShell v3 für Windows 7 hier herunter. Sie benötigen Windows 7 SP1 und der Download funktioniert auch für Windows 2008 R2 SP1 und Windows 2008 SP2. Wenn Sie mit Vista, XP oder Windows 2003 arbeiten, müssen Sie sich hier mit PowerShell v2 zufrieden geben.


Wozu ist es gut? Absolut alles!

Von der Bereitstellung mehrerer Ressourcen für Azure bis hin zur Verwaltung Ihrer Software-Builds für die kontinuierliche Integration, für den Zugriff auf Webdienste oder REST-Endpunkte. PowerShell hat Sie abgedeckt und bietet so viel mehr.

  • Schneiden Sie Text, XML, CSV und JSON mit Leichtigkeit
  • Integrieren Sie PowerShell, um Skriptfunktionen für Ihre C # -Anwendungen bereitzustellen
  • Erstellen Sie GUI-Anwendungen fünf bis zehn Mal schneller mit weniger Code
  • Nutzen Sie die PowerShell-Funktionen für die Arbeit mit dem Internet
  • Interagieren Sie mit DLLs und erstellen Sie Objekte, zeigen Sie automatisch Eigenschaften an und rufen Sie Methoden in interaktiven Live-Sitzungen auf
  • Erstellen Sie domänenspezifische Sprachen (DSLs) und Vokabulare, um die Lösungen klarer auszudrücken
  • Arbeiten mit Microsoft Office über das Component Object Model (COM)
  • PowerShell v3-Funktionen

Bootstrapping PowerShell

Was ist ein Cmdlet? Ein Cmdlet ist der grundlegende Baustein in PowerShell und wird als Verb-Substantiv-Paar ausgedrückt, wodurch die Beschreibung selbsterklärend wird. Zum Beispiel:

PS C: \> Get-Date Sonntag, 26. Mai 2013 8:46:16 Uhr

PowerShell enthält Hunderte von Kern-Cmdlets, und Sie können eigene schreiben.

Zwei Cmdlets auswendig lernen

PowerShell erleichtert die Auffindbarkeit. Wann immer Sie zum blauen Bildschirm von PowerShell gehen und nicht sicher sind, was Sie tun sollen, verwenden Sie Get-Command.

Das Get-Command Cmdlet ruft alle Befehle ab, die auf dem Computer installiert sind, einschließlich Cmdlets, Aliasnamen, Funktionen, Workflows, Filter, Skripts und Anwendungen.

Im Wesentlichen, Get-Command zeigt Ihnen alle Möglichkeiten, die Sie in der aktuellen PowerShell-Sitzung ausführen können.

Get-Command

Get-Command unterstützt Platzhalter. Angenommen, ich möchte alle Cmdlets anzeigen, die das Verb enthalten, Aufrufen?

Get-Command Invoke *

Das bekomme ich nach dem Pressen eingeben.

CommandType-Name Modulname ----------- ---- ---------- Funktion Invoke-AsWorkflow PSWorkflowUtility Funktion Invoke-Background ShowUI Funktion Invoke-BrowserControl AutoBrowse-Funktion Invoke-Line Isepack-Funktion Invoke -Line PowerShellPack-Funktion Invoke-Office365 Pipeworks-Funktion Invoke-Pester-Pester-Funktion Invoke-WebCommand Pipeworks-Cmdlet Invoke-CimMethod CimCmdlets Cmdlet Invoke-Befehl Microsoft.PowerShell.Core Cmdlet Invoke-Expression Microsoft.PowerShell.Utility Cmdlet Invoke-History Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Invoke-RestMethod Microsoft.PowerShell.Utility Cmdlet Invoke-FehlerbehebungPack FehlerbehebungPaket Cmdlet Invoke-WebRequest Microsoft.PowerShell.Utility Cmdlet Invoke-WmiMethod Microsoft.PowerShell.Management Cmdlet Invoke-Manager

Was sind die Cmdlets, die mit dem Nomen Item enden??

Get-Command * -Item

Beachten Sie, dass Sie andere Verben wie Clear, New, Remove und Set sehen.

CommandType-Name Modulname ----------- ---- ---------- Cmdlet Clear-Item Microsoft.PowerShell.Management Cmdlet Copy-Item Microsoft.PowerShell.Management Cmdlet Get-Item Microsoft.PowerShell.Management Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Move-Item Microsoft.PowerShell.Management Cmdlet Neues Element Microsoft.PowerShell.Management Cmdlet Remove-Item Microsoft.PowerShell.Management Cmdlet Umbenennungs-Element Microsoft.PowerShell.Management Cmdlet Set-Item Microsoft.PowerShell.Management

Als Nächstes verwende ich ein paar Cmdlets, um zusammenzufassen, was in meiner Sitzung auf einer meiner Boxen verfügbar ist, wenn ich die PowerShell-Konsole starte.

Get-Command | Gruppieren Sie CommandType -NoElement | Sort Count -Descending

Ich rufe Get-Command, gruppiere es und sortiere es. Hier kann ich sehen, dass ich über 1000 Cmdlets zur Arbeit habe. Ich führe PowerShell v3 mit zusätzlichen installierten Modulen aus, so dass Ihre Laufleistung variieren kann.

Count Name ----- ---- 2487 Funktion 1184 Cmdlet 38 Alias ​​1 Filter

Aus welchen Modulen stammen diese Cmdlets? Wir können diese Frage auf diese Weise beantworten:

Get-Command -CommandType-Cmdlet | Gruppenmodulname -NoElement | Sort Count -Descending

Mit PowerShell kann ich viel erreichen.

Count Name ----- ---- 379 ShowUI 164 Hyper-V 157 Azure 92 Microsoft.PowerShell.Utility 82 Microsoft.PowerShell.Management 78 Webadministration 55 Microsoft.PowerShell.Core 22 Dism 18 International 17 PKI 16 PSScheduledJob 13 Microsoft. WSMan.Management 12 CimCmdlets 10 Microsoft.PowerShell.Security 9 TrustedPlatformModule 8 BitsTransfer 8 MsDtc 6 Pipeworks 6 Kds 5 AppLocker 5 SecureBoot 5 Microsoft.PowerShell.Diagnostics 4 NetSecurity 4 Appx 3 WindowsErrorReporting 2 Microsoft.PowerShellChachrachrach 2

Hilfe erhalten

Hilfe erhalten macht genau das, es zeigt Hilfe für das Cmdlet an, über das Sie mehr wissen sollten. Es ist nicht nur einfach, Hilfe zu erhalten, es ist auch einfach, Hilfe für die von Ihnen entwickelten Cmdlets / erweiterten Funktionen zu erstellen / aufzunehmen, ein Thema für einen anderen Artikel. Hilfe zur Hand zu haben, ist eine enorme Zeitersparnis.

Get-Help Invoke-Command

Hier ist eine gekürzte Version der Ausgabe.

NAME Get-Process SYNOPSIS Ruft die Prozesse ab, die auf dem lokalen Computer oder einem Remotecomputer ausgeführt werden. SYNTAX Get-Process [[-Name] ] [-Computername ] [-FileVersionInfo []] [-Modul []] [] Get-Process [-Computername] ] [-FileVersionInfo []] [-Modul []] -Ich würde  [] Get-Process [-Computername] ] [-FileVersionInfo []] [-Modul []] -InputObject  [] DESCRIPTION Das Cmdlet Get-Process ruft die Prozesse auf einem lokalen oder Remotecomputer ab. 

Noch einfacher; Das Cmdlet Get-Help enthält einen Schalter, über den Sie hierher gelangen.

Get-Help Get-Process -Online

Möchten Sie nur Beispiele zur Verwendung des Cmdlets sehen? Verwenden Sie die -Beispiele Schalter. Außerdem können Sie das Beispiel direkt in die Konsole kopieren und einfügen und ausführen.

Get-Help Get-Process -Examples

So einfach und schnell.

NAME Get-Process SYNOPSIS Ruft die Prozesse ab, die auf dem lokalen Computer oder einem Remotecomputer ausgeführt werden. -------------------------- BEISPIEL 1 ---------------------- ---- PS C: \> Get-Process Dieser Befehl ruft eine Liste aller laufenden Prozesse ab, die auf dem lokalen Computer ausgeführt werden. Eine Definition der einzelnen Spalten finden Sie im Abschnitt "Zusätzliche Hinweise" des Hilfethemas für Get-Help. -------------------------- BEISPIEL 2 ---------------------- ---- PS C: \> Get-Process Winword, Explorer | Formatliste *

PowerShell Funktioniert problemlos mit Web Services

Das W3C definiert einen "Web-Service" als:

[…] Ein Softwaresystem, das interoperable Machine-to-Machine-Interaktionen über ein Netzwerk unterstützt. Es verfügt über eine Schnittstelle, die in einem maschinenverarbeitbaren Format (insbesondere WSDL) beschrieben ist. Andere Systeme interagieren mit dem Web-Service auf eine durch ihre Beschreibung vorgegebene Weise unter Verwendung von SOAP-Nachrichten, die normalerweise über HTTP mit einer XML-Serialisierung in Verbindung mit anderen Web-relevanten Standards übermittelt werden.

Mit PowerShell können Sie Webservices schnell und einfach nutzen New-WebServiceProxy Cmdlet. Ändere das $ Postleitzahl, Führen Sie es aus und erhalten Sie die neuesten Wetterinformationen.

$ zipCode = "96826" $ svc = New-WebServiceProxy http://wsf.cdyne.com/WeatherWS/Weather.asmx $ result = $ svc.GetCityForecastByZIP ($ zipCode) # Transformieren Sie die Ergebnisse $ result.ForecastResult | ForEach [PSCustomObject] @ City = $ result.City State = $ result.State Date = $ _. Date.ToString ("d") Beschreibung = $ _. Beschreibung DaytimeHigh = $ _. Temperaturen.DaytimeHigh

Ergebnis

Ich speichere das Proxy-Objekt in $ svc und dann die anrufen GetCityForecastByZIP Methode, Erfassung der Ergebnisse in $ Ergebnis. Beim Durchlaufen des ForecastResult-Arrays transformiere ich den Datensatz in den Daten. Notiere dass der Stadt und DaytimeHigh sind auf verschiedenen Ebenen in der Hierarchie.

Die Technik, die ich verwende, ist das Erstellen von Schlüssel / Wert-Paaren für die Hashtabelle. @ ist PowerShell-Syntax für eine neue Hashtabelle. Verwenden [PSCustomObject] ist eine PowerShell Beschleuniger, Dies ermöglicht mir zum einen, ein benutzerdefiniertes Objekt aus einer Hashtabelle zu erstellen.

Das Weather.asmx Webservice hat hierarchisches XML zurückgegeben. In einer Handvoll PowerShell-Befehlen formte ich die Daten um und formatierte sie (das Datum) nach Belieben. In diesem Beispiel habe ich mich dazu entschieden, PowerShell ausdrucken zu lassen. Sobald ich die Daten in meiner PowerShell-Sitzung gespeichert habe, bin ich jetzt mit dem PowerShell-Ökosystem verbunden und kann dieses Array von benutzerdefinierten Objekten problemlos an andere Cmdlets weiterleiten, um es an einen anderen Webdienst zu senden, HTML zu generieren, in einer Datei zu speichern und eine CSV zu erstellen Datei oder exportieren Sie es in eine SQL-Datenbank.

Stadtstaat Datum Beschreibung DaytimeHigh ---- ----- ---- ----------- ----------- Honolulu HI 5/22/2013 Duschen 76 Honolulu HI 23.05.2013 Teils Wolkig 76 Honolulu HI 24.05.2013 Teils Wolkig 77 Honolulu HI 25.05.2013 Teils Wolkig 77 Honolulu HI 26.05.2013 Teils Wolkig 77 Honolulu HI 27.05.2013 Teils Wolkig 77 Honolulu HI 28.05.2013 Teilweise bewölkt 77

Arbeiten mit CSV, JSON und XML

Das Schneiden und Schneiden von Textformaten ist ein PowerShell-Sweetspot. Hier werde ich drei gängige Formate in ein PowerShell-Objekt konvertieren. Für die CSV und JSON verwende ich die richtige ConvertFrom- * Cmdlets und für XML verwende ich die Beschleuniger, der XML verwendet und ein XMLDocument erstellt.

# Verwenden Sie CSV $ csv = "Name, Age'r'nJohn, 10" | ConvertFrom-Csv $ csv Name Alter ---- --- John 10 # Verwenden Sie JSON $ json = "Name: 'Tom', Alter: 20" | ConvertFrom-Json $ json Name Alter ---- --- Tom 20 # Verwendet XML $ xml = ([xml] [/ xml] "Harry30") .data.record $ xml Name Alter ---- --- Harry 30 # Kombiniere alle drei $ csv, $ json, $ xml Name Alter ---- --- John 10 Tom 20 Harry 30 # Addiere die Alter $ csv, $ json, $ xml |% $ summe = 0 $ summe + = $ _. alter $ summe 60

Wir haben also drei heterogene Formate verwendet und am Ende eine Aggregation über eines der Felder durchgeführt. Ich hätte jeden dieser Datenfeeds von verschiedenen Stellen abrufen können, den CSV von einer Netzwerkfreigabe, den JSON für eine REST-Abfrage und die XML von einem Webdienst. Wie gesagt, dies ist ein PowerShell-Sweetspot.


Twitter-Suche

Verwenden Sie die Such-REST-API von Twitter in der Befehlszeile. Ich konstruiere die URL, die Sie in Ihrem Browser verwenden könnten, und dann das PowerShell-Cmdlet Invoke-RestMethod. Es sendet eine Anforderung an den REST-Service und ermittelt, ob die Antwort XML oder JSON ist. Hier beantrage ich also eine JSON-Antwort, Invoke-RestMethod konvertiert die Ergebnisse in ein Array von PowerShell-Objekten. Ich pfeife sie an Wählen Cmdlet (ein Alias ​​des Verb-Nomen Objekt auswählen) Wählen Sie nur drei Felder aus. Stellen Sie sich dies als Projektion vor, ähnlich wie LINQ oder SQL.

$ query = "PowerShell" $ url = "http://search.twitter.com/search.json?q=$query" (Invoke-RestMethod $ url) .results | Wählen Sie create_at, from_user_name, text aus

Ergebnis

So einfach ist das. Sehen Sie sich ein Video an, das ich für Version 2 erstellt habe: "PowerShell, ShowUI und die Twitter-API". Eine Mini-WPF-Twitter-App in einer Handvoll PowerShell.

created_at from_user_name text ---------- -------------- ---- Sa, 25 May 2013 vitor pombeiro @brunomlopes a falar sobre Powershell "Ã minha maneira" Sa , 25. Mai 2013 Jeffery Hicks Wussten Sie, dass die #PowerShell ISE Startoptionen hat? In Sa, 25. Mai 2013 hatte Pat Richard @mwjcomputing Yeah - $ MyInvocation.MyCom Sa, 25. Mai 2013 verwendet. Rob Fairman "#PowerShell-Skript zum Löschen von # Windows-Ereignisprotokollen" ht Sa, 25. Mai 2013 Jim Priestley, das SharePoint-Bereitstellungen in Windows automatisiert #Azure usin Sa, 25. Mai 2013 VT Technology RT @jangwoo_park: @ VTTechnology: Mehrere Virtua exportieren Sa, 25. Mai 2013 Aryan Nava Verwenden von PowerShell zum Anzeigen der Seite, die am letzten Samstag, 25. Mai 2013 erstellt wurde. Aryan Nava PowerShell-Tipps für SQL Server http://t.co/lVW2AY5BYZ Sa, 25. Mai 2013 Private Cloud Tech Die Reise in die private Cloud - Teil 3 - Die Infrastruktur Sat, 25. Mai 2013 Dr. Tom Shinder Die Reise in die private Cloud - Teil 3 « “The Infrastruc Sa, 25. Mai 2013 Jacob Daniels RT @tech_faq: Windows Server Manager basiert auf Windows Sa, 25. Mai 2013 CodeCruiser 10 Tipps für den SQL Server PowerShell Scripter http: // t.

C # schnell in der PowerShell kompilieren

PowerShell ist eine interpretierte Sprache. Es wird also eine Strafe geben. Es ist kein großes Problem, aber manchmal benötigen Sie die Geschwindigkeit einer kompilierten Sprache. Mit PowerShell können Sie C # on-the-fly im Arbeitsspeicher Ihrer PowerShell-Sitzung kompilieren, indem Sie die -Typendefinition Parameter auf der Typ hinzufügen Cmdlet. Beachten Sie das Here-String identifiziert durch die @ "" @. Sie sind sehr nützlich, wenn Sie Text zitieren. Ich ermutige Sie, mehr mit zu erkunden Typ hinzufügen und die Zitierregeln von PowerShell.

Add-Type -TypeDefinition @ "public class TestInline public long Fibonacci (langes n) long a = 0; long b = 1; for (long idx = 0; idx < n; idx+=1)  long temp = a; a = b; b = temp + b;  return a;   "@ $obj = New-Object TestInline 1… 10 | ForEach  $obj.Fibonacci($_) 

Mit DLLS interagieren

Nehmen wir an, ich habe Ihnen nicht den Quellcode gegeben - nur die kompilierte DLL. Kein Problem: Typ hinzufügen hat ein -Pfad Parameter.

Add-Type -Path. \ FibLib.dll $ obj = New-Object TestInline 1… 10 | ForEach $ obj.Fibonacci ($ _)

Achten Sie besonders darauf. Verwenden Typ hinzufügen Auf diese Weise können Sie problemlos .NET-DLLs von anderen Benutzern einpacken, wenn sie noch keine PowerShell-Schnittstelle bereitgestellt haben. Dies gilt unabhängig davon, ob die DLL von Microsoft, DELL, Citrix oder einem anderen Entwickler stammt.


Abschließend

Das tut es also erstmal. Möchten Sie weitere Powershell-spezifische Inhalte auf Nettuts + sehen? Lass es uns unten wissen!