Windows PowerShellBleiben Sie eingesetzt!

Don Jones

Inhalt

Die Lösung
Finden Sie es in Aktion
1: N-Remoting
Platzieren Sie aus der Mind
Es ist Remoteverwaltung, neue Schule Formatvorlage

Ich habe immer frustriert wurde durch die duale Nachricht, die manchmal von Microsoft bezüglich Serververwaltung stammen: an der eine Seite wir gerade einwenden sagte um Verwaltungstools auf unseren eigenen Client-Computern zu installieren und diese Tools verwenden, um unsere Server zu verwalten.Wir sind nicht in das Data Center wechseln soll, und auch mithilfe von Remotedesktop ist technisch Schummelns, da es im Grunde nur in das Data Center geht ohne den Durchlauf.Andererseits, es gibt jedoch viele Server Verwaltungsaufgaben, die problemlos mit vorhandenen remote Tools ausgeführt werden kann, z. B. Ändern von IP-Adressen oder etwas bei der Netzwerkkonfiguration.

Windows PowerShell Fragen

FKann Windows PowerShell-Skript als Anmeldeskript werden verwendet?

ein Ja, aber möglicherweise nicht einem beliebigen Punkt auf diese Weise.Sie können nicht nur das Skript in einem Gruppenrichtlinienobjekt (GPO) in der Weise ziehen können Sie eine VBScript-Datei.Stattdessen weist müssen Sie im Grunde eine Batchdatei ausgeführt Powershell.exe erstellen, dem Befehlszeilenparameter übergeben, es welche Skript zum Ausführen.Es ist umständlich.Sie können auch Windows PowerShell auf jedem Computer installieren, auf dem das Anmeldeskript ausgeführt wird.Am Ende Bedenken Sie, dass Windows PowerShell etwas eigenständig als VBScript oder die cmd.exe-Shell ist.Wirkt sich z. B. Zuordnung eines Laufwerks mithilfe des New-PSDrive-Cmdlets nicht aus Windows Explorer, müssten Sie zurückgreifen, für den Befehl NET verwenden tatsächlich ein Netzlaufwerk in Windows, und wenn Sie dazu, warum nicht einfach eine herkömmliche Batchdatei, die einfacher zu in einem GRUPPENRICHTLINIENOBJEKT enthalten ist?

FKönnen Windows PowerShell-Skripts werden geplant?

eine absolut.Sie werden tatsächlich PowerShell.exe (die sich in den Ordner %systemroot%, unter /WindowsPowerShell befindet) planen und ihm ein Befehlszeilenparameter festlegen das Skript ausgeführt werden soll.Stellen Sie sicher, dass der geplante Task für die ein Benutzerkonto verwenden, die notwendigen Berechtigungen dazu, was das Skript hat verfügt eingerichtet ist, und stellen Sie sicher die Ausführungsrichtlinie der Shell konfiguriert ist, damit die Ausführung des Skripts (Ich bevorzuge die AllSigned-Richtlinie selbst, d. h., Ihr Skript müssen digital signiert werden, führen Sie "Help About_signing" in der Shell Einzelheiten zu diesem).

FGibt es eine einfache Möglichkeit zum Arbeiten mit Dateien und Ordner Berechtigungen in Windows PowerShell?

ein sicherstellen.Sie haben die Befehle Get-ACL und Set-ACL beginnen – Get-ACL ist großartig, wenn dazu müssen Sie Bericht auf Berechtigungen.Gesagt, verwenden diese Befehle zum Berechtigungen tatsächlich ändern ist in der unpraktisch – Windows Berechtigungen sind ziemlich kompliziert Beasts, und das Programmieren, Sie lediglich Zugriff Steuerelement Zugriffssteuerungslisten festgelegt müssen, ist gleichermaßen kompliziert.Aber wer sagt Cmdlets verwenden?Die Shell eignet sich hervorragend zur traditionellen Befehlszeilenprogramme ausführen und die verschiedenen Iterationen von "cacls.exe" (einschließlich diejenigen wie DSACLS für Active Directory) funktioniert großartig aus innerhalb von Windows PowerShell.Ich verwenden immer diese, wenn ich müssen ändern oder Dateien und Ordner Berechtigungen festgelegt.

Einrichten einer neuen Server Core-Installation ist ein weiteres hervorragendes Beispiel.Hinzufügen von Rollen, das Netzwerk konfigurieren, Aktivieren von Windows muss alle aus einem lokalen Konsolenfenster oder über Remotedesktop, erfolgen mit Befehlszeilenprogrammen.Welche Tools vorhanden sind, entweder Punkt benutzerdefinierter Lösungen, die eine einzelne Aufgabe zu verarbeiten oder Lösungen, die Erfahrungen mit WMI (Windows Management INSTRUMENTATION) erforderlich.Mir gefällt, WMI, aber gesagt ist zu komplex für die meisten Administratoren viel Zeit Learning aufwenden und so oft geht nicht verwendete.

Windows PowerShell hat alle diese erleichtern Zugesagtes – indem WMI ein bisschen leichter zu behandeln, jedoch noch wichtiger ist jedoch, dass Nachbereiten von Verwaltungsaufgaben in leichter zu bedienende Cmdlets, die mit den Befehlszeilenprogrammen ungefähr entsprechen wir für Jahre verwendet haben.Die Shell-Problem ist, abgesehen von WMI, es im Wesentlichen eine lokale Shell ist.Viele der seine zentrale Konfiguration des Betriebssystems Cmdlets Unterstützung nicht keinerlei für die Kontaktaufnahme mit einen Remotecomputer.Die Shell außerdem nicht lösen eines WMI mehr egregious Probleme: die Verwendung der Remoteprozeduraufrufe (RPCs) für Remotekonnektivität.RPCs eine Aufwand in Umgebungen, die lokalen Firewalls verwenden (und nicht, wer diese Tage?) werden häufig WMI für beliebige Remoteverwaltung unbrauchbar machen.

Die Lösung

Microsoft wurde eine kennen diese Unzulänglichkeiten, jedoch ist es einige Zeit für alle die notwendigen zu richten Sie sich in einem einzelnen Produkt behebt aufgenommen.Das Produkt ist Windows PowerShell v2, das eine neue Version der Windows Remote Management (WRM) enthält.Sowohl zum ersten Mal in Windows 7 und Windows Server 2008 R2 ausgeliefert wird, und beide werden standardmäßig auf diesen Betriebssystemen vorinstalliert.

Die Technologien werden auch für ältere Versionen von Windows möglicherweise weit zurück als Windows XP zur Verfügung gestellt.Aber als der Erstellung dieses Dokuments keine offiziellen Ankündigung wurde über genau die älteren Betriebssystemen unterstützt wird (die ältere da ältere Versionen einiger der erforderlichen fehlen möglicherweise core das Betriebssystem die schwieriger Microsoft Aufgabe unterstützende Technologien).

WinRM ist wirklich Schlüsseln, die alle diesem möglich macht.Es ist eine Microsoft-Implementierung von WS-MAN oder Webdienste für die Verwaltung, und wie der Name schon sagt, verwendet HTTP und HTTPS für die Kommunikation, d. h., dass es leicht den Datenverkehr über eine Firewall ist.Im Gegensatz zu RPC, die auf einen einzelnen bekannten Punkt starten und verschieben Sie Ihre Unterhaltung in einen zufällig ausgewählten Anschluss, HTTP und HTTPS verwenden einen einzigen Anschluss – 80 und 443 standardmäßig jedoch konfigurierbar, wenn Sie diese nicht zufrieden sind.WinRM ermöglicht viele verschiedene Anwendungen "eingehende Verbindungen von Verwaltung überwachen" und Windows PowerShell v2 ist eine Anwendung kann auf diese Weise.(Persönlich, Meiner Meinung nach WMI schließlich zu WinRM verwenden migrieren kann.)

Im Wesentlichen auf dem Clientcomputer sitzen und Fragen, um eine Shell-Verbindung mit einem Remotecomputer herzustellen.Aktiviert, WinRM, auf dem Remotecomputer, der wiederum eine Instanz der Windows PowerShell v2 auf dem Remotecomputer rotiert.Diese Instanz von der Shell kann Ihre Befehle ausführen und die Ergebnisse zurück an Ihren Computer bereitstellen.

Finden Sie es in Aktion

Öffentliche Betaversionen von Windows 7 wurden die große Welt dies auszuprobieren konnte zum ersten Mal: Öffnen Windows PowerShell-Sitzung auf dem Server – oder auf mehreren Servern, und führen Sie zum Konfigurieren von WinRM und starten Sie den WinRM-Dienst aktivieren-PSRemoting.Fahren Sie mit dem Clientcomputer – auch Windows PowerShell v2 ausgeführt – und führen Sie $ Sitzung = New PSSession Computername, der Name des Servers gerade konfigurierten für Remoting bereitstellen.Das Cmdlet „ New PSSession kann auch alternative Anmeldeinformationen annehmen, wenn erforderlich, und aufgefordert, die nicht standardmäßige Ports verwenden, wenn das ist was Sie konfiguriert haben.

Wenn Sie eine langwierige Fehlermeldung wie dargestellt in Figure 1 sehen, ist es aufgrund der Art und Weise, wie WinRM authentifiziert.Es wird Kerberos standardmäßig verwendet, aber Kerberos nicht in einer Umgebung ohne Domäne (wie die auf dem abgebildeten Übungseinheit Computer) eine Option.Wenn Kerberos verfügbar ist, fordert WinRM die Verwendung von HTTPS-Transport, die erfordert, dass ein SSL-Zertifikat auf dem Server-Computer installiert ist.Dies erfolgt um gegenseitige Authentifizierung zwischen Ihnen und dem Server zu unterstützen, damit Sie wissen Sie Sie auf dem Computer verbunden sind.Selbst angeben Standard- oder Digestauthentifizierung Authentifizierung in der –auth-Parameter wird nicht helfen, da möchte, dass WinRM HTTPS verwenden, um Datenverkehr zu verschlüsseln.Die einfachste Lösung?In einer Active Directory-Domäne sein!

Abbildung 1 eine langwierige Fehlermeldung wie dieser because of die WayWinRM auftreten authentifiziert.

Mit Ihrer Sitzung aktiviert können Sie es verwenden.Geben Sie PSSession $ Sitzung werden Sie, live, mit dem Remoteserver verbunden.Wie von Zauberhand, haben Sie eine Instanz von Windows PowerShell eingeben.Befehle interaktiv ausführen und Sie sehen sofort die Ergebnisse – nicht anders als SSH oder ähnliche Technologien, die häufig auf UNIX-Computern verwendet.

Windows PowerShell hat sogar einige Standardverschlüsselung, wenn Sie nicht HTTPS verwenden, Sie noch vor dem Abhören aus dem ziemlich sicher sind.Führen Sie die Exit-PSSession der Remotekonsole trennen und zu der lokalen Konsole zurückkehren.Die Shell selbst Änderungen aufgefordert, wenn Sie zu einem Remotecomputer, um an Sie erinnern, wo Sie verbunden sind.

1: N-Remoting

Ist hervorragende Möglichkeit, Befehle auf einem Computer ausführen, doch wie oft müssen Sie eine auf einem Server tun?Häufiger, finde ich einen Befehl oder eine Reihe von Befehlen, auf eine ganze Reihe von Computern ausführen muss.Was wir bisher in Windows PowerShell v1 verwendet haben, wird 1: 1 (1: 1) Remoting, d. h. einen einzelnen Administrator Verwalten von einen einzigen Remotecomputer bezeichnet.Die Shell bietet auch 1: n-(1: n-) Remoting, wo ein einzelner Administrator mehrere Computer verwalten kann.Der Trick ist im Parameter New PSSession –computerName.

Mich meinen früheren Befehl wiederholen, aber diesmal ich werde tatsächlich ausschreiben der Parameter, sondern lassen die Shell davon: neue PSSession –computerName Computer.Da –computerName ein positionelle Parameter ist, ich möchte nicht vor den Namen der tatsächliche Parameter angeben, aber damit wird diesen Trick um leichter verstehen: $ Sitzungen = New PSSession –computerName (c:\names.txt Get-Content).Vorausgesetzt, dass die Datei C:\names.txt eine Liste von Computernamen, einen Computername pro Zeile enthält erstellt die Shell eine Remotesitzung zu jeder der Sie die gesamte Liste der Sitzungen, die in die Variable $ Sitzungen zu speichern.

Standardmäßig die Sitzungen sind erstellt mit die Anmeldeinformationen Windows PowerShell selbst ausgeführt wird – also eigene Anmeldekonto oder ein Konto mit RunAs bei verwendet die Shell starten.Ein Wort der Warnung: Wenn Sie die Benutzerkontensteuerung (UAC) aktiviert haben, müssen Sie unbedingt die Shell „ als Administrator"starten explizit mit der rechten Maustaste auf das Symbol.Alternativ können Sie einen anderen Benutzernamen für die Sitzungen mithilfe des Befehls Credential-Parameter angeben.

Nachdem Sie diese Auflistung der Befehle haben, Sie können weiterhin auf die 1: 1-Weise mit Ihnen arbeiten: Geben Sie PSSession $ Sitzungen [0] werden verbinden Sie mit dem ersten Computer Shell Instanz beispielsweise.Die wahre Leistungsfähigkeit ist jedoch in einen Befehl für alle von Ihnen gleichzeitig ausführen: Invoke-Command –scriptblock {Ipconfig} 0 –session $ Sitzungen.Führt des Befehls Ipconfig auf jedem Computer mit dem Sie eine Sitzung verbunden haben, und bringt die Ergebnisse Ihres Computers.Werden tatsächlich mit den Computern in parallelen bis zu 32 zu einem Zeitpunkt verbunden; Sie können die parallele Ausführung Schubkontrolle ändern, mit den –throttlelimit-Parameter.

Platzieren Sie aus der Mind

Natürlich manchmal müssen Sie deaktiviert Befehle, die zu Ausführung eine Weile dauern ausgelöst und lehnen Sie sich um alles abgeschlossen warten werden sollen.Lassen Sie in solchen Fällen die Shell im Hintergrund arbeiten Warum nicht?Nur Invoke-Command hinzu den –AsJob-Parameter, und die Shell wird ein Hintergrund-Auftrag erstellt.

Denken Sie daran, dass Ihre Kopie von der Shell ist nicht wirklich viel Arbeit durchführen; die Befehle Sie angegeben haben, auf Remoteinstanzen von Windows PowerShell ausgeführt wird werden.Die Shell nur wartet Sie alle abzuschließen, und die Ergebnisse sammeln Sie zurücksenden.Diese Ergebnisse werden als Teil der Auftrag gespeichert.Führen Sie die Get-Auftrag alle aktuellen Aufträge, und deren Status (ob Sie weiterhin, z. B. ausgeführt sind).Nehmen Sie die Ergebnisse out of einer abgeschlossenen Auftrag mithilfe Auftrag empfangen.So könnte alles wie folgt aussehen:

$sessions = New-PSSession –computerName (Get-Content c:\names.txt)
$job = Invoke-Command –scriptblock { your command(s) } –AsJob
Get-Job (to check the status)
$results = Receive-Job $job

Sie können dann $ Ergebnisse anzeigen, filtern, Sortieren und usw.. Jedes Ergebnis haben zugeordnet sind, können Sie die Computer von stammt. Erörtert Hintergrund Einzelvorgänge (die auch Unteraufträge haben können, für den Umgang mit) in einem zukünftigen Artikel.

Es ist Remoteverwaltung, neue Schule Formatvorlage

Vergessen Sie die Art der alten Schule der Beteiligten auf das Data Center wandern oder einen Remotedesktop verwenden "remote"-Verwaltung "mogeln." Windows PowerShell v2 Remoting Funktionen stellen eine leistungsstarke und einfach um Befehle auszuführen – alle Befehle – auf Remotecomputern. Obwohl meine persönlichen Fokus auf Server-Verwaltung ist, sind diese Techniken hervorragend für desktop-Verwaltungsaufgaben, auch ein Grund, warum Windows PowerShell v2 auf Windows 7 sowie Windows Server 2008 R2 vorinstalliert ist.

Don Jones ist Mitgründer von Betrifft Technology, wobei er Blogs wöchentlich über Windows PowerShell, SQL Server, App-V und anderen Themen. Erreichen Sie ihn über seine Website.