none
Auslesen von eingeloggten User SID in Schleife RRS feed

  • Frage

  • hallo zusammen,

    ich häng an folgendem problem:

    ich lese aus einer textdatei die computernamen aus, lasse diese in einer schleife laufen so dass ich von jedem eingeloggten user die sid habe. an sich funktioniert das auch alles, aber ich kann den usernamen nicht mehr in eine sid konvertieren. dann kommt folgende fehlermeldung:

    New-Object : Cannot find an overload for "NTAccount" and the argument count: "1".
    At C:\Documents and Settings\Admin-Marcel.Lipp\Desktop\proxy.ps1:10 char:32
    +     $benutzerwandlung = new-object <<<<  system.security.principal.ntaccount($benutzername);
        + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
        + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

     

    hier der code:

    $datei = get-content "C:\Documents and Settings\Admin-Marcel.Lipp\Desktop\computer.txt";
    
    foreach($objDatei in $datei) {       
    	
    	$benutzername = Get-WmiObject Win32_ComputerSystem -ComputerName $objDatei | Select-Object UserName;	
    
    	$benutzerwandlung = new-object system.security.principal.ntaccount($benutzername);
    	$sid = $benutzerwandlung.Translate([system.security.principal.securityidentifier]).value
    	
    }
    
    schon mal besten dank im voraus!

    Dienstag, 29. November 2011 08:49

Antworten

  • Hallo,

    so sollte es funktionieren!

    $benutzerwandlung = new-object system.security.principal.ntaccount($(Get-WmiObject -Class Win32_ComputerSystem -ComputerName $objDatei).UserName)
    $sid = $benutzerwandlung.Translate([system.security.principal.securityidentifier]).value
    

    oder du änderst in deinem Skript diese Zeile

    $benutzerwandlung = new-object system.security.principal.ntaccount($benutzername.UserName);
    
    


    MfG



    Dienstag, 29. November 2011 09:55

Alle Antworten

  • MOin,

    New-Object : Cannot find an overload for "NTAccount" and the argument count: "1".
    At C:\Documents and Settings\Admin-Marcel.Lipp\Desktop\proxy.ps1:10 char:32
    +     $benutzerwandlung = new-object <<<<  system.security.principal.ntaccount($benutzername);

    hmmm.... Laut MSDN gibt es aber einen solchen Konstruktor:
    http://msdn.microsoft.com/de-de/library/31k4bah1.aspx

    Kann es sein, das an dieser Stelle $benutzername leer ist?


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Dienstag, 29. November 2011 09:21
  • hi,

    nein definitiv nicht. wenn ich einfach $benutzername ausgebe, dann zeigt er mir den auch entsprechend an. ich habe das gefühl dass es mit der methode, wie der wert in die variable gespeichert wird zu tun hat... ich kanns mir aber nicht wirklich erklären.

    wenn ich statt $benutzername eifnach einen einzigen benutzer angebe, funktioniert es auch ohne probleme. aber wenn ich $benutzername ausgebe, zeigt er mir die auch in der richtigen syntax an.

    Dienstag, 29. November 2011 09:34
  • Hallo,

    so sollte es funktionieren!

    $benutzerwandlung = new-object system.security.principal.ntaccount($(Get-WmiObject -Class Win32_ComputerSystem -ComputerName $objDatei).UserName)
    $sid = $benutzerwandlung.Translate([system.security.principal.securityidentifier]).value
    

    oder du änderst in deinem Skript diese Zeile

    $benutzerwandlung = new-object system.security.principal.ntaccount($benutzername.UserName);
    
    


    MfG



    Dienstag, 29. November 2011 09:55
  • @schlieng danke, hat funktioniert.

    kannst du mir auch erklären warum ich das so machen muss?

    Dienstag, 29. November 2011 10:10
  • @schlieng danke, hat funktioniert.

    kannst du mir auch erklären warum ich das so machen muss?

    Schau Dir mal "Get-WmiObject Win32_ComputerSystem -ComputerName $objDate | fl" an.

    Der richtige Wert steht in der Eigenschaft "UserName".

    Ich hatte gehofft, das toString() das selbst konvertiert, ist aber offensichtlich nicht der Fall gewesen.

    Daher muss man, wie von schlieng gezeigt, direkt auf die korrekte Eigenschaft zugreifen:

    $(Get-WmiObject Win32_ComputerSystem -ComputerName $objDate).UserName

    oder
    $benutzer = Get-WmiObject Win32_ComputerSystem -ComputerName $objDate
    $benutzer.Username

    sind in dem Fall das gleiche.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Dienstag, 29. November 2011 10:29
  •  

    System.Security.Principal.NTAccount erwartet sich einen String, den du mit $benutzname.UserName auch zurückbekommst (Domain\Benutzername). In deinem Fall:

    $benutzerwandlung = new-object system.security.principal.ntaccount($benutzername);
    
    

    wo du nur $benutzername verwendet hast, bekommst du ein Object zurück das wie folgt aufgebaut ist:

    UserName
    --------
    Domain\Benutzername

    Mit diesem Object kann System.Security.Principal.NTAccount leider nichts anfangen!

    Dienstag, 29. November 2011 10:34
  • alles klar, besten dank für die super erklärung
    Dienstag, 29. November 2011 11:27