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?
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\\romeobox\files", $false, "domain\user", "password")
Devrait faire l'affaire,
La gentillesse,
Dan
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
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
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.
$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")
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")