none
Remoteabfrage, ob ein User am Rechner angemeldet ist RRS feed

  • Frage

  • Hallo Zusammen,

    möchte gerne Abfragen, ob ein User an einem Client angemeldet ist und dies in 2 Dateien ausgeben. Habe folgenden Skript dazu geschrieben:

    #Ausgabe der User
    $datei = "Userdatei"
    $datei1 = "Userdatei1"

    #Abfragen der User mit Credentials
    $username = Domäne\name
    $password = Passwort.txt | convertto-securestring
    $cred = new-object -typename System.Management.Automation.PSCredential `
                -argumentlist $username, $password
    $Computernames = Get-content "Abfragedatei"
    foreach ($Computername in $Computernames) {
    if (Get-WmiObject -Class "Win32_ComputerSystem" -ComputerName (Get-Content "Abfragedatei") | fl name  -Authentication Default -Credential $cred) {
    "$Computername" | Add-Content $datei
    }
    else {
    "$Computername" | Add-Content $datei1
    }
    }

    Ich bekomme folgende fehlermeldung:

    Get-WmiObject : Der Parameter ist ungültig.
    In Zeile:7 Zeichen:5
    + if (Get-WmiObject -Class "Win32_ComputerSystem"  -Authentication Default -Creden ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
        + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

    Hat jemand eine Idee?

    VG

    Hanuta

    Freitag, 11. September 2015 11:44

Antworten

  • Hallo,

    query session /server:RECHNERNAME

    oder

    (Get-WmiObject -Class Win32_ComputerSystem -ComputerName 'RECHNERNAME').UserName

    Beste Gruesse
    brima



    • Bearbeitet brima Freitag, 11. September 2015 14:46
    • Als Antwort markiert Hanuta Freitag, 11. September 2015 15:29
    Freitag, 11. September 2015 14:31

Alle Antworten

  • Hi Hanuta,

    Du verwendest eine ForEach-Schleife, für die Du schon den Inhalt der Text-Datei einliest, daher musst Du nicht innerhalb der Schleife den Inhalt nochmal einlesen.

    Ersetz mal das "-ComputerName (Get-Content...)" durch "-ComputerName $ComputerName"...


    Gruß

    Ben

    MCSA Windows 8 (.1) MCSA Windows Server 2012 (R2)

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort! Danke! :-)

    Hinweis: Meine Posts werden "wie besehen" ohne jedwede Gewähr bereitgestellt, da menschliche, technische und andere Fehler nicht ausgeschlossen werden können.


    • Bearbeitet Ben-neB Freitag, 11. September 2015 11:52
    Freitag, 11. September 2015 11:51
  • Hallo,

    was Ben sagt ist richtig, allerdings erscheint mir die Ganze IF-Zeile ein wenig verkorkst, denn FL (Format-List) kennt die darauf folgenden Argumente nicht und mir ist auch nicht klar was FL im IF zu suchen hat, ich denke die Zeile muesste eher so ausehen:

    if (Get-WmiObject -Class "Win32_ComputerSystem" -ComputerName $Computername -Authentication Default -Credential $cred) {

    Wobei dann noch zu klaeren waere was sich genau hinter "Abfragedatei" verbirgt, denn ich interpretiere deinen Code so dass du daraus mit FL Name den Namen der Rechner rausschneiden wolltest, d.h. dort stehen noch andere Dinge drin?

    Beste Gruesse

    brima







    • Bearbeitet brima Freitag, 11. September 2015 12:54
    Freitag, 11. September 2015 12:50
  • Hallo Zusammen,

    bin schon einen riesen schritt weiter :-)

    Hinter der "Abfragedatei" befinden sich die Rechnernamen, die abgefragt werden sollen

    Mein Problem ist jetzt nur, iwie bekomm ich dadurch auch nicht so wirklich raus, ob benutzer angemeldet sind oder nicht :-/

    Ziel der Übung ist es, herauszufinden ob ein User auf der Maschine angemeldet ist.

    VG

    Hanuta


    • Bearbeitet Hanuta Freitag, 11. September 2015 14:23
    Freitag, 11. September 2015 14:22
  • Hallo,

    query session /server:RECHNERNAME

    oder

    (Get-WmiObject -Class Win32_ComputerSystem -ComputerName 'RECHNERNAME').UserName

    Beste Gruesse
    brima



    • Bearbeitet brima Freitag, 11. September 2015 14:46
    • Als Antwort markiert Hanuta Freitag, 11. September 2015 15:29
    Freitag, 11. September 2015 14:31
  • Schau mal hier, da hat sich schon mal einer die Mühe gemacht und ein Skript gebaut:

    https://gallery.technet.microsoft.com/scriptcenter/d46b1f3b-36a4-4a56-951b-e37815a2df0c


    Gruß

    Ben

    MCSA Windows 8 (.1) MCSA Windows Server 2012 (R2)

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort! Danke! :-)

    Hinweis: Meine Posts werden "wie besehen" ohne jedwede Gewähr bereitgestellt, da menschliche, technische und andere Fehler nicht ausgeschlossen werden können.

    Freitag, 11. September 2015 14:32
  • Klappt iwie nicht... :-/ sagt immer Ungültiger Parameter...

    VG

    Freitag, 11. September 2015 14:42
  • Hallo,

    und was genau hast Du eingegeben, das Beispiel mit query oder die WMI Loesung?

    Beste Gruesse
    brima

    Freitag, 11. September 2015 14:52
  • Huhu brima,

    die WMI-Lösung funktioniert, kann ich auch abfragen, ob ein user eingelogged ist und mir nur den Rechnernamen ausgeben lassen ?

    VG

    Freitag, 11. September 2015 14:56
  • Hallo,

    query session /server:RECHNERNAME

    oder

    (Get-WmiObject -Class Win32_ComputerSystem -ComputerName 'RECHNERNAME').UserName

    Beste Gruesse
    brima



    so, die WMI Lösung mit Rechner Schleife hat funktioniert :-)

    Vielen Dank

    VG

    Hanuta

    Freitag, 11. September 2015 15:29
  • Hallo,

    Ich habe´s mal über Win32_LogonSession  und Win32_UserAccount versucht.

    Damit bekommst du eine Menge Informationen zum User selbst und zur Session (Starttime, Interactiv, RemoteInteractive etc.) mit.

    Set-StrictMode -Version "2.0" Clear-Host Function Main{ $Computer = "." Get-LoggedUsers $Computer } Function Get-LoggedUsers{ Param($Computername) $SessionIDs = Get-WmiObject -class "Win32_LogonSession" -namespace "Root\CIMV2" -computer $Computername $SessionIDs | ForEach{ $Query="Associators of {Win32_LogonSession.LogonID=$($_.LogonID)}" $LogonSession = Get-WmiObject -class "Win32_LogonSession" $LogonType = $LogonSession.LogonType $StartTime = $LogonSession.StartTime $StartTime = $LogonSession.ConvertToDateTime($LogonSession.StartTime) $StartTime = $StartTime.ToString("g") #$UserAccount = Get-WmiObject -query $Query -computer $Computername |Where{$_.__class -eq "Win32_UserAccount"} |Select Caption #$UserAccount = Get-WmiObject -query $Query -computer $Computername |Where{$_.__class -eq "Win32_UserAccount"} |Select -ExpandProperty Properties $UserAccount = Get-WmiObject -query $Query -computer $Computername |Where{$_.__class -eq "Win32_UserAccount"} |Select * } Write-Host "LogonType: $LogonType" #see https://msdn.microsoft.com/en-us/library/aa394189%28v=vs.85%29.aspx Write-Host "SessionStart:" $StartTime Return $UserAccount }

    Main

    Gruß
    Kai


    • Bearbeitet Yorck Kai Sonntag, 13. September 2015 09:31
    Sonntag, 13. September 2015 09:30