usuarios unidades unidad una todos servidor por para mapear los crear conectar compartir compartidas como carpetas carpeta asignar active configuration powershell networking hard-drive

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