configuration - unidades - Powershell: cómo asignar una unidad de red con un nombre de usuario/contraseña diferente
mapear carpetas compartidas gpo (6)
¿Vine aquí buscando la forma de asignar unidades con PowerShell?
Hay una forma más simple con PowerShell3.0. New-PSDrive
se ha actualizado con la opción -persist
. P.ej
New-PSDrive -Name U -PSProvider FileSystem -Root //yourserver/your/folder -Credential yourdomain/username -Persist
En el pasado, New-PSDrive
solo afectaba a la sesión actual de PowerShell. -persist
hace que el mapeo se registre con el O / S, por así -persist
. Ver New-PSDrive
Para responder a la pregunta original, puede variar las credenciales utilizadas. El uso de -Credential
para variar el dominio / nombre de usuario hace que Windows -Credential
una contraseña. Otra alternativa es pasar un objeto PSCredential como en el siguiente ejemplo. Ver Get-Credential para más detalles.
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
Antecedentes: Supongamos que uso el siguiente script de powershell de mi máquina local para asignar automáticamente algunas unidades de red.
$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");
Pregunta: ¿Cómo modifico el script para que también pueda conectarme a romeobox, aunque mi nombre de usuario / contraseña en romeobox sea diferente al de las otras dos casillas?
En mi estación de trabajo,
$net.MapNetworkDrive("k", "//romeobox/files", $false, "domain/username", "password")
me envió un error
Excepción de los argumentos de «MapNetworkDrive» avec «5» argumento (s): «Nom de périph érique local déjà utilisé.
Curiosamente, no provino del hecho de que K: ya se usó, sino de "::" faltante. Esto es lo que está funcionando en mi estación de trabajo:
$net.MapNetworkDrive::("k", "//romeobox/files", $false, "domain/username", "password")
Me pareció fácil trabajar con un forro en mi caso (pequeño pensamiento "fuera de la caja";))
(Start-Process -FilePath "C: / windows / system32 / NET.exe" -ArgumentList USE USE: Server / Volume / USER: XXXXX contraseña / persistent: yes "-Wait -Passthru) .ExitCode
Y como un bono adicional, obtienes un buen código de salida para reportar. Espero que ayude.
Si necesita una forma de almacenar la contraseña sin ponerla en texto sin formato en su script o en un archivo de datos, puede usar la DPAPI para proteger la contraseña y guardarla de forma segura en un archivo y recuperarla posteriormente como texto sin formato, por ejemplo:
# 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
$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")
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "//romeobox/files", $false, "domain/user", "password")
Debería hacer el truco,
Amabilidad,
Dan