PowerShell: User anlegen und Prozess mit diesem starten

NET USER michael "michael" /ADD
#net localgroup administrators michael /add

$username = 'michael'
$password = 'michael'

$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process Notepad.exe -Credential $credential

Ergebnis:

Windows PowerShell für die Steuerung anderer Computer nutzen

Powershell Remoting einrichten

  • PowerShell als Admin starten
  • Enable-PSRemoting -Force ausführen
    • Bei meinem Laptop kam als Fehlermeldung: Set-WSManQuickConfig : Die WinRM-Firewallausnahme funktioniert nicht, da einer der Netzwerkverbindungstypen auf diesem Computer auf „Öffentlich“ festgelegt ist. Ändern Sie den Netzwerkverbindungstyp entweder in „Domäne“ oder in „Privat“, und wiederholen Sie den Vorgang. -> Lösung: also habe ich meine LAN-Verbindung, die auf Öffentliches Netzwerk gestellt war, deaktiviert. Danach führte der Befehl erfolgreich aus.
  • anschließend habe ich die Verbindung getestet: Test-WsMan <REMOTE COMPUTERNAME>
    • und bekam folgende Fehlermeldung: Test-WSMan : Der Client kann keine Verbindung mit dem in der Anforderung angegebenen Ziel herstellen. Stellen Sie sicher, dass der Dienst auf dem Ziel ausgeführt wird und die Anforderungen akzeptiert. Lesen Sie die Protokolle und die Dokumentation für den WS-Verwaltungsdienst, der auf dem Ziel ausgeführt wird. Hierbei handelt es sich meistens um IIS oder WinRM. Wenn das Ziel der WinRM-Dienst ist, führen Sie den folgenden Befehl auf dem Ziel aus, um den WinRM-Dienst zu analysieren und zu konfigurieren: „winrm quickconfig“. -> Lösung: auf dem Zielrechner habe ich dann winrm quickconfig durchgeführt und im weiteren Dialog dann winrm aktiviert.
  • anschließend habe ich die Verbindung noch einmal getestet: Test-WsMan <REMOTE COMPUTERNAME> – dieses Mal war’s erfolgreich:

Verschiedene Dinge auf dem remote-Rechner tun

 

#fill you credential in the pop-up window once
$myCredential = get-credential

# Gibt den Ordnerinhalt von C:\Temp zurück

Invoke-Command -ComputerName <COMPUTERNAME> -ScriptBlock { Get-ChildItem C:\Temp } -credential $myCredential

# Startet einen calc-Prozess, der lediglich im Task Manager zu sehen ist (ein sichtbarer Taschenrechner wird nicht gestartet). Eine Taschenrechner-UI wird, wie zu erwarten, nicht gestartet, weil der remote powershell eine UI-session fehlt.
# Aus irgendeinem Grunde startet der Prozess nicht, wenn kein -Wait angegeben ist.

Invoke-Command -ComputerName <COMPUTERNAME> -ScriptBlock { Start-Process calc -Wait} -credential $myCredential

# Erzeugt ein leeres Text-File

Invoke-Command -ComputerName <COMPUTERNAME> -ScriptBlock { New-Item c:\temp\AnEmptyFile.txt -ItemType file -Wait} -credential $myCredential

# Zeigt, in welcher Session man sich gerade befindet

Write-Host "This PowerShell command is running under the current users context: $env:userdomain\$env:username" -f magenta

Invoke-Command -ComputerName -ScriptBlock { Write-Host "Hello, this script block is running under the security context of the inner account: $env:userdomain\$env:username" -f Green; } -credential $myCredential

Write-Host "And now we return to the current users context: $env:userdomain\$env:username" -f magenta

# Ungelöst: den Ordnerinhalt eines Netzwerkordners zurückgeben

Wenn ich den Befehl

Get-ChildItem „\\<NAME OF COMPUTER WHICH HOSTS THE NETWORK SHARE>\ourNetworkShare“

auf dem Remote-Computer in einer Powershell (die ich nicht als admin gestartet habe) ausführe, bekomme ich ein korrektes Ergebnis. Führe ich jedoch auf einem anderen Computer Folgendes aus:

Invoke-Command -ComputerName <REMOTE COMPUTERNAME> -ScriptBlock { Get-ChildItem ‚\\<NAME OF COMPUTER WHICH HOSTS THE NETWORK SHARE>\ourNetworkShare‘ } -credential $myCredential

… scheiterte bei mir jedoch immer mit

Cannot find path ‚\\<NAME OF COMPUTER WHICH HOSTS THE NETWORK SHARE>\ourNetworkShare‘ because it does not exist. + CategoryInfo: ObjectNotFound: (\\<NAME OF COMPUTER WHICH HOSTS THE NETWORK SHARE>….ourNetworkShare:String) [Get-ChildItem], ItemNotFound Exception + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Also habe ich diese Frage an Stackoberflow gestellt: Zur Frage

visionapp: Strg + Alt + Entf funktioniert nicht

Ich habe visionapp Remote Desktop 2011 auf meinem Laptop installiert. Damit möchte ich mich per VNC auf eine VM Windows 7 Professional verbinden. Nach dem Neustart kommt der blaue Begrüßungs-Bildschirm mit der Aufforderung Drücke Strg + Alt + Entf. Wenn ich dem auf meiner Tastatur nachkomme, dann geht der Befehl natürlich an meinen Laptop selbst und kommt bei der VM nicht an. In der Tool-Leiste von visionapp findet sich ein Dropdown-Box VNC. Die dortige Funktion Strg + Alt + Entf senden tut nicht, was sie sollte.

 

Lösung

Vermutlich ist das ein Bug einer alten Version von visionapp und ist bei den neueren schon längst ausgebaut.

Remote Desktop Verbindung

Unter Windows kann man sich mittels Remotedesktopverbindung grundsätzlich in einem anderen Computer einloggen. Hierzu gibt man in der Windows-Suche mstsc (Microsoft Terminal Service Client) an, woraufhin sich der Client öffnet, der auf deutsch Remotedesktopverbindung heißt. Er ist schon mit Daten vorbelegt, die er sich aus der (versteckten) Default.rdp holt, die im Dokumente-Ordner liegt. Diese kann mit einem Texteditor bearbeitet werden. Dort kann man beliebig viele weitere .rdp Dateien anlegen und mit dem Client dann öffnen. Oder ins Windows Suchfeld rdp eingeben und dort auswählen. Auch kann man diese Dateien dann geordnet auf einem Netzwerkordner ablegen und den Kollegen zum Starten der Remote-Sitzungen zur Verfügung stellen. Dort kann man die Remote-Verbindungen zentral editieren und per Namenskonvention oder Ordnerstruktur ein Ownership etablieren.

Man kann die Sitzung auf ein bestimmtes Programm beschränken.

Auch kann man das Passwort mitspeichern.

 

Aufbau .rdp Datei

folgt dem Schema:
Option:Typ:Wert

Vermutlich gibt’s nur zwei Typen: i und s, wobei diese vermutlich integer und string bedeuten und eigentlich eine überflüssige Eingabe darstellen.

Beispiel:


username:s:michael
username:s:mydomain/michael
full address:s:10.103.24.100
full address:s:meincomputer.meinedomain.de

Übersicht über die Optionen

 

Adminclient von Microsoft: Remote Desktop Connection Manager

Wer parallele Remote Sitzungen benötigt (z.B. Admins), kann sich mal den Remote Desktop Connection Manager anschauen. Dieser ist hier frei downloadbar und auch im licence agreement, welches im Installationwizard erscheint, sehe ich keinen Hinweis auf für mich relevante Nutzungseinschränkungen: „You may install and use any number of copies of the software on your devices. The software is licensed, not sold. (…) „ .rdp files kann man leider nicht direkt
importieren, sondern muss hierfür die Power Shell bemühen.

 

Adminclient von visionapp: vRD2011

Im Vergleich zum Admin-Client von Microsoft kann vRD2011 mehr. Es bietet eine hierarchische Struktur von Ordnern und Anmeldeeinstellungen können vererbt werden. Außerdem können auch VNC-Verbindungen darin administriert werden

 

Weiterführende Quellen

Doku zu mstsc.exe
wiki zu Remote Desktop Services im Allgemeinen und Remote desktop Connection im Speziellen.

 

Spezialwissen

Sobald man eine RDP-Verbindung zu einem Computer trennt, kann dies einen UI-Test der MS-Testinfrastruktur blockieren (die Screenshots sind dann z.B. schwarz).
Ziemlich guter Vergleich zwischen VNC und RDP. Vorteile im Detail. visionApp ist als Freeware erhältlich, dann jedoch ohne multi-user-Funktionalität und auf drei gleichzeitige Sitzungen beschränkt (siehe Funktionsumfang der verschiedenen vRD-Versionen).