New-PSDrive im Skript
Moin,
gleich vorweg: Es ist keine Domain vorhanden. Gruppenrichtlinien fallen also weg.
Bisher wird den Usern eine Freigabe per Batch auf einen LW-Buchstaben gemappt. Da auf dem Server nur ein User vorhanden ist, muss in dem Batch Benutzer und Passwort eingetragen werden. Das gefällt mir so gar nicht. Deshalb bin ich auf die Idee gekommen, das per Powershell zu machen, da ich da das Passwort zumindest verschlüsselt in einer Datei hinterlegen kann. Also habe ich folgendes Skript geschrieben:
Das Skript ist etwas länger, aber das sind die entscheidenden Zeilen. $pass ist der Pfad auf die Datei, in der das verschlüsselte Passwort liegt. $drive der LW-Buchstabe (ja, ohne Doppelpunkt), $user ist der Username und $unc der Pfad auf die Freigabe. Wenn ich das Skript ausführe, dann kommt folgende Meldung:
Scheint also alles gut. Aber das LW steht nicht zur Verfügung.
Laufwerk X: ist nicht vorhanden. Geschweige denn, dass ich mit anderen Programmen darauf zugreifen könnte.
Setze ich jetzt die Befehle händisch so ab, wie ich sie im Skript habe, dann funktioniert es.
Es taucht sogar zweimal auf. Einmal mit großem und einmal mit kleinem X. Auch der Zugriff mit anderen Programmen auf die Daten ist möglich.
Dann habe ich am Ende des Skripts mal ein get-psdrive eingefügt. Und siehe da, ich habe drei Laufwerke x.
Aber sobald das Skript beendet wurde, sind alle drei wieder weg. Wie schaffe ich es, dass das Mapping das Ende des Skripts überlebt?
Liebe Grüße
Erik
gleich vorweg: Es ist keine Domain vorhanden. Gruppenrichtlinien fallen also weg.
Bisher wird den Usern eine Freigabe per Batch auf einen LW-Buchstaben gemappt. Da auf dem Server nur ein User vorhanden ist, muss in dem Batch Benutzer und Passwort eingetragen werden. Das gefällt mir so gar nicht. Deshalb bin ich auf die Idee gekommen, das per Powershell zu machen, da ich da das Passwort zumindest verschlüsselt in einer Datei hinterlegen kann. Also habe ich folgendes Skript geschrieben:
$pw = Get-Content $pass | ConvertTo-SecureString -key (1..16)
$cred = New-Object System.Management.Automation.PSCredential($user, $pw)
New-PSDrive -Name $drive -PSProvider FileSystem -Root $unc -Credential $cred -persist
Das Skript ist etwas länger, aber das sind die entscheidenden Zeilen. $pass ist der Pfad auf die Datei, in der das verschlüsselte Passwort liegt. $drive der LW-Buchstabe (ja, ohne Doppelpunkt), $user ist der Username und $unc der Pfad auf die Freigabe. Wenn ich das Skript ausführe, dann kommt folgende Meldung:
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
x 2880,98 472,26 FileSystem \\123.123.123.123\dokumente$
Scheint also alles gut. Aber das LW steht nicht zur Verfügung.
PS E:\skripte> get-psdrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 200,54 23,83 FileSystem C:\
Cert Certificate \
D FileSystem D:\
E 310,50 155,25 FileSystem E:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
Laufwerk X: ist nicht vorhanden. Geschweige denn, dass ich mit anderen Programmen darauf zugreifen könnte.
Setze ich jetzt die Befehle händisch so ab, wie ich sie im Skript habe, dann funktioniert es.
PS E:\skripte> $pass = ".\me.txt"
PS E:\skripte> $pw = Get-Content $pass | ConvertTo-SecureString -key (1..16)
PS E:\skripte> $user = "user"
PS E:\skripte> $cred = New-Object System.Management.Automation.PSCredential($user, $pw)
PS E:\skripte> $unc = "\\123.123.123.123\dokumente$"
PS E:\skripte> $drive = "x"
PS E:\skripte> New-PSDrive -Name $drive -PSProvider FileSystem -Root $unc -Credential $cred -Persist
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
x 2880,98 472,26 FileSystem \\123.123.123.123\dokumente$
PS E:\skripte> Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 200,67 23,70 FileSystem C:\
Cert Certificate \
D FileSystem D:\
E 310,50 155,25 FileSystem E:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
X 2880,98 472,26 FileSystem \\123.123.123.123\dokumente$
x 2880,98 472,26 FileSystem \\123.123.123.123\dokumente$
Es taucht sogar zweimal auf. Einmal mit großem und einmal mit kleinem X. Auch der Zugriff mit anderen Programmen auf die Daten ist möglich.
Dann habe ich am Ende des Skripts mal ein get-psdrive eingefügt. Und siehe da, ich habe drei Laufwerke x.
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
x 2880,98 472,26 FileSystem \\192.168.10.20\dokumente$
Alias Alias
C 200,68 23,69 FileSystem C:\
Cert Certificate \
D FileSystem D:\
E 310,50 155,25 FileSystem E:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
X 2880,98 472,26 FileSystem \\192.168.10.20\dokumente$
x 2880,98 472,26 FileSystem \\192.168.10.20\dokumente$
Aber sobald das Skript beendet wurde, sind alle drei wieder weg. Wie schaffe ich es, dass das Mapping das Ende des Skripts überlebt?
Liebe Grüße
Erik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 395328
Url: https://administrator.de/forum/new-psdrive-im-skript-395328.html
Ausgedruckt am: 28.03.2025 um 10:03 Uhr
2 Kommentare
Neuester Kommentar
Hi,
hast Du es schon einmal mit "-Scope Global" versucht?
E.
Edit:
Schau mal auch hier: New-PSDrive
hast Du es schon einmal mit "-Scope Global" versucht?
New-PSDrive -Name $drive -PSProvider FileSystem -Root $unc -Credential $cred -persist -Scope Global
E.
Edit:
Schau mal auch hier: New-PSDrive
If you are running New-PSDrive inside a script, and you want the drive to persist indefinitely, you must dot-source the script. For best results, to force a new drive to persist indefinitely, add the Scope parameter to your command, and set its value to Global.