0. Einführung ins Remoting mit dem WS-Management-Protokoll
         Beispiel 1: Anzeige aller konzeptionellen Hilfen über Remoting
         Beispiel 2: Alle cmdlets auflisten, deren Name Session enthalten

  1. Voraussetzungen
      1.1 Lokaler- und RemoteComputer sind nicht in einer Domäne
      1.2 Konfiguration des remoteComputers
         1.2.1 Lokale Konfiguration mit cmdlets
                  Beispiel 1a: Set-WsManQuickConfig
                  Beispiel 1b: Meldung bei fehlendem SSL-Zertifikat
                  Beispiel 2a: Enable-PsRemoting
                  Beispiel 2b: Disable-PsRemoting
                  Beispiel 3: Konfiguration des Listeners für eine bestimmte IP-Adresse
                  Beispiel 4: Abfrage der Listenerkonfiguration aus der Powershell heraus
         1.2.2 Konfiguration über GPO
                  Beispiel 1: Abfrage der Listenerkonfiguration aus der Powershell heraus

    2 RemoteSession ohne SSL
    2.1 New-PsSession <Clientname>
          Beispiel 1: Ablauf einer Remotesession
          Beispiel 2: Beenden aller Remotessions zu $computer

     3.  RemoteSession mit SSL-Verschlüsselung
          3.1 Kurzbeschreibung SSL
          3.2 Voraussetzungen für SSL bereitstellen
                3.2.1 Microsoft CA bereitstellen (CA-Server)
                3.2.2 Zertifikatsvorlage kopieren und anpassen (optional) (CA-Server)
                3.2.3 Zertifikat beantragen (RemoteRechner)
                3.2.4 Untersuchen des erstellten Zertifikats
                3.2.5 Listener konfigurieren (RemoteRechner)
                         Beispiel 1: SSL-Listener für alle IPs auf Port 5986 setzen
                         Beispiel 2: SSL-Listener für eine IP auf Port 5986 setzen
                         Beispiel 3: weitere Konfigurationsmöglichkeiten des winrm
                3.2.6 New-PsSession <Clientname> -usessl

     4.  PowershellRemote in allen Variationen
         4.1 Alternative zu WS-MAN/ WinRM
               Beispiel 1: Abrufen aller Processe von einem RemoteComputer
               Beispiel 2: Abrufen aller Processe von einem RemoteComputer mittels WMI
               Beispiel 3: Sicherheitsloch in psexec
         4.2 Sitzungskonfiguration/ Sessionconfiguration
               Beispiel 1: Anzeige der cmdlets zur Verwaltung einer Session Configuration
               Beispiel 2: Abfragen der vorhandenen Sessionkonfigurationen auf dem lokalen Computer
               4.2.1 Erstellen und Verwenden einer neuen Sessionkonfiguration
                        Beispiel 1: Erstellen einer neuen Sessionkonfiguration, die ein Startupskript enthält
               4.2.2 Sitzungskonfigurationen auslesen
                        Beispiel 1: Abfrage der vorhandenen Sessionkonfigurationen auf dem lokalen Computer mit dem WS-Verwaltungsanbieter
                        Beispiel 2: Detaillierte Information einer Sessionconfiguration mit get-pssessionconfiguration abfragen
                        Beispiel 3: Abfrage der vorhandenen Sessionkonfigurationen auf einem RemoteComputer mit dem WS-Verwaltungsanbieter
               4.2.3 Einschränken der verfügbaren cmdlets
                        Beispiel 1: verfügbare cmdlets mittels SessionConfiguration beschränken (AD-Userverwaltung)
               4.2.4 Sicherheitsbeschreibung einer Sitzungskonfiguration
                        4.2.4.1 Security Descriptor Definition Language (SDDL)
                                    Beispiel 1a: Analyse eines SDDL-Strings (Grundstruktur)
                                    Beispiel 1b: Analyse eines SDDL-Strings (ACE)
                                    Beispiel 1c: Anzeige der Berechtigungen mit der GUI
                        4.2.4.2 SessionConfiguration für bestimmte User verfügbar machen
                                    zusammenfassendes Beispiel zur SessionConfiguration
          4.3 Remotesessions mit dem cmdlet "Invoke-Command"
                4.3.1 Remoting mit temporärer Verbindung
                         Beispiel 1: schneller Überblick über die Laufwerke C und D auf verschiedenen Rechnern mittels Scriptblock
                         Beispiel 2: Überblick über die Laufwerke auf  verschiedenen Rechnern mittels lokalem Skript
                4.3.2 Remoting mit dauerhafter Verbindung
                         Beispiel 1: Abfrage eines Dienstes auf einem Remote Rechner
          4.4 interactive Sessions
               4.4.1 temporäre interaktive Session
                        Beispiel 1: Ablauf einer temporären, interactiven Session
                        Beispiel 2: Beenden einer temporären, interactiven Session
                        Beispiel 3: Das cmdlet "get-history"
               4.4.2 permanente interaktive Session
                        Beispiel 1: Aufbau und Anzeige mehrerer Remotesessions
                        Beispiel 2: Betreten und Verlassen einer Remotesession
                        Beispiel 3: Beenden aller Sessions zu Computer dc1
         4.5 implizite Sessions
               4.5.1 Import-PSSession
                        Beispiel 1: Import der Sharepoint-cmdlets in eine lokale Session
                        Beispiel 2: Import der ActiveDirectory-cmdlets in eine lokale Session
                        Beispiel 3: Import eines Modules aus dem Powershellpack des Windows7 ResourceKits
               4.5.2 Export-PSSession
                        Beispiel 1: Import eines Modules aus dem Powershellpack des Windows7 ResourceKits

     5. Troubleshooting
         5.1 Problem mit dem WinRM-Dienst
               Beispiel 1: Schnelltest am RemoteRechner, ob Remoting enabled ist.
               Beispiel 2: Fehlermeldung am lokalen Rechner, wenn der WinRM-Port nicht offen oder kein passender Listener konfiguriert ist
               Beispiel 3: Anzeige der WinRM-Konfiguration
               Beispiel 4: Abfrage der Listenerkonfiguration
         5.2 Problem mit der Firewall
         5.3 Problem mit dem SSL-Zertifikat
         5.4 Problem mit der Sessionkonfiguration (Zugriff verweigert)
         5.5 Prüfen des WS-Man
               Beispiel 1: cmdlet Test-WsMan
         5.6 Module PsDiagnostics
               Beispiel 1: Functionen des Moduls psdiagnostics anzeigen  


0 Einführung ins Remoting mit dem WS-Management-Protokoll

Dieses Kapitel beschäftigt sich mit dem Powershell-Remoting basierend auf dem herstellerunabhängigen WebServices-Management-Protokoll (WSMan). Microsoft implementiert das WS-Management-Protokoll mit WinRM 2.0 

"WinRM ist die Microsoft-Implementierung von WS-Management-Protokolls eine standardmäßige SOAP (Simple Object Access Protocol)-basierte, firewallfreundlichen-Protokoll, die Hardware und Betriebssystemen verschiedener Hersteller ermöglicht, zusammenzuarbeiten. Die Spezifikation WS-Management-Protokoll bietet ein gängiges Verfahren für Systeme auf Access und Exchange-Verwaltungsinformationen über eine IT-Infrastruktur."
aus: Microsoft Hilfe und Support: Windows Management-Frameworks

Die Powershell selbst versteht unter "Remote" hauptsächlich das auf WS-Man/ WinRM basierende Remoting, wie man in den konzeptionellen Hilfen erkennen kann. Dennoch gibt es neben WS-Man/ WinRM noch Alternativen wie WMI oder cmdlets mit dem Positionsparameter "computername", Befehle auf Remotemaschinen auszuführen. Auf diese werde ich im Kapitel 4.1 Alternativen zu WS-MAN näher eingehen.

Remoting mittels dem WS-Managementprotokoll bietet Vorteile, an die mit anderen Methoden kaum zu denken ist:

  • die Verbindung läuft über einen einzigen Port 5985 oder 5986 (Firewallfreundlich!)
  • volle Proxyunterstützung , siehe Technet: New-WSManSessionOption
  • die Verbindung kann zusätzlich mit einem SSL-Zertifikat abgesichert werden
  • Befehle können asynchron als Hintergrundaufträge ausgeführt werden (invoke-command ... -asJob)
  • mittels Sessionkonfiguration kann bestimmt werden, welche Benutzer eine Remoteverbindung mit dem Computer herstellen können
  • mittels Sessionkonfiguration kann bestimmt werden, welche Benutzer welche Befehle ausführen können.
  • der WinRM Server und Client können lokal oder zentral über GPOs konfiguriert werden
  • mittels "implizit Sessions" können cmdlets eine Remoterechners auf einem lokalen Rechner so genutzt  werden, als ob diese lokal installiert wären


Beispiel 1: Anzeige aller konzeptionellen Hilfen über Remoting

Get-Help about_remote
#Ausgabe

Name                              Category  Synopsis
----                              --------  --------
about_remote                      HelpFile  Describes how to run remote commands in Windows PowerShell.
about_remote_FAQ                  HelpFile  Contains questions and answers about running remote commands
about_remote_jobs                 HelpFile  Describes how to run background jobs on remote computers.
about_remote_output               HelpFile  Describes how to interpret and format the output of remote commands.
about_remote_requirements         HelpFile  Describes the system requirements and configuration requirements for
about_remote_troubleshooting      HelpFile  Describes how to troubleshoot remote operations in Windows PowerShell.

Jedes dieser Kapitel ist sicher einen Blick Wert

Zu Finden sind die Artikel auch online: Technet: Windows PowerShell Core About Topics

Beispiel 2: Alle cmdlets auflisten, deren Name Session enthalten

Diese cmdlets sind geeignet, eine WS-Man Remotesession in irgendeiner Form zu erstellen, beenden, abzufragen oder zu konfigurieren 

Get-Help session
#Ausgabe

Name                              Category  Synopsis
----                              --------  --------
New-WSManSessionOption            Cmdlet    Erstellt eine Hashtabelle für die WS-Verwaltungssitzungsoptio
Register-PSSessionConfiguration   Cmdlet    Erstellt und registriert eine neue Sitzungskonfiguration.
Unregister-PSSessionConfiguration Cmdlet    Löscht eine registrierte Sitzungskonfiguration vom Computer.
Get-PSSessionConfiguration        Cmdlet    Ruft die registrierten Sitzungskonfigurationen auf dem Comput
Set-PSSessionConfiguration        Cmdlet    Ändert die Eigenschaften einer registrierten Sitzungskonfigur
Enable-PSSessionConfiguration     Cmdlet    Aktiviert die Sitzungskonfigurationen auf dem lokalen Compute
Disable-PSSessionConfiguration    Cmdlet    Verweigert den Zugriff auf die Sitzungskonfigurationen auf de
New-PSSession                     Cmdlet    Erstellt eine dauerhafte Verbindung mit einem lokalen Compute
Get-PSSession                     Cmdlet    Ruft die Windows PowerShell-Sitzungen (PSSessions) in der akt
Remove-PSSession                  Cmdlet    Schließt eine oder mehrere Windows PowerShell-Sitzungen (PSSe
Enter-PSSession                   Cmdlet    Startet eine interaktive Sitzung mit einem Remotecomputer.
Exit-PSSession                    Cmdlet    Beendet eine interaktive Sitzung mit einem Remotecomputer.
New-PSSessionOption               Cmdlet    Erstellt ein Objekt, das erweiterte Optionen für eine PSSessi
Export-PSSession                  Cmdlet    Importiert Befehle aus einer anderen Sitzung und speichert si
Import-PSSession                  Cmdlet    Importiert Befehle aus einer anderen Sitzung in die aktuelle
Disconnect-TerminalSession        Cmdlet    PSCX Cmdlet: Disconnects a specific remote desktop session on
Get-TerminalSession               Cmdlet    PSCX Cmdlet: Gets information on terminal services sessions.
Stop-TerminalSession              Cmdlet    PSCX Cmdlet: Logs off a specific remote desktop session on a
about_pssessions                  HelpFile  Beschreibt Windows PowerShell-Sitzungen (PSSessions) und
about_pssession_details           HelpFile  Stellt ausführliche Informationen über Windows PowerShell-
about_Session_Configurations      HelpFile  Beschreibt Sitzungskonfigurationen

Anmerkung:
Die drei Terminalserver-cmdlets (PSCX-Cmdlet) in dieser Ausgabe stammen aus den CommunityExtensions. Weitere Terminal-cmdlets gibt es unter MSDN: Terminal Services PowerShell Module
Mit QUser.exe lassen sich ganz ohne Zusatzmodule Informationen zur aktuellen TSSession gewinnen.

1 Voraussetzungen

Setzt man Windows 7 und Windows2008R2 Server ein, so sind installationsseitig alle Voraussetzungen erfüllt, Powershellskripte remote ausführen zu können.

Für Betriebssysteme ab WindowsXP (SP3)  und Windows2003 (SP2) bis einschliesslich WindowsVista und Windows2008Server können die Installationskomponenten kostenlos bei Microsoft im „Windows Management-Framework Core (WinRM 2.0 und Windows PowerShell 2.0) „ unter Microsoft Hilfe und Support: Windows Management-Frameworks (Windows PowerShell 2.0 WinRM 2.0 und BITS 4.0) heruntergeladen werden.

Zwingende Voraussetzungen für Remoting sind auf dem lokalen und auf dem RemoteComputer:

  • Windows PowerShell 2.0 oder höher
  • The Microsoft .NET Framework 2.0 oder höher
  • Windows Remote Management (WinRM) 2.0
  • Der RemoteComputer muss netztechnisch über die WSMan-Ports 5985 oder 5986 (SSL) erreichbar sein
  • Für eine SSL-Verbindung muss auf dem RemoteComputer ein geeignetes Zertifikat liegen (siehe Kapitel 3)

folgende Punkte erfordern bei Nichterfüllung zusätzliche Schritte:

  • Der ausführende User muss die Rechte eines lokalen Administrators auf der Remotemaschine besitzen, oder er muss Username und Passwort eines solchen Administratoraccounts dem Script mitgeben können
  • Die Verbindung zum Remotesystem erfolgt über den Namen, nicht über die IP-Adresse
  • Lokales und RemoteSystem befinden sich in derselben Domäne

Sind diese Punkte nicht gegeben, findet man entweder in der OnlineHilfe unter

Get-Help about_Remote_Troubleshooting

oder besser - da aktueller - in der Technet: about_Remote_Troubleshooting Hinweise, welche Schritte dann unternommen werden müssen.
Im nächsten Kapitel 1.1 zeige ich kurz, was zu tun ist, falls Lokaler- und RemoteComputer sich nicht in einer Domäne befinden.

Ansonsten gehe ich den weiter darauf folgenden Kapiteln davon aus, daß diese Punkte nicht gesondert konfiguriert werden müssen.

1.1 Lokaler- und RemoteComputer sind nicht in einer Domäne

Befinden sich Lokaler- und RemoteComputer in derselben Domäne, so braucht der lokale Computer keine weiteren Einstellungen. Andernfalls muss der Remotecomputer auf dem lokalen Computer in die Trusted Hosts aufgenommen werden, was mit

cd WsMan:
cd Localhost\Client
Set-Item -Path TrustedHosts -Value "Server1,Server2,Server3" -Force

leicht zu erledigen ist. Kontrollieren lässt sich der Erfolg

WSMan:\localhost\Client> dir
#Ausgabe:
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client

Name                      Value
----                      -----
NetworkDelayms            5000
URLPrefix                 wsman
AllowUnencrypted          false
Auth
DefaultPorts
TrustedHosts              Server1,Server2,Server3

Die Trustedhosts können natürlich auch per GPO gesetzt werden.

"Computerkonfiguration -> Richtlinien -> Administrative Vorlagen: vom lokalen Computer abgerufene Richtliniendefinitionen -> Windows Komponenten -> Windows-Remoteverwaltung (WinRM) -> WinRMClient -> Vertrauenswürdige Hosts"

1.2 Konfiguration des remoteComputers

Auf dem Remotecomputer, das ist derjenige der die Remotebefehle empfängt, muss das Remoting aktiviert werden. Dies kann durch das lokale Ausführen bestimmter cmdlets siehe  "1.2.1 Lokale Konfiguration mit cmdlets" oder zentral durch Group Policies "1.2.2 Konfiguration über GPOs" geschehen.

1.2.1 Lokale Konfiguration mit cmdlets

Die Möglichkeiten den WinRM-Dienst zu konfigurieren sind ausgesprochen umfangreich. Ich beschränke mich hier auf die Konfiguration der Listener und der Sessionconfiguration und belasse den Rest auf Default.
Mehr Informationen findet ihr unter:

Technet: about_Remote_Requirements

Technet: New-WSManSessionOption (unbedingt zumindest überfliegen, um die möglichen Optionen zu kennen!) 


Beispiel 1a: Set-WsManQuickConfig

Hier benutze ich das cmdlet Set-WsManQuickConifg einmal ohne und einmal mit dem Parameter -usessl, was einige weitere Voraussetzungen erforderlich macht. (siehe "Kapitel 3 RemoteSession mit SSL-Verschlüsselung" ). Sind diese zusätzlichen Voraussetzungen nicht gegeben oder nicht erforderlich, dann lasst -usessl einfach erstmal weg.

Set-WsManQuickConfig
#Set-WsManQuickConfig -usessl
#Die Ausgabe beider Befehle ist fast identisch

WinRM-Schnellkonfiguration
Die Ausführung des Befehls "Set-WSManQuickConfig" hat erhebliche Auswirkungen auf die Sicherheit, da mit diesem die Remoteverwaltung über den WinRM-Dienst auf diesem Computer ermöglicht wird.
Mit diesem Befehl werden folgende Aktionen ausgeführt:
 1. Überprüfen, ob der WinRM-Dienst ausgeführt wird. Wenn der WinRM-Dienst nicht ausgeführt wird, wird der Dienst gestartet.
 2. Festlegen des Starttyps für den WinRM-Dienst auf automatisch.
 3. Erstellen eines Listeners zum Akzeptieren von Anforderungen an beliebigen IP-Adressen. Standardmäßig wird für den Transport HTTP verwendet.
 4. Aktivieren einer Firewallausnahme für den WS-Verwaltungsverkehr.
Möchten Sie die Remoteverwaltung über den WinRM-Dienst auf diesem Computer aktivieren?
[J] Ja  [N] Nein  [H] Anhalten  [?] Hilfe (Standard ist "J"): j
WinRM ist bereits zum Empfangen von Anforderungen auf diesem Computer konfiguriert.
WinRM wurde für die Remoteverwaltung aktualisiert.
Auf HTTPS://* wurde ein WinRM-Listener erstellt, um die WS-Verwaltungsanforderungen an eine beliebige IP-Adresse auf diesem Computer zu akzeptieren.
Die CertificateThumbprint-Einstellung für den Dienst wurde konfiguriert.

- Das cmdlet "Set-WSManQuickConfig" konfiguriert den WinRm-Dienst so, daß dieser Remoteverbindungen auf allen IPs des Rechners akzeptiert. Welche Konfigurationsänderungen dieses cmdlet genau vornimmt, ist in der OnlineHilfe oder unter Technet: Set-WSManQuickConfig beschrieben. In Beispiel 3 zeige ich, wie man den Listener auf eine bestimmte IP-Adresse bindet.
- Set-WSMANQuickConfig muss in einer Powershellsession ausgeführt werden, die mit "als Administrator ausführen" gestartet wurde (rechte Maustaste auf die PS-Verknüpfung)


Beispiel 1b: Meldung bei fehlendem SSL-Zertifikat

Set-WsManQuickConfig -usessl

#Ausgabe bei fehlendem SSL-Zertifikat

Set-WsManQuickConfig : Es kann kein WinRM-Listener für HTTPS erstellt werden, da der Computer kein geeignetes Zertifikat besitzt. Zur Verwendung für SSL muss ein Zertifikat einen mit dem Hostnamen identischen, allgemeinen Namen (CN) besitzen und für die Serverauthentifizierung geeignet sein. Außerdem darf das Zertifikat nicht abgelaufen, gesperrt oder selbstsigniert sein.

Wenn "set-wsmanconfig -usessl" diese Fehlermeldung liefert, so müssen zuerst weitere Voraussetzungen wie im Kapitel 3 SSL-Verschlüsselung weiter unten geschaffen werden.


Beispiel 2a: Enable-PSRemoting
Sehr ähnlich zu "Set-WsManQuickConfig" arbeitet das cmdlet "Enable-PSRemoting", allerdings ohne die Möglichkeit einen HTTPS-Listener einrichten zu können.

Enable-PSRemoting ruft zum einen "Set-WsManQuickConfig" auf und setzt damit dessen Einstellungen auf dem RemoteRechner, zum Anderen konfiguriert es bei Bedarf die Sitzungskonfiguration über Berechtigungen für den Remotezugriff durch Aufruf des cmdlets "PsSessionConfiguration -name *". Dieser "Bedarf" ist dann vorhanden, wenn vorher das cmdlet "Disable-PsRemoting" ausgeführt wurde.

Enable-PsRemoting
#Ausgabe
#der erste Teil kommt von "WsMan-QucikConfig"
#der zweite Teil von "PsSessionConfiguration -name *"

WinRM-Schnellkonfiguration
Der Befehl "Set-WSManQuickConfig" zum Aktivieren dieses Computers für die Remoteverwaltung über den WinRM-Dienst ausgeführt.
 Dies umfasst die folgenden Schritte:
    1. Starten des WinRM-Diensts (bzw. Neustart bei bereits gestartetem Dienst)
    2. Festlegen des automatischen Starts für den WinRM-Dienst
    3. Erstellen einespss Listeners zum Akzeptieren von Anforderungen für eine beliebige IP-Adresse
    4. Aktivieren der Firewallausnahme für WS-Verwaltungsdatenverkehr (nur HTTP).

Möchten Sie den Vorgang fortsetzen?
[J] Ja  [A] Ja, alle  [N] Nein  [K] Nein, keine  [H] Anhalten  [?] Hilfe (Standard ist "J"): j
WinRM ist bereits zum Empfangen von Anforderungen auf diesem Computer konfiguriert.
WinRM ist bereits für die Remoteverwaltung auf diesem Computer eingerichtet.

Bestätigung
Möchten Sie diese Aktion wirklich ausführen?
Ausführen des Vorgangs "Set-PSSessionConfiguration" für das Ziel "Name: microsoft.powershell SDDL:
O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD). Damit lassen Sie die Remoteausführung von Windows PowerShell-Befehlen auf diesem Computer für ausgewählte Benutzer zu.".
[J] Ja  [A] Ja, alle  [N] Nein  [K] Nein, keine  [H] Anhalten  [?] Hilfe (Standard ist "J"):

Die Rückfragen lassen sich mit dem Positionsparameter -force unterdrücken


Beispiel 2b: Disable-PSRemoting
Dieses cmdlet macht nicht alle Konfigurationen von "Enable-PsRemoting" rückgängig, sondern nur die Berechtigung der Sessionkonfigurationen von "PsSessionConfiguration -name *" (siehe Beispiel 2a).
Dadurch wird sofort die Möglichkeit einer Remoteverbindung über WinRM unterbunden. (Fehlermeldung: Zugriff verweigert)

Disable-PsRemoting -force
WARNUNG: Durch Deaktivieren der Sitzungskonfigurationen werden nicht alle Änderungen rückgängig gemacht, die vom Cmdlet  "Enable-PSRemoting" oder "Enable-PSSessionConfiguration" vorgenommen wurden. Möglicherweise müssen Sie die Änderungen manuell rückgängig machen, indem Sie die folgenden Schritte ausführen:
    1. Beenden und deaktivieren Sie den WinRM-Dienst.
    2. Löschen Sie den Listener, der Anforderungen auf beliebigen IP-Adressen akzeptiert.
    3. Deaktivieren Sie die Firewallausnahmen für die WS-Verwaltungskommunikation.
    4. Setzen Sie den Wert von LocalAccountTokenFilterPolicy auf 0 zurück. Dadurch wird der Remotezugriff auf Mitglieder der Gruppe "Administratoren" auf dem Computer eingeschränkt.

Auch hier unterbindet der Positionsparameter -force weitere Rückfragen.


Beispiel 3: Konfiguration des Listeners für eine bestimmte IP-Adresse

Die folgenden Befehle können in der Commandlineshell oder in der Powershell ausgeführt werden

winrm create winrm/config/Listener?Address=IP:192.168.2.1+Transport=HTTP
#Ausgabe

ResourceCreated
    Address = schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
    ReferenceParameters
        ResourceURI = schemas.microsoft.com/wbem/wsman/1/config/listener
        SelectorSet
            Selector: Address = IP:192.168.2.1, Transport = HTTP

 

winrm create winrm/config/Listener?Address=IP:192.168.2.1+Transport=HTTPS
#Ausgabe
ResourceCreated
    Address = schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
    ReferenceParameters
        ResourceURI = schemas.microsoft.com/wbem/wsman/1/config/listener
        SelectorSet
            Selector: Address = IP:192.168.2.1, Transport = HTTPS

Anmerkungen

- Die Konfiguration mit dem winrm-Tool, das kein PS-cmdlet ist, können Listener genauer konfiguriert werden, als mit den cmdlets Set-WSManQuckconfig oder Enable-PSRemoting.
- In der Registry kann man sich den lokal konfigurierten Listener direkt ansehen (nicht den per GPO konfigurierten!):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Listener\


Anmerkungen zu den Registryeinträgen:

  • *+HTTP bedeutet, daß der Listener auf jeder IP des Rechners nach Remoteanfragen auf dem HTTP-Port 5985 "lauscht"
  • *+HTTPS bedeutet, daß der Listener auf jeder IP des Rechners nach Remoteanfragen auf dem HTTPS-Port 5986 "lauscht". Auf diesem Rechner wurde neben "set-wsmanconfig" somit auch  "set-wsmanquickconfig -usessl" erfolgreich durchgeführt
  • IP:192.168.2.1+HTTP(S) bedeutet, daß der Listener nur für die IP 192.168.2.1 konfiguriert wurde
  • die Listener können durch Entfernen der Schlüssel unterhalb des Listenerschlüssels gelöscht werden. Der Listenerschlüssel selbst muss aber erhalten bleiben, sonst können später keine neuen Listener hinzugefügt werden.
  • Weiter sollten der Fingerabdruck des Zertifikats (credssp_thumbprint) unter dem Key "Service" entfernt werden.


Beispiel 4: Abfrage der Listenerkonfiguration aus der Powershell heraus

Mit diesem Befehl werden sowohl per cmdlets, wie auch per GPOs kofigurierte Listener angezeigt.

winrm enumerate winrm/config/listener
#Ausgabe

Listener      #Anmerkung: wie man sieht, sieht man nichts. Vergleich mit GPO-Konfiguration!
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 192.168.129.127, 127.0.0.1, ::1, 2002:2c6:817f::2c6:817f, fe80::200:5efe:192.168.129.127%12

Listener       #Anmerkung: wie man sieht, sieht man nichts. Vergleich mit GPO-Konfiguration!        
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname = Dom1Win7.Dom1.intern
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = 46 17 1c 53 ea a7 b7 a7  f6 de d7 e2 bc e9 fd 2f85 2c 4c 12
    ListeningOn = 192.168.129.127, 127.0.0.1, ::1, 2002:2c6:817f::2c6:817f, fe80::200:5efe:192.168.129.127%12

Zu Beachten ist, daß bei lokal konfigurierten Listenern in der ersten Zeile "Listener" keine weiteren Angaben erfolgen. Bei einem GPO-konfiguriertem Listener gibt es keine Angaben

1.2.2 Konfiguration über GPOs

Die Konfigurationsmöglichkeiten des WinRM-Dienstes über Gruppenrichtlinien sind vergleichsweise dürftig. Besonders auffällig finde ich das Fehlen der Konfiguration von HTTS-Listenern.

Im Gruppenrichtlinieneditor findet man unter:
"Computerkonfiguration -> Richtlinien -> Administative Vorlagen -> Windows-Komponenten -> Windows-Remoteverwaltung (WinRM) -> WinRM-Dienst" die Settings für den WinRM-Service


Diese GPO-Settings habe ich aktiviert:

  • Automatische Konfiguration von Listenern zulassen -> HTTP Port 5985
  • Kompatibilitäts-HTTP-Listener aktivieren -> HTTP Port 80
  • Kompatibilitäts-HTTPS-Listener aktivieren -> HTTPS Port 443

was zu folgender Listenerkonfiguration führt:
(Beachtet das "Source=" neben Listener)

Beispiel 1: Abfrage der Listenerkonfiguration aus der Powershell heraus

winrm enumerate winrm/config/listener
Listener [Source="GPO"]
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 4.11.129.127, 127.0.0.1, ::1, 2002:2c6:817f::2c6:817f, fe80::200:5efe:4.11.129.127%12

Listener [Source="Compatibility"]
    Address = *
    Transport = HTTP
    Port = 80
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 4.11.129.127, 127.0.0.1, ::1, 2002:2c6:817f::2c6:817f, fe80::200:5efe:4.11.129.127%12

Listener [Source="Compatibility"]
    Address = *
    Transport = HTTPS
    Port = 443
    Hostname = Dom1Win7.Dom1.intern
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = 46 17 1c 53 ea a7 b7 a7  f6 de d7 e2 bc e9 fd 2f85 2c 4c 12
    ListeningOn = 4.11.129.127, 127.0.0.1, ::1, 2002:2c6:817f::2c6:817f, fe80::200:5efe:4.11.129.127%12
  • a) Zu Beachten ist, daß bei lokal konfigurierten Listenern in der ersten Zeile "Listener" keine weiteren Angaben erfolgen. Bei GPO-konfiguriertem Listener gibt es hier Angaben
  • b) Ich vermisse die Möglicheit einen HTTPS-Listener über eine GPO auf Port 5986 zu konfigurieren, wie das lokal (siehe Kapitel 1.2.1 Beispiel 1) möglich ist.