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?
7 réponses
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\romeobox\files", $false, "domain\user", "password")
Devrait faire l'affaire,
Gentillesse,
Dan
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
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
$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")
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.
Cela devrait fonctionner:
$net = $(New-Object -ComObject WScript.Network)
$net.MapNetworkDrive("r:", "\romeobox\files",,"username","password")
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")