web-dev-qa-db-fra.com

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

Background: / Supposons que j'utilise le script PowerShell suivant de ma machine locale pour mapper automatiquement certains lecteurs réseau.

$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");

Question: Comment modifier le script pour pouvoir également 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
dreftymac
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\\romeobox\files", $false, "domain\user", "password")

Devrait faire l'affaire,

La gentillesse,

Dan

33
Daniel Elliott

Si vous avez besoin d'un moyen de stocker le mot de passe sans le mettre en texte brut dans votre script ou dans un fichier de données, vous pouvez utiliser DPAPI pour protéger le mot de passe afin de pouvoir le stocker en toute sécurité dans un fichier et le récupérer ultérieurement sous forme de texte brut, 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
Keith Hill

Vous êtes venu chercher comment cartographier des disques avec PowerShell? 

Il existe un moyen plus simple avec PowerShell3.0. New-PSDrive a été mis à jour avec l'option -persist. Par exemple. 

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

New-PSDrive n'affectait que la session PowerShell en cours. -persist fait en sorte que le mappage soit enregistré avec le système d'exploitation. Voir New-PSDrive

Pour répondre à la question d'origine, vous pouvez modifier les informations d'identification utilisées. L'utilisation de -Credential pour faire varier le domaine\nom d'utilisateur entraîne Windows à demander un mot de passe. Une autre alternative consiste à transmettre 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
Donal Lafferty

J'ai trouvé cette doublure facile et efficace dans mon cas (petite pensée "originale";))

(Start-Process -FilePath "C:\windows\system32\NET.exe" -ArgumentList "USE I:\Server\Volume/USER: XXXXX mot de passe / persistent: oui" -Wait -Passthru).

Et, en prime, vous obtenez un code de sortie Nice pour générer un rapport. J'espère que cela pourra aider.

1
JPand Katie
$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
DisplayName

Sur mon poste de travail

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

m'a envoyé une 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
Valentin O.