So stellen Sie die Uhrzeit per Powershell aus der Ferne ein. Powershell: Verwenden des Invoke-Command-Cmdlets. Ausführen von Befehlen über Hintergrundsitzungen

Heute ist PowerShell Remoting das wichtigste Tool für die Fernverwaltung von Windows-Betriebssystemen. Daher sollte jeder Windows-Systemadministrator über seine Fähigkeiten Bescheid wissen und sie bei seinen täglichen Aufgaben nutzen. Um Befehle auf Remotecomputern mit PowerShell Remoting auszuführen, können Sie das Powershell-Cmdlet verwenden Invoke-Befehl(alias icm).

Die Funktionalität des Invoke-Command-Cmdlets basiert auf dem Web Services for Management-Protokoll ( WS-Management) und der Windows-Remoteverwaltungsdienst ( WinRM), zur Kommunikation verwendet. Die Kommunikation zwischen Computern erfolgt über HTTP (Standard) oder HTTPS. Der gesamte Datenverkehr zwischen zwei Computern wird auf Protokollebene verschlüsselt. Es werden mehrere Authentifizierungsmethoden unterstützt, darunter NTLM und Kerberos. Die Möglichkeit, Remote-Sitzungen zu erstellen, wurde in Powershell 2.0 eingeführt.

Um über PowerShell Remoting eine Remote-Verbindung zu einem Computer herzustellen, müssen Sie eine Reihe von Einstellungen vornehmen:

  1. Sie müssen Remoteverbindungen zulassen: Enable-PSRemoting -Force
  2. Starten Sie den WinRM-Dienst: Start-Service WinRM
  3. Erstellen Sie eine Windows-Firewallregel, die eingehende Verbindungen über dieses Protokoll zulässt.

Der Computer, von dem aus Sie andere Computer/Server über PowerShell Remoting remote verwalten möchten, muss ebenfalls konfiguriert werden:

  1. Sie müssen Verbindungen zu Remote-Systemen zulassen. Um den Zugriff auf alle Remotecomputer zu ermöglichen, verwenden Sie den Befehl: Set-Item wsman:\localhost\client\trustedhosts * -Force
  2. Stellen Sie sicher, dass Ihre Firewall ausgehende Verbindungen nicht blockiert.

Um nun über Powershell Remoting einen Befehl auf einem Remote-Computer auszuführen (z. B. möchten Sie den Spooler-Druckdienst neu starten), müssen Sie den folgenden Befehl ausführen:

Invoke-Command -computername server1 -credential domain\user1 -scriptblock ( Restart-Service Spooler)

Dieser Befehl führt den Befehl aus Restart-Service-Spooler auf einem Remote-Computer namens Server 1. Der Credential-Parameter wird verwendet, um den Befehl im Sicherheitskontext des Domänenbenutzers domain\user1 auszuführen.

Wenn Sie einen Benutzernamen angeben, zeigt Windows PowerShell ein Dialogfeld an, in dem Sie aufgefordert werden, das Kennwort für das Konto „Benutzer1“ anzugeben. Der in geschweiften Klammern angegebene Befehl wird dann auf dem Remote-Computer ausgeführt und gibt die Ergebnisse an die Konsole zurück. Sobald der Befehl ausgeführt wird, endet die Remote-PoSh-Sitzung.

Um eine Aufgabe im Hintergrund auszuführen, können Sie den Parameter -AsJob angeben.

Wenn Sie einen Befehl im Hintergrund ausführen, gibt PowerShell seine Ergebnisse nicht zurück. Um sie zu empfangen, müssen Sie das Cmdlet „Receive-Job“ verwenden.

Get-job –id 3 |Receive-Job

Um nicht nur einen Befehl, sondern ein ganzes PowerShell-Skript auszuführen, verfügt das Cmdlet Invoke-Command über ein spezielles Argument -FilePath, das anstelle von -ScriptBlock verwendet werden muss, um den Pfad zur Skriptdatei anzugeben. Ich habe zum Beispiel ein kleines PoSh-Skript erstellt, das eine Liste der gestoppten Dienste anzeigt. Lassen Sie uns dieses Skript auf einem Remotecomputer ausführen:

Invoke-Command -Computername Server1 -FilePath .\list.ps1

Hierbei ist zu beachten, dass Sie die ps1-Skriptdatei nicht selbst auf den Remote-Computer kopieren müssen. Die Ergebnisse der Skriptausführung werden an die Konsole ausgegeben.

Sehr oft besteht die Notwendigkeit, denselben Befehl/dasselbe Skript gleichzeitig auf mehreren Computern auszuführen. Mittels Invoke-Command lässt sich dies ganz einfach umsetzen. Sie können im Argument durch Kommas getrennte Computernamen auflisten -Computername.

Invoke-Command -ScriptBlock (Restart-Service-Spooler) -ComputerName server1,server2,server3

Oder fügen Sie es in ein Array ein:

$srv_list = @(″server4″,″server5″,″server6″)
Invoke-Command -ScriptBlock (Restart-Service Spooler) -ComputerName $servers

Oder aus einer Testdatei laden:

Invoke-Command -ScriptBlock (Restart-Service-Spooler) –ComputerName (Get-Content .\servers_list.txt)

Der Befehl wird auf jedem Computer ausgeführt und die Ergebnisse seiner Ausführung werden in der Konsole angezeigt.

Notiz. Das Invoke-Command-Cmdlet verfügt über einen Parameter ThrottleLimit Damit können Sie die maximale Anzahl von Computern festlegen, auf denen derselbe Befehl gleichzeitig ausgeführt werden kann. Standardmäßig ist die Zahl vom Computer auf Ziffern beschränkt 32 . Diese Zahl kann bei Bedarf erhöht werden. Beachten Sie jedoch, dass eine Erhöhung dieser Einstellung die Belastung des Prozessors und des Speichers Ihres Computers erhöht. Daher muss dieser Vorgang mit Vorsicht durchgeführt werden.

Bei der Installation ist es möglich, mithilfe von Pipelines gleichzeitig Befehle auf mehreren aus AD ausgewählten Computern auszuführen:

Get-ADComputer -Filter * -properties name | select (Name="computername";Expression=($_."name"))| Invoke-Command -ScriptBlock (Hostname)

Jedes Mal, wenn Invoke-Command ausgeführt wird, wird eine neue Sitzung erstellt, die einige CPU-Zeit und Ressourcen verbraucht. Um Ressourcenverschwendung zu vermeiden, können Sie alle Befehle in einer einzigen Sitzung ausführen. Erstellen wir zum Beispiel eine neue Sitzung sess1 mit dem Computer computer1, weisen sie der Variablen $session zu und führen dann unsere Aufgabe in dieser Sitzung aus:

$session = New-PSSession -ComputerName computer1 -Name sess1
Invoke-Command -ScriptBlock ( Restart-Service Spooler ) -Session $session

Diese Sitzung bleibt aktiv, bis Sie die PowerShell-Konsole schließen. Sie können die Sitzung auch schließen (Disconnect-PSSession) oder löschen (Remove-PSSession).

Ich arbeite oft mit Befehlen auf Remote-Systemen über PowerShell, sowohl bei Pentests als auch bei der Lösung alltäglicher Probleme. Remote-Befehle werden über das WinRM-Protokoll (Windows Remote Management) gestartet, das meines Wissens in Windows Vista SP 1, Windows 7, Windows Server 2008 und Windows Server 2012 unterstützt wird.

Einführung

Ich arbeite häufig mit Befehlen auf Remote-Systemen über PowerShell, sowohl bei Pentests als auch bei der Lösung alltäglicher Probleme. Remote-Befehle werden über das WinRM-Protokoll (Windows Remote Management) gestartet, das meines Wissens in Windows Vista SP 1, Windows 7, Windows Server 2008 und Windows Server 2012 unterstützt wird.

Grundeinstellungen

Bevor Sie mit dem Remote-System arbeiten können, müssen Sie die Einrichtung abschließen.

1. Starten Sie die PowerShell-Konsole als Administrator und führen Sie den folgenden Befehl aus:

Enable-PSRemoting -force

Mit dem obigen Befehl können Befehle auf Remote-Systemen ausgeführt werden. Wenn Sie Probleme haben, verwenden Sie die folgenden Befehle:

2. Stellen Sie sicher, dass der WinRM-Dienst automatisch startet.

# Stellen Sie den gewünschten Modus ein

Set-Service WinRM -StartMode Automatisch

# Überprüfen Sie, ob der Dienst ausgeführt wird

Get-WmiObject -Class win32_service | Where-Object ($_.name -like „WinRM“)

3. Setzen Sie alle Hosts auf den Status „Vertrauenswürdig“ (kann später durchgeführt werden).

# Vertraue allen Hosts

Set-Item WSMan:localhost\client\trustedhosts -value *

# Überprüfen Sie die Konfiguration vertrauenswürdiger Hosts

Get-Item WSMan:\localhost\Client\TrustedHosts

Beispiele für die Arbeit mit Remote-Systemen

Ausführen eines einzelnen Befehls auf einem Remote-System

Der Befehl „Invoke-Command“ dient zum Ausführen von Befehlen auf Remote-Systemen. Sie können als Ihr aktueller Benutzer arbeiten oder ein Drittanbieterkonto verwenden, wenn Sie an einem System arbeiten, das nicht Teil einer Domäne ist:

Invoke-Command –ComputerName MyServer1 -ScriptBlock (Hostname)
Invoke-Command –ComputerName MyServer1 -Credentials demo\serveradmin -ScriptBlock (Hostname)

Wenn das Modul für die Arbeit mit ActiveDirectory installiert ist, ist es möglich, Befehle über Pipelines auf mehreren Systemen auszuführen:

Get-ADComputer -Filter * -properties name | select @(Name="computername";Expression=($_."name")) |
Invoke-Command -ScriptBlock (Hostname)

Manchmal müssen Sie ein lokal auf einem Remote-System gespeichertes Skript ausführen:

Invoke-Command -ComputerName MyServer1 -FilePath C:\pentest\Invoke-Mimikatz.ps1
Invoke-Command -ComputerName MyServer1 -FilePath C:\pentest\Invoke-Mimikatz.ps1 -Credentials demo\serveradmin

Wenn Sie Befehle oder Funktionen dynamisch generieren, die dann an das Remote-System übergeben werden, können Sie eine Reihe von Invoke-Expression- und Invoke-Command-Befehlen verwenden:

$MyCommand = "Hostname"
$MyFunction = "function evil (write-host `"Getting evil...`";iex -command $MyCommand);evil"
invoke-command -ComputerName MyServer1 -Credentials demo\serveradmin -ScriptBlock
(Invoke-Expression -Command "$args") -ArgumentList $MyFunction

Organisieren einer interaktiven Konsole auf einem Remote-System

Mit dem Befehl „Enter-PsSession“ (ein bisschen wie SSH) können Sie in PowerShell eine interaktive Konsole auf einem Remote-System einrichten. Der Befehl „Enter-PsSession“ wird auch entweder als aktueller Benutzer oder unter Verwendung eines alternativen Kontos ausgeführt:

Geben Sie „PsSession –Computername server1.domain.com“ ein
Enter-PsSession –ComputerName server1.domain.com –Credentials domain\serveradmin

Das Schließen einer Sitzung erfolgt über den Befehl „Exit-PsSession“:

Hintergrundsitzungen erstellen

Eine weitere nützliche Funktion ermöglicht das Erstellen von Hintergrundsitzungen (Befehl „New-PsSession“). Hintergrundsitzungen können nützlich sein, wenn mehrere Befehle auf mehreren Systemen ausgeführt werden. Wie die vorherigen Befehle wird der Befehl „New-PsSession“ als aktueller Benutzer oder unter Verwendung eines alternativen Kontos ausgeführt:

New-PSSession -Computername server1.domain.com
New-PSSession –Computername server1.domain.com –Anmeldeinformationen domain\serveradmin

Wenn das Modul für die Arbeit mit ActiveDirectory installiert ist, ist es möglich, Hintergrundsitzungen für mehrere Systeme gleichzeitig zu erstellen (dieser Trick kann auf verschiedene Arten durchgeführt werden). Nachfolgend finden Sie ein Beispiel für die Erstellung von Hintergrundsitzungen für alle in der Domäne enthaltenen Systeme. Im Beispiel werden Sitzungen auf einem Nicht-Domänensystem unter Verwendung eines alternativen Domänenkontos erstellt.

New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root "
" -Server a.b.c.d -credential domain\user
cd RemoteADS:
Get-ADComputer -Filter * -Properties-Name | select @(Name="ComputerName";Expression=($_."name"))
| Neue PSSession

Anzeige einer Liste von Hintergrundsitzungen

Sobald mehrere Hintergrundsitzungen erstellt wurden, können Sie mit dem Befehl „Get-PsSession“ eine Liste davon anzeigen.

Interaktion mit Hintergrundsitzungen

Zuerst hatte ich ein ähnliches Gefühl wie bei der Arbeit mit Sitzungen in MetaSploit. Allerdings sind Hintergrundsitzungen in PowerShell etwas stabiler. Nachfolgend finden Sie ein Beispiel für eine Interaktion mithilfe einer Sitzungs-ID:

Enter-PsSession –id 3

Um die Sitzung zu beenden, verwenden Sie den Befehl „Exit-PsSession“. Die Sitzung wird wieder in den Hintergrund verschoben.

Ausführen von Befehlen über Hintergrundsitzungen

Wenn Sie einen Befehl in allen aktiven Sitzungen ausführen möchten, verwenden Sie die Befehlskombination „Invoke-Command“ und „Get-PsSession“.

Invoke-Command -Session (Get-PSSession) -ScriptBlock (Hostname)

Hintergrundsitzungen entfernen

Um alle aktiven Sitzungen zu entfernen, verwenden Sie den Befehl „Disconnect-PsSession“.

Get-PSSession | Disconnect-PSSession

Abschluss

Remote-Befehle in PowerShell eröffnen sowohl Administratoren als auch Pentestern enorme Möglichkeiten. Unabhängig von der Situation, wie Sie mit Remote-Systemen arbeiten, kommt es auf Folgendes an:

  • Um einen einzelnen Befehl auf einem Remote-System auszuführen, verwenden Sie „Invoke-Command“.
  • Um mit einem einzelnen System zu interagieren, verwenden Sie „Enter-PSSession“.
  • Wenn Sie viele Befehle auf vielen Systemen ausführen möchten, verwenden Sie Hintergrundsitzungen.

Ich hoffe, Sie fanden diesen Artikel hilfreich.

Vor nicht allzu langer Zeit musste ich ein wenig Zeit damit verbringen, den Fernzugriff über Powershell einzurichten. Dieser Ansatz scheint mir in einigen Fällen eine sehr gute Alternative zu Remote Desktop Services zu sein (Neustart des Dienstes auf Remote-VDS-Hosting, Erstellen von Backups, Anzeigen des Systemstatus usw.).

Die Möglichkeit, Remote-Powershell-Sitzungen zu erstellen, wurde in Version 2 eingeführt. Verwenden Sie dazu das Cmdlet Enter-PSSession / Invoke-Command. Vor der Verwendung muss jedoch die Umgebung vorbereitet werden.

Was wir tun auf dem Server:

Schritt 1:Öffnen Sie die Powershell-Konsole und aktivieren Sie Remotesitzungen mit dem Cmdlet Enable-PSRemoting mit der Force-Taste.

Enable-PSRemoting -Force

Schritt 2: Stellen Sie sicher, dass der WinRM-Dienst ausgeführt wird.

Starten Sie den WinRM-Dienst

Schritt 3: Wir konfigurieren Regeln in der Firewall, damit eingehende Verbindungen möglich sind.

Auf dem Computer, der als verwendet werden soll Klient Sie müssen außerdem mehrere Schritte ausführen:

Schritt 1: Erlauben Sie Verbindungen zu Remote-Hosts. Um auf beliebige Knoten zuzugreifen, können Sie die folgende Konstruktion verwenden:

Set-Item wsman:\localhost\client\trustedhosts * -Force

Schritt 2: Stellen Sie sicher, dass Ihre Firewall ausgehende Verbindungen nicht blockiert.

Um nun über Powershell eine Verbindung zu einem Remote-Knoten herzustellen, können Sie Folgendes tun:

Geben Sie PSSession 192.168.1.160 -Credential VMNAME\Benutzer ein

Die Werte 192.168.1.160 und VMNAME\User müssen durch die Adresse des Remote-Hosts und den Windows-Benutzernamen auf dem Server ersetzt werden.

Jetzt funktioniert der Fernzugriff über Powershell. Es gibt jedoch noch eine weitere Nuance. Vielleicht verwenden einige von Ihnen Profile in Powershell. Profile sind spezielle Skripte, die beim Start der Konsole selbst gestartet werden. Hier können Sie beispielsweise alle notwendigen Aliase definieren und vorbereitende Schritte durchführen.

Das Problem besteht darin, dass die Profile bei Verwendung von Remote-Sitzungen nicht starten. Dies kann durch die Verwendung unterschiedlicher Verbindungskonfigurationen gelöst werden. Dazu müssen Sie zunächst die Konfiguration auf dem Remote-Server registrieren. Sie können dies tun, indem Sie das Cmdlet Register-PSSessionConfiguration ausführen. In diesem Fall wird jeder Konfiguration ein Name zugewiesen. Für jede Konfiguration können Sie den Pfad zum Skript festlegen, das beim Start der Sitzung ausgeführt wird.

Register-PSSessionConfiguration -name Config1 -startupScript c:\scripts\Startup.ps1

Wenn Sie dann eine Verbindung zu einem Remote-Host herstellen, müssen Sie den Konfigurationsnamen angeben, wenn Sie das Cmdlet Enter-PSSession verwenden.

Enter-PSSession 192.168.1.160 -ConfigurationName Config1 -Credential VMNAME\User

Jetzt können Sie die Verschwendung von Serverressourcen beim Erstellen einer Verbindungssitzung über Remotedesktopdienste vermeiden und den Server mithilfe von Powershell aus der Ferne verwalten.

04.03.2011 Bill Stewart

Windows PowerShell 2.0 bietet einen alternativen Mechanismus zum Herstellen einer Verbindung mit Remotecomputern, der als Remoting bezeichnet wird. Dieser Mechanismus verwendet den Windows Remote Management (WinRM)-Dienst. Es ermöglicht Ihnen, eine Verbindung zu einem Remote-Computer herzustellen und Befehle auszuführen, die auf diesem Remote-Computer ausgeführt werden

Die Entwicklung von PowerShell 1.0 war ein echter Durchbruch bei der Entwicklung von Verwaltungs- und Automatisierungstools für Windows XP sowie spätere Versionen der Windows-Betriebssystemplattform. Plattformbasiert. NET Framework umfasst PowerShell 1.0 eine konsistente Befehlsstruktur (Cmdlets), eine leistungsstarke integrierte Ausgabeformatierung und erhebliche Verbesserungen bei der Zugänglichkeit anderer Technologien, insbesondere der Windows Management Instrumentation (WMI). Obwohl einige PowerShell 1.0-Befehle und -Objekte zusammengesetzt sind. NET kann eine Verbindung zu entfernten Computern herstellen; diese Funktion wird je nach Einzelfall unterschiedlich implementiert. Befehle, die Remoteverbindungen unterstützen, verfügen über den Parameter -ComputerName. Darüber hinaus nutzen sie beim Verbindungsaufbau entweder Remote Procedure Calls (RPC) oder das DCOM-Modell.

In vielen Situationen leisten RPC und DCOM gute Verwaltungsaufgaben, manchmal treten jedoch Probleme bei der Durchführung von Diagnoseverfahren und der Identifizierung der Problemursachen auf. Beispielsweise kann der Befehl „Get-Service“ mithilfe des Parameters „-ComputerName“ Dienstdaten von einem Remotecomputer lesen. Dieser Befehl verfügt jedoch nicht über den Parameter „-Credential“. Sie müssen also zum Ausführen mit einem Konto angemeldet sein, das dazu berechtigt ist auf das Remote-System zugreifen.

Aber bereits in der Version Windows PowerShell 2.0 ist ein alternativer Mechanismus zum Herstellen einer Verbindung zu Remotecomputern, genannt Remoting, implementiert. Dieser Mechanismus verwendet den Windows Remote Management (WinRM)-Dienst. Es ermöglicht Ihnen, eine Verbindung zu einem Remote-Computer herzustellen und Befehle auszuführen, die auf diesem Remote-Computer ausgeführt werden. Lassen Sie mich das, was ich gesagt habe, anhand eines Beispiels erläutern. Remotedesktopverbindungen erfolgen über die GUI, Remoting über die PowerShell-Befehlszeile. Wenn Sie einen zusammengesetzten Befehl mithilfe des Remoting-Mechanismus ausführen, wird der Befehl tatsächlich auf dem Remotecomputer ausgeführt, Sie können die Ausgabe jedoch auf dem lokalen Computer sehen.

Wo bekomme ich Windows PowerShell 2.0?

PowerShell 2.0 und WinRM sind in Windows 7 und Windows Server 2008 R2 enthalten. Wenn Sie diese Betriebssysteme verwenden, müssen Sie diese Komponenten also nicht installieren. Wenn Sie Windows Vista SP2, Windows XP SP3, Windows Server 2008 SP2 oder Windows Server 2003 SP2 verwenden, müssen Sie das Windows Management Framework Core-Paket herunterladen und installieren (support.microsoft.com/kb/968930).

Aktivieren Sie die Remoting-Funktion

Damit Ihr Computer Verbindungen zu Remote-Systemen herstellen kann, auf denen PowerShell installiert ist, müssen folgende Bedingungen erfüllt sein:

  1. Der WinRM-Dienst muss aktiviert sein.
  2. Es muss ein WinRM-Listener installiert sein, der Verbindungen von einer oder mehreren IP-Adressen akzeptiert.
  3. Die Windows-Firewall muss so konfiguriert sein, dass sie Verbindungen über WinRM zulässt.
  4. Die PowerShell-Sitzung muss aktiviert und ordnungsgemäß konfiguriert sein.

Wenn Ihr Computer keine Verbindungen von PowerShells akzeptiert, die auf Remotecomputern installiert sind, sind diese Bedingungen nicht erforderlich.

Um Benutzern den schnellstmöglichen Einstieg zu erleichtern, haben Microsoft PowerShell-Entwickler den Befehl Enable-PSRemoting erstellt, um diese Komponenten automatisch zu konfigurieren. Diese Einrichtung sollte nicht auf dem Computer durchgeführt werden, mit dem Sie remote interagieren, sondern auf dem Computer, auf den Sie remote zugreifen. Sie können den Befehl Enable-PSRemoting nur ausführen, wenn Sie PowerShell mit Administratorrechten ausführen. Wenn Sie mit Windows Vista-, Server 2008- und späteren Maschinen arbeiten, klicken Sie mit der rechten Maustaste auf das PowerShell-Symbol und wählen Sie im Dropdown-Menü die Option Als Administrator ausführen aus. Wenn Sie den Befehl „Enable-PSRemoting“ mit dem Parameter „-Force“ ausführen, fragt das System Sie nicht nach der Erlaubnis, jeden Konfigurationsschritt auszuführen, wenn dieser ausgeführt wird. Weitere Informationen zum zusammengesetzten Befehl „Enable-PSRemoting“ erhalten Sie, indem Sie den Befehl ausführen

Get-Help Enable-PSRemoting

Führen Sie einen Befehl auf einem Remotecomputer aus

Der einfachste Weg, eine Verbindung zu PowerShell auf einem Remotecomputer herzustellen, ist die Verwendung des Befehls Enter-PSSession. Standardmäßig wird dieser Befehl mit dem Parameter -ComputerName ausgeführt, sodass dieser Parameter bei der Eingabe über die Tastatur weggelassen werden kann. Um beispielsweise eine Verbindung mit einem Remote-Computer namens Rigel herzustellen, müssen Sie die Eingabe über die Tastatur vornehmen

PS C:\>Enter-PSSession rigel

Bitte beachten Sie: Der Vollständigkeit halber füge ich eine Einladung in den Text ein. Sie müssen die Eingabeaufforderung nicht als Teil eines Befehls eingeben.

Nachdem Sie eine Remotesitzung gestartet haben, ändert sich die Syntax der PowerShell-Eingabeaufforderung. Es enthält nun den Namen des Remote-Computers in eckigen Klammern; Dies bedeutet, dass Sie eine Verbindung mit dem Remote-Computer hergestellt haben. In diesem Fall sieht die Einladung so aus:

: PS C:\>

Sobald die Remote-Verbindung hergestellt ist, werden alle Befehle, die Sie an der Eingabeaufforderung eingeben, auf dem Remote-Computer ausgeführt. Also, wenn Sie den Befehl eingeben

: PS C:\> Get-ChildItem C:\

Der Befehl „Get-ChildItem“ wird auf dem Remote-Computer ausgeführt. Die Ausgabe enthält die Namen von Dateien und Ordnern, die auf dem Laufwerk C des Remote-Computers gespeichert sind. Um die Remoting-Sitzung zu beenden, verwenden Sie den Befehl Exit-PSSession

: PS C:\> Exit-PSSession

Ausführen eines Scriptblocks auf einem Remote-Computer

Mit PowerShell-Remoting können Sie einen Skriptblock (d. h. einen in geschweiften Klammern eingeschlossenen PowerShell-Codeblock) auf einem Remotecomputer ausführen. Verwenden Sie dazu den Invoke-Command mit dem Parameter -ComputerName. Im Befehl, den Abbildung 1 zeigt, habe ich beispielsweise „Invoke-Command“ verwendet, um „Get-ChildItem“ auf dem Remotecomputer auszuführen. Wenn Sie sich Abbildung 1 ansehen, fällt auf, dass ich vor der Ausführung des Skriptblocks nicht den Befehl „Enter-PSSession“ verwendet habe, um eine Verbindung zum Remotecomputer herzustellen. Enter-PSSession und Invoke-Command sind zwei verschiedene Remoting-Methoden.

Der erste Parameter des Invoke-Command ist der Parameter -ScriptBlock; Es verweist auf den Code, den Sie ausführen möchten. In Abbildung 1 habe ich den Parameternamen „-ScriptBlock“ weggelassen, da er optional ist. Der Parameter -ComputerName enthält den Namen des Remotecomputers. Wie Sie in der Ausgabe des Befehls „Get-ChildItem“ sehen können, listet PowerShell zur Vereinfachung für den Bediener sogar den Namen des Remotecomputers in der Spalte „PSComputerName“ der Ausgabe auf.

Führen Sie einen Skriptblock auf mehreren Remotecomputern aus

Der Skriptblock kann auch auf mehreren Remote-Computern ausgeführt werden. Dies wird als Eins-zu-viele-Konfiguration oder Ausbreitung bezeichnet. In Abbildung 1 enthält der Parameter „-ComputerName“ des Invoke-Command einen einzelnen Namen, Sie können jedoch mehrere Computernamen angeben. Ja, Team

PS C:\> Invoke-Command (Get-ChildItem env: co*) -Computer Titan, Rigel

Ermöglicht die Ausführung des Befehls „Get-ChildItem“ auf zwei Remotecomputern. Im Text des Artikels ist dieser Befehl in mehrere Zeilen unterteilt, in der PowerShell-Konsole sollte er jedoch in einer Zeile eingegeben werden. Gleiches gilt für andere Befehle, die auf mehrere Zeilen verteilt sind. Genau wie in Abbildung 1 enthält die Spalte „PSComputerName“ in der Ausgabe die Namen der Computer.

Führen Sie einen Skriptblock im Hintergrund aus

PowerShell 2.0 bietet die Möglichkeit, Hintergrundjobs auszuführen, was bedeutet, dass ein Bediener einen Befehl im Hintergrund ausführen kann. Diese Funktion ist nützlich, wenn Befehle ausgeführt werden, deren Ausführung lange dauert.

Um einen Hintergrundjob auf Ihrem lokalen Computer zu starten, können Sie den Befehl „Start-Job“ verwenden. Es muss jedoch gesagt werden, dass dieser Befehl keinen -ComputerName-Parameter hat, was bedeutet, dass er nicht zum Ausführen eines Hintergrundjobs auf einem Remote-Computer verwendet werden kann. Stattdessen müssen Sie den Invoke-Command mit dem Parameter -AsJob ausgeben. Der Befehl top in Abbildung 2 bewirkt also, dass der Skriptblock als Hintergrundjob auf dem Remote-Titan-Computer ausgeführt wird. Nachdem ich diesen Befehl eingegeben hatte, erschien sofort eine Eingabeaufforderung auf dem Bildschirm: PowerShell schickte einen Skriptblock zur Ausführung auf dem Remotecomputer und gab dann die Kontrolle an mich zurück. Die Warnung besagt, dass der ausgeführte Befehl nicht in das Konsolenfenster passte und daher nicht in der Ausgabe enthalten war. Wenn mein Konsolenfenster breiter wäre, würde der PowerShell-Formatierer den Befehl in die Ausgabeliste aufnehmen. Die Spalten „ID“ und „Name“ geben den Job an (seine ID bzw. seinen Anzeigenamen), und die Spalte „Status“ gibt an, ob der Job ausgeführt, angehalten oder abgeschlossen ist. Die Spalte „HasMoreData“ enthält Informationen, die darauf hinweisen, dass alle Daten für einen bestimmten Job abgerufen wurden oder dass der Job weitere Informationen enthält, die abgerufen werden müssen.

Um festzustellen, ob die Ausführung eines Hintergrundjobs abgeschlossen ist, können Sie den Befehl „Get-Job“ ausführen, wie im zweiten Befehl in Abbildung 2 dargestellt. Wenn Sie keine Parameter verwenden, überprüft Get-Job den Status aller während des aktuellen Jobs ausgeführten Jobs Sitzung. Wenn mehrere Jobs gleichzeitig ausgeführt werden, können Sie Parameter wie -Id oder -Name verwenden, um anzugeben, welchen Job Sie überprüfen möchten. Wenn der Hintergrundauftrag abgeschlossen ist, lautet die Statusspalte der Ausgabe „Abgeschlossen“.

Mit dem Befehl „Receive-Job“ können Sie die Ergebnisse eines Hintergrundjobs lesen. Dieser Befehl gibt wie der Befehl „Get-Job“ die Ausgabe aller Jobs zurück, die während der aktuellen Sitzung ausgeführt werden, es sei denn, Sie haben einen Parameter verwendet, um anzugeben, an welchem ​​Job Sie interessiert sind. Der letzte Befehl in Abbildung 2 enthält also einen Parameter „-Id“, der angibt, dass Sie die Ausgabe von Job-ID 9 wünschen. Ich habe den Namen des Parameters „-Id“ weggelassen, da er optional ist. Abbildung 3 zeigt die letzten Ausgabezeilen für den betreffenden Remote-Hintergrundjob.

Erstellen von PowerShell-Sitzungen

Die obigen Beispiele zeigen, wie Sie auf einer Remote-Maschine auf eine PowerShell-Eingabeaufforderung zugreifen und Befehle auf Remote-Maschinen ausführen. Was ich noch nicht erwähnt habe ist, dass Remoting immer im Kontext einer Sitzung erfolgt. In einer Sitzung befindet sich beispielsweise PowerShell. Wenn Sie ein PowerShell-Konsolenfenster oder ein PowerShell-ISE-Fenster (Integrated Scripting Environment) öffnen, erstellen Sie eine Sitzung. Ohne Remoting laufen alle Sitzungen auf dem lokalen Computer und sind unabhängig voneinander. Alle oben genannten Remoting-Beispiele erstellen temporäre Sitzungen, die automatisch beendet werden, wenn das Remoting endet. Es ist auch möglich, Remoting-Sitzungen zu instanziieren und wiederzuverwenden. Dieser Ansatz ist wesentlich effizienter, wenn mehr als einmal auf entfernte Computer zugegriffen werden muss.

Um neue Sitzungen zu erstellen, verwenden Sie den Befehl New-PSSession mit dem Parameter -ComputerName. Der Name dieses Parameters kann in Befehlen weggelassen werden. Ja, Team

C:\> $sessions = New-PSSession phineas, ferb, perry

Erstellt drei Sitzungen auf drei Computern mit den Namen Phineas, Ferb und Perry. Sie können diese Sitzungen anzeigen, indem Sie eine $sessions-Variable erstellen. Geben Sie dazu den Namen in die Befehlszeile ein

$sessions

und drücken Sie die Eingabetaste. Der Parameter -Session des Invoke-Command unterstützt Sitzungsobjekte, die mit dem Befehl New-PSSession erstellt wurden, sodass Sie dann einen Befehl ähnlich dem folgenden verwenden können:

C:\> Invoke-Command (Get-ChildItem) -session $sessions

Dieser Befehl führt den Befehl „Get-ChildItem“ auf Phineas, Ferb und Perry aus, beendet jedoch keine Verbindungen. Sie können den Parameter -AsJob hinzufügen und den Befehl im Hintergrund ausführen:

C:\> Invoke-Command (Get-ChildItem) -session $sessions -asjob

Neuer Arbeitsansatz

PowerShell-Remoting ist ein leistungsstarker neuer Mechanismus zum Ausführen von Befehlen auf Remotecomputern. Ich hoffe, dieser Artikel ermutigt Sie, neue Möglichkeiten zu erkunden. Weitere Informationen zum Remoting, einschließlich Diagnoseproblemen, finden Sie in den PowerShell-Hilfethemen about_Remote unter technet.microsoft.com/en-us/library/dd347616.aspx.

Bill Stewart ( [email protected]) – System- und Netzwerkadministrator für French Mortuary, New Mexico



Zusammenfassung: Einführung der Fernsteuerung in Windows PowerShell.

Weekend Scripter: Ermöglicht die Fernsteuerung von Windows.

Der Microsoft Scripting Guy, Ed Wilson, ist hier. Heute werde ich einen Auszug aus meinem neuen Buch „Windows PowerShell 3.0 Step by Step“ veröffentlichen, das von Microsoft Press veröffentlicht wurde. Dieses Buch kann jetzt vorbestellt werden.

WinRM – Windows-Remoteverwaltung

In Windows Server 2012 wird WinRM standardmäßig ausgeführt, um die Ausführung von Remote-Windows PowerShell-Befehlen zu unterstützen. WinRM ist Microsofts Implementierung des Industriestandards WS-Management Protocol. Daher bietet WinRM im Hinblick auf die Firewall-Konfigurationsanforderungen eine bequeme Möglichkeit, auf Remote-Systeme zuzugreifen. Dies ist der Mechanismus, den die neuen CIM-Cmdlets verwenden. Auf diese Weise können Sie jederzeit eine Verbindung zu einem laufenden Windows Server 2012-Computer herstellen, um Befehle auszuführen oder eine interaktive Windows PowerShell-Konsole zu öffnen. Unter Windows 8 hingegen ist WinRM standardmäßig deaktiviert. Das bedeutet, dass Sie als Erstes das Cmdlet ausführen müssen Enable-PSRemoting. Wenn Sie dieses Cmdlet ausführen, werden die folgenden Schritte ausgeführt:

1. Der WinRM-Dienst wird gestartet oder neu gestartet.

2. Der Starttyp des WinRM-Dienstes ist auf „Automatisch“ eingestellt.

3. Es wird ein Listener erstellt, der Verbindungen zu allen IP-Adressen akzeptiert.

4. Der Firewall-Ausschluss für WS-Man-Datenverkehr ist aktiviert.

5. Die Microsoft.powershell-Konfiguration ist aktiviert

6. Die Microsoft.powershell.workflow-Konfiguration ist aktiviert

7. Die Microsoft.powershell32-Konfiguration ist aktiviert

Während dieses Vorgangs fordert die Funktion eine Bestätigung für die Ausführung jeder Aktion an. Wenn Sie mit der Funktionsweise der Funktion vertraut sind und keine Änderungen an der Funktionsweise vornehmen möchten, können Sie diesen Befehl mit dem Schalter ausführen -Gewalt In diesem Fall werden keine Bestätigungsanfragen angezeigt. Die Syntax für diesen Befehl ist unten angegeben.

Enable-PSRemoting –Force

Hier ist nun ein Beispiel für die interaktive Verwendung der Funktion „Enable-PSRemoting“, einschließlich aller Ausgabeinformationen.

PS C:\>Enable-PSRemoting

WinRM-Schnellkonfiguration

Führen Sie den Befehl „Set-WSManQuickConfig“ aus, um die Remoteverwaltung dieses Computers mithilfe des Windows-Remoteverwaltungsdienstes (WinRM) zu aktivieren. Das beinhaltet:

1. Starten oder Neustarten (falls bereits gestartet) des WinRM-Dienstes

2. Festlegen des Starttyps des WinRM-Dienstes auf „Automatisch“.

3. Erstellen eines Listeners zum Akzeptieren von Anfragen an jede IP-Adresse

4. Aktivieren der eingehenden Regelausnahmen der Windows-Firewall für WS-Management-Datenverkehr (nur für http).

Möchtest du fortfahren?

WinRM wurde aktualisiert, um Anfragen zu empfangen.

Der WinRM-Diensttyp wurde erfolgreich geändert.

Der WinRM-Dienst wurde gestartet.

WinRM wurde für die Fernverwaltung aktualisiert.

Es wurde ein WinRM-Listener auf HTTP://* erstellt, um WS-Man-Anfragen an jede IP auf diesem Computer zu akzeptieren.

WinRM-Firewall-Ausnahme aktiviert.

microsoft.powershell SDDL:

[J] Ja [A] Ja für alle [N] Nein [L] Nein für alle [S] Unterbrechen [?] Hilfe (Standard ist „J“):y

Sind Sie sicher, dass Sie diese Aktion ausführen möchten?

Ausführen des Vorgangs „Set-PSSessionConfiguration“ für das Ziel „Name:“

microsoft.powershell.workflow SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;; WD). Dieser Wille

Ausgewählten Benutzern erlauben, Windows PowerShell-Befehle remote auf diesem Computer auszuführen.

[J] Ja [A] Ja für alle [N] Nein [L] Nein für alle [S] Unterbrechen [?] Hilfe (Standard ist „J“):y

Sind Sie sicher, dass Sie diese Aktion ausführen möchten?

Ausführen des Vorgangs „Set-PSSessionConfiguration“ für das Ziel „Name:“

microsoft.powershell32 SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;; WD). Dieser Wille

Ausgewählten Benutzern erlauben, Windows PowerShell-Befehle remote auf diesem Computer auszuführen.

[J] Ja [A] Ja für alle [N] Nein [L] Nein für alle [S] Unterbrechen [?] Hilfe (Standard ist „J“):y

Nachdem die Konfiguration abgeschlossen ist, können Sie die Funktionalität von WinRM mithilfe des Cmdlets überprüfen Test-WSMan. Wenn das System korrekt konfiguriert ist, werden Informationen ähnlich der folgenden angezeigt.

PS C:\>Test-WSMan -ComputerName w8c504

Produktversion: Betriebssystem: 0.0.0 SP: 0.0 Stapel: 3.0

Dieses Cmdlet funktioniert auch auf Computern, auf denen Windows PowerShell 2.0 ausgeführt wird. Das folgende Beispiel zeigt eine Anfrage an einen Domänencontroller unter Windows Server 2008, auf dem Windows PowerShell 2.0 installiert und WinRM konfiguriert ist.

PS C:\>Test-WSMan -ComputerName dc1

wsmid: http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd

Protokollversion: http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd

Produktanbieter: Microsoft Corporation

Produktversion: Betriebssystem: 0.0.0 SP: 0.0 Stapel: 2.0

Wenn WinRM nicht konfiguriert ist, wird eine Fehlermeldung zurückgegeben. Im Fall des Betriebssystems Windows 8 sieht die Meldung wie folgt aus.

PS C:\>Test-WSMan -ComputerName w8c10

Test-WSMan:

xmlns:f=“http: //schemas.microsoft.com/wbem/wsman/1/wsmanfault“ Code=“2150859046“

Machine=»w8c504.iammred.net»>WinRM kann den Vorgang nicht abschließen. Verifizieren

dass der angegebene Computername gültig ist, dass der Computer über erreichbar ist

Netzwerk und dass eine Firewall-Ausnahme für den WinRM-Dienst aktiviert ist und zulässt

Zugriff von diesem Computer aus. Standardmäßig gilt die WinRM-Firewall-Ausnahme für öffentlich

Profile beschränken den Zugriff auf Remotecomputer innerhalb desselben lokalen Subnetzes.

In Zeile:1 Zeichen:1

Test-WSMan -ComputerName w8c10

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CategoryInfo: InvalidOperation: (w8c10:String) , InvalidOperationException

FullyQualifiedErrorId: WsManError,Microsoft.WSMan.Management.TestWSManCommand

Beachten Sie, dass durch die Aktivierung der Fernverwaltung mit dem Cmdlet „Enable-PSRemoting“ die Firewall-Ausnahme für die Fernverwaltung nicht aktiviert wird, sodass der Versuch, einen Windows 8-Computer anzupingen, nicht erfolgreich sein wird.

PS C:\>ping w8c504

Pingen von w8c504.iammred.net mit 32 Byte Daten:

Zeitüberschreitung der Anforderung.

Zeitüberschreitung der Anforderung.

Zeitüberschreitung der Anforderung.

Zeitüberschreitung der Anforderung.

Ping-Statistiken für 192.168.0.56:

Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100 % Verlust).

Bei Windows Server 2012 funktioniert alles.

PS C:\>ping w8s504

Pingen von w8s504.iammred.net mit 32 Byte Daten:

<1ms TTL=128

Antwort von 192.168.0.57: Bytes=32 Zeit<1ms TTL=128

Antwort von 192.168.0.57: Bytes=32 Zeit<1ms TTL=128

Antwort von 192.168.0.57: Bytes=32 Zeit<1ms TTL=128

Ping-Statistiken für 192.168.0.57:

Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0 % Verlust),

Ungefähre Roundtrip-Zeiten in Millisekunden:

Minimum = 0 ms, Maximum = 0 ms, Durchschnitt = 0 ms

Das ist alles für die Aktivierung von WinRM.

Ed Wilson, Microsoft Scripting Guy

Original:

 
Artikel Von Thema:
Wir überprüfen die Leistung der Festplatte auf Fehler und Probleme
Wir verraten Ihnen eine einfache und zweite, fortgeschrittenere Möglichkeit, den Status Ihrer Festplatte zu überprüfen und fehlerhafte Sektoren mit dem Programm HDDScan und dem Programm HDD Regenerator zu reparieren. Die Festplatte verfügt über eine eigene Ressource, daher ist es ratsam, dies einmal zu tun ein Jahr
Powershell: Verwenden des Invoke-Command-Cmdlets
Heute ist PowerShell Remoting das wichtigste Tool für die Fernverwaltung von Windows-Betriebssystemen. Daher sollte jeder Windows-Systemadministrator über seine Fähigkeiten Bescheid wissen und sie bei seinen täglichen Aufgaben nutzen. Für
Testbericht zum Wacom Inkling Digitalstift
Zweifellos sind Computer mobil geworden und ein Arbeitsplatz kann mittlerweile überall organisiert werden – sogar im Park, auf dem Platz oder im Hof ​​auf einer Bank. Aber es wird immer noch kein vollwertiger Arbeitsplatz. Leider sind Scanner und Drucker bei weitem nicht so mobil
Vorwärts mit Höchstgeschwindigkeit
TFT IPS – Hochwertige Flüssigkristallmatrix. Der große Betrachtungswinkel ist einer der besten Indikatoren für die Qualität und den Kontrast der Farbwiedergabe unter allen, die bei der Herstellung von Displays für tragbare Geräte verwendet werden. Super AMOLED - wenn