PowerShell Laufwerke per PS-Skript mit User+Password einbinden

Anons

Ensign
Registriert
Aug. 2018
Beiträge
158
Hallo zusammen,

es sollen mehrere Netzlaufwerke per PS-Skript lokal auf einem Notebook sichtbar im Windows Explorer eingebunden werden, alle Laufwerke mit gleichem User + Password, jedoch abweichend vom am Client angemeldeten Benutzer. Der Benutzername kann im Skript hinterlegt werden, dass Passwort soll jedoch bei jedem Ausführen des Skripts abgefragt und als Variable dann für alle Laufwerke übernommen werden, sodass der User das PW nur 1x eingeben muss. Die Laufwerke sollen nicht dauerhaft eingebunden werden, das Skript soll nach jeder Notebook-Anmeldung ausgeführt werden müssen.

Bei folgender Variante erhalte ich den Fehler, das angegebene Netzwerkkennwort sei falsch bzw. das angesprochene Konto sei momentan gesperrt, was nach Skript-Ausführung auch eintritt.
PowerShell:
# Eingebundene Laufwerke entfernen
Remove-SmbMapping -LocalPath '*' -Force

# Passwort abfragen
$pwd_secure_string = Read-Host "Eingabe Passwort" -AsSecureString

# Laufwerke einbinden
New-SmbMapping -LocalPath 'E:' -Remotepath '\\pfad' -UserName domain\user -Password $pwd_secure_string -persistent $false
New-SmbMapping -LocalPath 'F:' -Remotepath '\\pfad' -UserName domain\user -Password $pwd_secure_string -persistent $false

Jetzt versuche ich es mit nachfolgender Variante, schaffe es aber nicht, den User zu hinterlegen und das PW abzufragen sowie als Variable für alle Laufwerke zu hinterlegen. Welche Parameter muss ich wie einbauen?
PowerShell:
New-PSDrive -Name E -PSProvider filesystem -Root '\\pfad'

Über Lösungsvorschläge würde ich mich sehr freuen, danke vorab.
 
PowerShell:
# Eingebundene Laufwerke entfernen
Get-PSDrive -PSProvider FileSystem | Where-Object {$_.DisplayRoot -like "\\pfad\*"} | Remove-PSDrive

# Passwort abfragen
$pwd_secure_string = Read-Host "Eingabe Passwort" -AsSecureString

# Benutzername eingeben
$username = "domain\user"

# Laufwerke einbinden
New-PSDrive -Name E -PSProvider FileSystem -Root "\\pfad" -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pwd_secure_string) | Out-Null
New-PSDrive -Name F -PSProvider FileSystem -Root "\\pfad" -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pwd_secure_string) | Out-Null

Wäre jetzt mein First-try...
 
Danke für eure schnellen Antworten!

@Mr. Smith Deine Variante scheint zu funktionieren, jedoch werden die Laufwerke nicht im Windows Explorer angezeigt, nur mit net use bzw. Get-PSDrive. Hast du hier noch eine Idee?
 
Das Powershell vielleicht im falschen Userscope ausgeführt?`(z.B. als Admin, dann sind die Laufwerke nur für seine Session da, aber nicht für die des tatsächlich angemeldeten Users).
 
@Mojo1987 Bin als Nicht-Admin angemeldet und führe das Skript auch mit diesem User aus. Wenn mich testweise als Admin anmelde und es ausführe, gleiches Ergebnis. net use ohne cmd als Admin zeigt die Laufwerke an, mit Admin: keine Einträge
 
Versuch mal noch -Scope Global zu ergänzen, vielleicht ändert das was.
Warum handhabt ihr das eigentlich so? Mapped die Laufwerke doch einfach passend zum Benutzer wie vorgesehen.
 
Anons schrieb:
@Mr. Smith Deine Variante scheint zu funktionieren, jedoch werden die Laufwerke nicht im Windows Explorer angezeigt, nur mit net use bzw. Get-PSDrive. Hast du hier noch eine Idee?
Ich denke ich weiß woran das liegt. Zeitlich grad schwierig, aber ich kann es am Abend noch schnell fertig machen.
 
Zuletzt bearbeitet:
@Anons
Das Problem dürfte doch das "New-PSDrive"-Cmdlet sein.
Die hier erstellten Laufwerke sind wohl als "unvernetzt" markiert und daher im Explorer nicht sichtbar.

Man sollte hier wohl doch eher auf das "New-SmbMapping"-Cmdlet zurückgreifen.

PowerShell:
# Eingebundene Laufwerke entfernen
Remove-SmbMapping -LocalPath '*' -Force

# Passwort abfragen
$pwd_secure_string = Read-Host "Eingabe Passwort" -AsSecureString

# Benutzername eingeben
$username = "domain\user"

# Laufwerke einbinden
New-SmbMapping -LocalPath 'E:' -Remotepath '\\pfad' -UserName $username -Password $pwd_secure_string -Persistent $false
New-SmbMapping -LocalPath 'F:' -Remotepath '\\pfad' -UserName $username -Password $pwd_secure_string -Persistent $false

Ich habe das Skript selbst nicht getestet, aber so sollte es eigtl. funktionieren.
Ist eigtl. eh dein ursprüngliches Skript; bis auf:

PowerShell:
$username = "domain\user"
 
Zuletzt bearbeitet:
wenn du alles durchhast und es immer noch nicht geht (passwort falsch, oder nicht im explorer eingebunden), dann probier mal den hier:

PowerShell:
$Credential = Get-Credential -credential domaene\benutzer
New-SmbMapping -LocalPath E: -RemotePath \\server\ordner -UserName $Credential.UserName -Password $Credential.GetNetworkCredential().Password
New-SmbMapping -LocalPath F: -RemotePath \\server\ordner -UserName $Credential.UserName -Password $Credential.GetNetworkCredential().Password
stop-process -name explorer -force
 
  • Gefällt mir
Reaktionen: Anons
Meine Erfahrung mit New-PSDrive und anzeigen im windows Explorer ist die, dass man diesen -persist schalter setzen muss. Damit hat's bei mir dann immer geklappt.
 
Danke für eure hilfreichen Antworten! Hier meine Rückmeldung:

@Mojo1987 -Scope Global führt zu "Out-Null : Es wurde kein Parameter gefunden, der dem Parameternamen "Scope" entspricht."

@Mr. Smith Führt weiterhin zu "New-SmbMapping : Das angegebene Netzwerkkennwort ist falsch." und dann "New-SmbMapping : Das angesprochene Konto ist momentan gesperrt und kann nicht für die Anmeldung verwendet werden."

@Art Vandelay Bei mir führte das bisher nicht zum Erfolg.

@Redundanz Das hat funktioniert!

Nach einem Neustart sind die Laufwerke jedoch noch eingebunden und erfordern beim Öffnen die Eingabe des Passwortes, für jedes Laufwerk einzeln. Die erneute Skript-Ausführung umgeht das zwar, kannst du mir aber sagen, wie ich einbauen kann, dass sie nicht dauerhaft eingebunden werden?
 
  • Gefällt mir
Reaktionen: Redundanz
probier mal "-Persistent 0" anzuhängen, es scheint mir als wäre der default hier 1...
 
  • Gefällt mir
Reaktionen: Anons
Klappt auch, vielen Dank!
 
  • Gefällt mir
Reaktionen: Redundanz
Habe es nun noch als Verknüpfung
Code:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -File "[Dateipfad]\[Skriptname].ps1"
hinterlegt, damit es per Doppelklick ausgeführt werden kann.
 
Zuletzt bearbeitet:
Zurück
Oben