Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Windows XPe RDP save User Credentials

Frage Entwicklung

Mitglied: addamain

addamain (Level 1) - Jetzt verbinden

27.05.2014 um 08:57 Uhr, 2641 Aufrufe, 24 Kommentare

Hallo zusammen,

ich muss auf einem Windows XP embedded Thin Client von HP es irgendwie schaffen, dass direkt nach dem Start eine RDP Session auf einen Server gestartet wird ohne dass der Benutzer seine Anmeldedaten immer eingeben muss.

Nun ist mir aufgefallen, dass Windows XPe keine cmdkey.exe hat und daher die Passwörter nicht hinterlegen kann... Ich habe in ein paar Foren gesehen, dass ich die einfach aus einem Windows Srv 2003 herauskopieren kann und auf dem ThinClient einspielen kann - das werde ich versuchen im Laufe des Tages zu lösen.

Nun meine Frage: Ist es irgendwie möglich über ein Programm (vielleicht C#) eine RDP Session zu öffnen bei der ich die Benutzerdaten entweder als Variable deklariert habe oder diese aus einer Text Datei herausgelesen werden? Das Programm sollte natürlich nicht mit cmdkey.exe funktionieren - davon habe ich schon ziemlich viele im Internet gefunden.

Könnt ihr mir bitte helfen?


Viele Grüße ;)
Mitglied: colinardo
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
Hallo addamain,
also du könntest das Passwort mit einem Powershell-Script deinem Tresor hinzufügen:
01.
function Add-Credentials { 
02.
param( 
03.
    [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$Server, 
04.
    [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$Username, 
05.
    [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$Password 
06.
07.
 
08.
$code = @" 
09.
[DllImport("Advapi32.dll", SetLastError=true, EntryPoint="CredWriteW", CharSet=CharSet.Unicode)] 
10.
public static extern bool CredWrite([In] ref Credential userCredential, [In] UInt32 flags); 
11.
 
12.
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] 
13.
public struct Credential 
14.
15.
   public UInt32 flags; 
16.
   public UInt32 type; 
17.
   public IntPtr targetName; 
18.
   public IntPtr comment; 
19.
   public System.Runtime.InteropServices.ComTypes.FILETIME lastWritten; 
20.
   public UInt32 credentialBlobSize; 
21.
   public IntPtr credentialBlob; 
22.
   public UInt32 persist; 
23.
   public UInt32 attributeCount; 
24.
   public IntPtr Attributes; 
25.
   public IntPtr targetAlias; 
26.
   public IntPtr userName; 
27.
28.
 
29.
"@ 
30.
    Add-Type -MemberDefinition $code -Namespace "ADVAPI32" -Name 'Util' 
31.
    $cred = New-Object ADVAPI32.Util+Credential 
32.
    $cred.flags = 0 
33.
    $cred.type = 2 
34.
    $cred.targetName = [System.Runtime.InteropServices.Marshal]::StringToCoTaskMemUni($Server) 
35.
    $cred.userName = [System.Runtime.InteropServices.Marshal]::StringToCoTaskMemUni($username) 
36.
    $cred.attributeCount = 0 
37.
    #Erhalten der Credentials: 1 = Session / 2 = Local Machine / 3 = Enterprise 
38.
    $cred.persist = 3 
39.
    $cred.credentialBlobSize = [System.Text.Encoding]::Unicode.GetBytes($Password).length 
40.
    $cred.credentialBlob = [System.Runtime.InteropServices.Marshal]::StringToCoTaskMemUni($Password) 
41.
    $result = [ADVAPI32.Util]::CredWrite([ref]$cred,0) 
42.
    return $result 
43.
44.
 
45.
Add-Credentials -Server 'Testserver' -Username 'DOMAIN\user123' -Password 'Passw0rd'
In der letzten Zeile werden deine entsprechenden Credentials und der Servername an die Funktion übergeben.
Falls auf dem System noch kein Managment-Framework vorhanden ist, kannst du dies nachrüsten.

Auf dem XP-System kannst du die hinzugefügten Credentials ja mit control keymgr.dll überprüfen.

Wenn gewünscht lässt sich das ganze auch als Konsolen-Anwendung kompilieren wenn man das möchte.
Den entsprechenden Code dafür findest du hier: http://stackoverflow.com/questions/19410186/c-sharp-using-credwrite-to- ...

Grüße Uwe
Bitte warten ..
Mitglied: addamain
27.05.2014 um 11:04 Uhr
Hat Windows XP embedded eine Powershell vorinstalliert oder muss die auch noch nachinstalliert werden?
Bitte warten ..
Mitglied: colinardo
27.05.2014 um 11:05 Uhr
Das musst du nachrüsten mit dem Management Framework, den Link hatte ich oben gepostet:
http://support.microsoft.com/kb/968929/de

Grüße Uwe
Bitte warten ..
Mitglied: addamain
27.05.2014 um 11:07 Uhr
Super vielen Dank. Ich werde das nach der Mittagspause mal testen und gebe dir dann Bescheid ;)
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
Ich habe dir gerade mal schnell eine Konsolen-EXE kompiliert die das selbe macht > Download hier.

Sie wird so auf der Konsole verwendet:
AddDomainCredentials.exe "SERVERNAME" "DOMAIN\USERNAME" "PASSWORD"
Sie benötigt NET-Framework 2.0

Grüße Uwe
Bitte warten ..
Mitglied: addamain
27.05.2014 um 12:28 Uhr
Ich muss dich noch einmal kurz was Fragen^^ Und zwar was genau muss ich an deinem geposteten Script anpassen?

In der letzten Zeile muss ich "Testserver", "DOMAIN\user123" und "Passw0rd" anpassen - wie sieht es mit den Zeilen 3-5 aus ("$Server", "$Username" und "$Password")?

Danke für deine Hilfe.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
Zitat von addamain:

Ich muss dich noch einmal kurz was Fragen^^ Und zwar was genau muss ich an deinem geposteten Script anpassen?
nur die letzte Zeile ! Oben das sind nur die Parameter-Variablen die du mit der letzten Zeile an die Funktion übergibst.
Bitte warten ..
Mitglied: colinardo
27.05.2014, aktualisiert um 12:39 Uhr
Nur noch zur Info. Im Moment ist die Dauerhaftigkeit der Credentials auf "LOCAL MACHINE" festgelegt. Wenn "ENTERPRISE" benötigt wird (musst du testen was du brauchst) muss die Zeile 38 so abgeändert werden (habe das oben abgeändert)
$cred.persist = 3
Grüße Uwe
Bitte warten ..
Mitglied: addamain
27.05.2014 um 12:53 Uhr
Ok, das schaue ich mir an. Ich teste das gerade auf meinem Windows 8.1 System weil der Thin Client mit Windows XPe die ganze Zeit wieder ausgeht (defekt). Ich schaue mal ob ich einen anderen organisiert bekomme.

Auf meinem System Speichert er den Anmeldenamen aber das PW nicht - ist das bei Windows XPe dann anderst?
Bitte warten ..
Mitglied: colinardo
27.05.2014, aktualisiert um 13:01 Uhr
Habe das Script auf Windows 7 x64 und XP getestet Passwort wird erfolgreich gespeichert... Windows 8.1 steht noch aus (-edit- gerade getestet geht einwandfrei)...
Auf meinem System Speichert er den Anmeldenamen aber das PW nicht
woraus folgerst du das das Passwort nicht gespeichert wurde ?

WICHTIG! Wenn du Sonderzeichen wie $ etc. in deinem Passwort hast musst du das Passwort mit einfachen Anführungszeichen umschließen
Bitte warten ..
Mitglied: addamain
27.05.2014 um 13:02 Uhr
Wenn ich das .ps1 Skript ausführe kommt als Rückgabewert "True". Wenn ich dann eine RDP auf den Server starte, zeigt er mir den richtigen Benutzernamen an, nach kurzem geht aber ein Fenster auf in dem er wieder nach den Benutzerdaten fragt.

Domäne, Benutzername, Server IP und Passwort habe ich überprüft und die Daten passen. Hast du noch eine Idee? Habe es gerade auch noch auf meinem virtuellen Windows 7 Client getestet, da habe ich genau das gleiche Problem...
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
hast du mal wie oben geschrieben die Persistence auf "Unternehmen" gesetzt ? :
$cred.persist = 3
Kann das mit dem Auto-Connect gerade nicht testen, werde ich später mal machen ...
hast du Sonderzeichen wie $ in deinem Passwort? dann siehe vorheriger Kommentar..
Bitte warten ..
Mitglied: addamain
27.05.2014, aktualisiert um 13:20 Uhr
Nein, habe das Passwort zum testen auf Start123 gesetzt. Ich habe gerade von einem Kollegen ein anderes Script bekommen, was an sich gar nicht schlecht aussieht. Es öffnet direkt eine RDP Session mit den im Script hinterlegten Benutzer- und Serverdaten.

Mal eine andere Frage, die eigentlich nicht zum Thema gehört: Wie kann ich aus der .ps1 Datei eine .exe Datei machen?

Hier mal nach das Script von meinem Kollegen:

01.
$servername = "IPoderServername" 
02.
$username = "domäne\administrator" 
03.
$passwort = "Start123" 
04.
 
05.
Function Open-RDPSession($Server,$User,$Password) 
06.
07.
    Write-Host "- saving RDP credential" -ForegroundColor green 
08.
    cmdkey /generic:$server /user:$user /pass:$Password 
09.
    write-Host "- opening RDP" -ForegroundColor green 
10.
    mstsc /v:$Server /W:800 /h:600 
11.
12.
 
13.
Open-RDPSession $servername $username $passwort 
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
ja aber das nutzt ja wieder deine cmdkey.exe die du ja nicht nutzen wolltest...

Mal eine andere Frage, die eigentlich nicht zum Thema gehört: Wie kann ich aus der .ps1 Datei eine .exe Datei machen?
man kann wenn man den Code in C# umschreibt und dann mit Add-Type das Assembly kompiliert. Ich bau dir später mal was dazu ...

Zu deinem anderen Problem, es könnte sein das du Generische Anmeldeinformationen benötigst anstatt Windows Credentials, das musst du evaluieren. Dann muss
diese Zeile
$cred.type = 2 
so abgeändert werden:
$cred.type = 1
Bitte warten ..
Mitglied: addamain
27.05.2014 um 13:32 Uhr
Top, die letzten 3 Zeilen waren es^^ Jetzt funktioniert das. Jetzt schaue ich mal dass ich den Thin Client einfach mal wieder zum laufen bekomme und werde das ganze dann nochmal testen wenn ich PS installiert habe.

Vielen Dank
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.05.2014, aktualisiert 28.05.2014
Na also .

So ich habe gerade mal eine EXE mit C# geschrieben die das Erstellen der Credentials und den Auto-Login in einer Konsolen-Anwendung zusammenfasst. Du kannst sie hier herunterladen:
Ich habe mal zwei Versionen erstellt, die eine zur Nutzung mit .NET 2.0 und die andere für .NET 4.0 (da Windows 8 standardmäßig das .NET 2.0 nicht installiert hat)

Die Credentials werden jeweils immer nur für die Session angelegt und sind bei Abmeldung vom Client-Rechner wieder weg.

Die Benutzung erfolgt folgendermaßen
rdpautologin.exe "SERVER" "DOMAIN\User" "PASSWORD" GENERIC "OPTIONALE RDP-PARAMETER"
Anstatt GENERIC kann auch WINDOWS verwendet werden , wenn das gewünscht ist. Zusätzlich können optionale RDP-Parameter für den Aufruf mitgegeben werden. Der Parameter /v:SERVER ist aber schon fest im Programm mit eingebaut, dieser darf also nicht angegeben werden.
Hier noch mal ein Beispielaufruf:
rdpautologin.exe "ts-01" "DOMAIN\mmuster" "Passw0rd" GENERIC "/W:800 /H:600"
Habs hier mal mit Windows 8.1 erfolgreich getestet. Ist natürlich noch BETA aber wenn's das macht was du willst, freu dich

Viel Spaß.
Grüße Uwe
Bitte warten ..
Mitglied: addamain
28.05.2014 um 13:36 Uhr
Hey ;)

Ich habe das Powershell Skript mal noch ein bisschen angepasst und er öffnet mir jetzt direkt auch noch die RDP Session nach der Ausführung. Jetzt wollte ich das ganze auf dem Windows XPe Thin Client testen und muss erst noch PS installieren. Ich habe von dieser Seite: http://support.microsoft.com/kb/968929/de diese Datei heruntergeladen: "Downloaden Sie Windows Management Framework Core für Windows XP und Windows Embedded-Paket jetzt." Da wird man auf KB968930 weitergeleitet. Ich habe die .exe Heruntergeladen und auf unser NAS abgelegt. Nun habe ich das Setup auf dem Thin Client gestartet und dann kommt die Meldung, dass die Sprache des OS nicht mit der des Updates übereinstimmt...

Hast du da eine Idee? Es gibt bei diesen HP Thin Clients anscheinend so nen Schreibschutz den man entsperren kann - könnte das da dran liegen?
Bitte warten ..
Mitglied: colinardo
28.05.2014, aktualisiert um 13:54 Uhr
Zitat von addamain:
Meldung, dass die Sprache des OS nicht mit der des Updates übereinstimmt...
du musst natürlich hier http://www.microsoft.com/en-us/download/details.aspx?id=16818 die native Sprache deines XP Embedded auswählen !!
Bitte warten ..
Mitglied: addamain
28.05.2014 um 13:44 Uhr
Ok habe bei der Sprachauswahl englisch ausgewählt und der hat wieder die Deutsche Datei heruntergeladen gehabt.. Mit deinem Link aber hat es geklappt - vielen Dank

Nun habe ich aber gleich auch schon das nächste Problem: Er will bzw. braucht SP3 - kann ich das Problemlos über Windows Updates installieren?
Bitte warten ..
Mitglied: colinardo
28.05.2014, aktualisiert um 13:51 Uhr
Ok habe bei der Sprachauswahl englisch ausgewählt und der hat wieder die Deutsche Datei heruntergeladen gehabt
Wenn du nicht lange genug wartest nachdem du die Auswahl geändert hast, passiert das beschriebene.

Nun habe ich aber gleich auch schon das nächste Problem: Er will bzw. braucht SP3 - kann ich das Problemlos über Windows Updates installieren?
Steht hier alles wie du vorgehen musst:
http://support.microsoft.com/kb/958255/de

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
28.05.2014, aktualisiert um 13:56 Uhr
p.s. warum testest du nicht mal meine EXEs von oben ? Ich kann dir auch gerne den Quellcode schicken, wenn du mir nicht vertraust ...
Bitte warten ..
Mitglied: addamain
28.05.2014 um 14:01 Uhr
Ums Vertrauen gehts da ned ;) Das ist schon da Das Problem ist nur dass ich mir die PowerShell zum Beispiel in den Autostart legen kann und dann wird automatisch die RDP Session aufgebaut Das wäre super wenn das funktioniert ;)
Bitte warten ..
Mitglied: colinardo
28.05.2014, aktualisiert um 14:08 Uhr
Das Problem ist nur dass ich mir die PowerShell zum Beispiel in den Autostart legen kann und dann wird automatisch die RDP Session aufgebaut
öhm, wo ist das Problem? das kannst du mit der exe auch ... einfach eine Verknüpfung mit den entsprechenden Parametern anlegen in den Autostart packen,
oder die Zeile in den einschlägigen Autostart-Registry-Einträgen hinterlegen,
oder in den Taskplaner packen

feddich !

Denke das Thema sollte jetzt gelöst sein. Den Beitrag dann bitte noch auf gelöst setzen, und die Lösungskommentare markieren. Merci.
Bitte warten ..
Mitglied: addamain
28.05.2014 um 15:20 Uhr
Gut Alles klar, dann bastel ich mal ;) Vielen Dank für deine 1. klassige Unterstützung ;)
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows 7
Windows 7 RDP-Port wird nicht abgehört (8)

Frage von cramtroni zum Thema Windows 7 ...

Windows 7
gelöst Windows 7 Login Default User auswählen (2)

Frage von Fenris14 zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...