erikro
Goto Top

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:

$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

Content-Key: 395328

Url: https://administrator.de/contentid/395328

Printed on: April 19, 2024 at 04:04 o'clock

Member: emeriks
Solution emeriks Dec 11, 2018 updated at 12:53:15 (UTC)
Goto Top
Hi,
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.
Member: erikro
erikro Dec 11, 2018 at 13:03:51 (UTC)
Goto Top
Moin,

Zitat von @emeriks:
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.

Das habe ich überlesen. Danke!

Liebe Grüße

Erik