Powershell: comment cartographier un lecteur réseau avec un nom d'utilisateur/mot de passe différent

Contexte: supposons que j'utilise le script powershell suivant de ma machine locale pour cartographier automatiquement certains lecteurs réseau.

$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("p:", "papaboxfiles");

$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("q:", "quebecboxfiles");

## problem -- this one does not work because my username/password
## is different on romeobox
$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("r:", "romeoboxfiles");

Question: comment modifier le script pour que je puisse me connecter à romeobox, même si mon nom d'utilisateur/mot de passe sur romeobox est différent de celui des deux autres boîtes?

18
demandé sur dreftymac 2009-10-07 14:23:19

7 réponses

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\romeobox\files", $false, "domain\user", "password")

Devrait faire l'affaire,

Gentillesse,

Dan

33
répondu Daniel Elliott 2011-02-07 01:03:24

si vous avez besoin d'un moyen de stocker le mot de passe sans le mettre en texte clair dans votre script ou un fichier de données, vous pouvez utiliser le DPAPI pour protéger le mot de passe de sorte que vous pouvez le stocker en toute sécurité dans un fichier et le récupérer plus tard en texte clair par exemple:

# 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
12
répondu Keith Hill 2009-10-07 15:28:42

est venu ici pour chercher comment cartographier les lecteurs utilisant PowerShell?

il y a un moyen plus simple avec PowerShell3.0. New-PSDrive a été mis à jour avec les -persist option. E. g.

New-PSDrive -Name U -PSProvider FileSystem -Root \yourserver\your\folder -Credential yourdomain\username -Persist

Dans le passé, New-PSDrive n'a affecté que la session PowerShell actuelle. -persist provoque l'enregistrement de la cartographie avec les O / S, pour ainsi dire. Voir New-PSDrive

Pour répondre à la question initiale, vous pouvez modifier les informations d'identification utilisées. En utilisant -Credential pour varier la commande domain\username permet à Windows de demander un mot de passe. Une autre alternative est de passer un objet PSCredential comme dans l'exemple ci-dessous. Voir Get-Credential pour plus de détails.

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  
9
répondu Donal Lafferty 2012-11-22 12:54:57
$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")
1
répondu DisplayName 2016-05-14 20:54:47

j'ai trouvé cela facile, doublure travaillé dans mon cas (un peu "out of the box" pensée ;) )

(Démarrer-Processus -FilePath "C:\windows\system32\NET.exe" -ArgumentList "I: \Serveur\Volume /UTILISATEUR:XXXXX mot de passe / persistante: yes" - Wait-Passthru).ExitCode

et comme bonus supplémentaire, vous obtenez un beau code de sortie à signaler. Espérons que cela aide.

1
répondu JPand Katie 2016-05-17 12:29:13

Cela devrait fonctionner:

$net = $(New-Object -ComObject WScript.Network)
$net.MapNetworkDrive("r:", "\romeobox\files",,"username","password")
0
répondu fpschultze 2012-01-15 19:37:22

Sur mon poste de travail,

$net.MapNetworkDrive("k", "\romeobox\files", $false, "domain\username", "password")

m'a envoyé d'erreur :

Exception lors de l'appel de "MapNetworkDrive" avec " 5 "argument(S) :" Nom de périph érique local déjà utilisé.

curieusement, cela ne vient pas du fait que K: était déjà utilisé mais de "::" manquant. Voici ce qui fonctionne sur mon poste de travail :

$net.MapNetworkDrive::("k", "\romeobox\files", $false, "domain\username", "password")
0
répondu Valentin O. 2016-10-06 14:09:15