none
Powershell Script via GPO gibt "falsche" Werte zurück RRS feed

  • Frage

  • Hallo zusammen,

    ich versuche RemoteDesktopAnmeldungen an unseren Server-VMs (2012) zu protokollieren. Hierzu nutze ich unter anderem die folgenden 2 Befehle in einem Powershellskript, welches über eine BenutzerGPO (Benutzer\Richtlinien\Windows-Einstellungen\Scripts) aufgerufen wird :

    [String]$ClientName = $env:Clientname
    [String]$ClientIP = [System.Net.Dns]::GetHostAddresses($env:clientname)[0].ToString()

    Wenn ich die Befehle in einer Remotedesktopsession auf dem Server in die lokale Powershell eingebe, bekomme ich auch die richtigen Werte angezeigt (Hostname meines Clients, IPv4 Adresse meines Clients). Wenn das Loginscript jedoch über die Benutzer GPO läuft bekomme ich die IPv6 Adresse des HOSTS, sowie keinen Clientnamen in das Log protokolliert.

    Ich habe die Frage auch schon im PS Forum gestellt, man konnte mir aber nicht helfen und ich wurde hierher verwiesen...

    Danke für jede Hilfe,
    Mag

    Dienstag, 25. November 2014 13:01

Antworten

  • > [String]$ClientName = $env:Clientname
     
    Das geht in einem Anmeldeskript nicht - %Clientname% ist in diesem
    Moment noch nicht im Environment verfügbar...
     
    Workaround: Hole dier die SessionID eines beliebigen Prozesses (z.B.
    desjenigen, in dem Du selbst gerade läufst), und den Clientname aus der
    Registry:
     
    "HKCU\Volatile Environment\" &  SessionID & "\Clientname"
     
    > [System.Net.Dns]::GetHostAddresses($env:clientname)[0].ToString()
     
    IP-Adressen sind ein ARRAY! Wenn Du sicher eine IPv4-Adresse willst,
    mußt Du alle Einträge des Array prüfen.
     
    > Ich habe die Frage auch schon im PS Forum gestellt, man konnte mir aber
    > nicht helfen und ich wurde hierher verwiesen...
     
    Klar, ist ja auch kein PS Problem :)
     

    Martin

    Mal ein GUTES Buch über GPOs lesen?

    NO THEY ARE NOT EVIL, if you know what you are doing: Good or bad GPOs?
    And if IT bothers me - coke bottle design refreshment :))
    • Als Antwort markiert Magroll Mittwoch, 26. November 2014 08:11
    Dienstag, 25. November 2014 13:30
    Beantworter

Alle Antworten

  • > [String]$ClientName = $env:Clientname
     
    Das geht in einem Anmeldeskript nicht - %Clientname% ist in diesem
    Moment noch nicht im Environment verfügbar...
     
    Workaround: Hole dier die SessionID eines beliebigen Prozesses (z.B.
    desjenigen, in dem Du selbst gerade läufst), und den Clientname aus der
    Registry:
     
    "HKCU\Volatile Environment\" &  SessionID & "\Clientname"
     
    > [System.Net.Dns]::GetHostAddresses($env:clientname)[0].ToString()
     
    IP-Adressen sind ein ARRAY! Wenn Du sicher eine IPv4-Adresse willst,
    mußt Du alle Einträge des Array prüfen.
     
    > Ich habe die Frage auch schon im PS Forum gestellt, man konnte mir aber
    > nicht helfen und ich wurde hierher verwiesen...
     
    Klar, ist ja auch kein PS Problem :)
     

    Martin

    Mal ein GUTES Buch über GPOs lesen?

    NO THEY ARE NOT EVIL, if you know what you are doing: Good or bad GPOs?
    And if IT bothers me - coke bottle design refreshment :))
    • Als Antwort markiert Magroll Mittwoch, 26. November 2014 08:11
    Dienstag, 25. November 2014 13:30
    Beantworter
  • Hallo Martin,

    vielen Dank für Deine Idee, ich habe mein Skript auch so angepasst das ich die entsprchenden Werte zurückbekomme, aber ich weiß nicht welchen Process ich am besten abfragen soll, damit ich auch einen eindeutigen Wert zurückbekomme :o(
    Hast Du da evt. auch einen Tipp? Zur Zeit schlägt mein Skript fehll, weil manchmal mehrere SessionIDs zurückgegeben werden...

    Danke soweit,

    Mag

    Dienstag, 25. November 2014 16:22
  • > vielen Dank für Deine Idee, ich habe mein Skript auch so angepasst das
    > ich die entsprchenden Werte zurückbekomme, aber ich weiß nicht welchen
    > Process ich am besten abfragen soll, damit ich auch einen eindeutigen
    > Wert zurückbekomme :o(
     
    Google kaputt bei Dir? SCNR...
     
     
    Erster Treffer :)
     

    Martin

    Mal ein GUTES Buch über GPOs lesen?

    NO THEY ARE NOT EVIL, if you know what you are doing: Good or bad GPOs?
    And if IT bothers me - coke bottle design refreshment :))
    Dienstag, 25. November 2014 17:10
    Beantworter
  • Hi, nein Google geht, hab wohl nur falsch gesucht :/

    Hatte mir jetzt eine eigene Lösung gebastelt :

    $PSProcesses = Get-WmiObject win32_process -filter "Name='powershell.exe'"
    ForEach ($Process in $PSProcesses) {
    $ProcOwner = $Process.getowner()
    if ($ProcOwner.User -eq $env:Username) {
    $SessionID = $Process.SessionID
    }
    }

    Die von Dir gefundene ist aber deutlich cooler :o)
    Vielen Dank für Deine Hilfe, Thumbs up!

    Mag

    Mittwoch, 26. November 2014 08:10