Hintergrund: Angenommen, ich verwende das folgende Powershell-Skript meines lokalen Computers, um einige Netzlaufwerke automatisch zuzuordnen.
$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("p:", "\\papabox\files");
$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("q:", "\\quebecbox\files");
## problem -- this one does not work because my username/password
## is different on romeobox
$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("r:", "\\romeobox\files");
Frage: Wie ändere ich das Skript so, dass ich auch eine Verbindung zu Romobox herstellen kann, obwohl mein Benutzername/Passwort für Romobox sich von den beiden anderen Boxen unterscheidet?
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\\romeobox\files", $false, "domain\user", "password")
Sollte den Trick tun,
Freundlichkeit,
Dan
Wenn Sie eine Möglichkeit zum Speichern des Kennworts benötigen, ohne es in Klartext in Ihr Skript oder eine Datendatei einzufügen, können Sie das Kennwort mithilfe der DPAPI schützen, sodass Sie es sicher in einer Datei speichern und später als Nur-Text abrufen können, z.
# Stick password into DPAPI storage once - accessible only by current user
Add-Type -Assembly System.Security
$passwordBytes = [System.Text.Encoding]::Unicode.GetBytes("Open Sesame")
$entropy = [byte[]](1,2,3,4,5)
$encrytpedData = [System.Security.Cryptography.ProtectedData]::Protect( `
$passwordBytes, $entropy, 'CurrentUser')
$encrytpedData | Set-Content -enc byte .\password.bin
# Retrieve and decrypted password
$encrytpedData = Get-Content -enc byte .\password.bin
$unencrytpedData = [System.Security.Cryptography.ProtectedData]::Unprotect( `
$encrytpedData, $entropy, 'CurrentUser')
$password = [System.Text.Encoding]::Unicode.GetString($unencrytpedData)
$password
Kam hier her, um zu suchen, wie man Laufwerke mithilfe von PowerShell zuordnen kann?
Mit PowerShell3.0 gibt es einen einfacheren Weg. New-PSDrive
wurde mit der Option -persist
aktualisiert. Z.B.
New-PSDrive -Name U -PSProvider FileSystem -Root \\yourserver\your\folder -Credential yourdomain\username -Persist
In der Vergangenheit hatte New-PSDrive
nur die aktuelle PowerShell-Sitzung betroffen. -persist
bewirkt, dass das Mapping sozusagen beim O/S registriert wird. Siehe New-PSDrive
Um die ursprüngliche Frage zu beantworten, können Sie die verwendeten Anmeldeinformationen variieren. Wenn Sie -Credential
verwenden, um den Domänennamen\Benutzername zu ändern, fordert Windows zur Eingabe eines Kennworts auf. Eine andere Alternative besteht darin, ein PSCredential-Objekt wie im folgenden Beispiel zu übergeben. Weitere Informationen finden Sie unter Get-Credential .
PS C:\> $User = "mydomain\username"
PS C:\> $PWord = ConvertTo-SecureString -String "mypassword" -AsPlainText -Force
PS C:\> $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
PS C:\> New-PSDrive -Name U -PSProvider FileSystem -Root \\domain\some\folder -Credential $Credential -Persist
Ich fand diesen einfachen Liner funktionierte in meinem Fall (wenig "out of the box" Denken);))
(Start-Process -FilePath "C:\windows\system32\NET.exe" -ArgumentList "USE I:\Server\Volume/USER: XXXXX Kennwort / persistent: yes" -Wait -Passthru) .ExitCode
Und als zusätzlichen Bonus erhalten Sie einen Nice-Exitcode, von dem Sie berichten können. Hoffentlich hilft das.
$User = "user"
$PWord = ConvertTo-SecureString -String "password" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
$net = $(New-Object -ComObject WScript.Network)
$net.MapNetworkDrive("r:", "\\server\share")
Auf meiner Workstation
$net.MapNetworkDrive("k", "\\romeobox\files", $false, "domain\username", "password")
schickte mir einen Fehler:
Ausnahmelöcher von «MapNetworkDrive» avec «5» Argument (e): «Nom de périph érique local déjà utilisé.
Kurioserweise kam es nicht aus der Tatsache, dass K: bereits verwendet wurde, sondern "::" fehlt. Folgendes funktioniert auf meiner Workstation:
$net.MapNetworkDrive::("k", "\\romeobox\files", $false, "domain\username", "password")