Mapeo de unidades de red con script

Mapeo de unidades de red con script

Estoy intentando utilizar un script para

  1. desasignar una unidad
  2. borre las credenciales en caché utilizadas para asignar esa unidad
  3. asigne la unidad nuevamente usando diferentes credenciales de usuario.

En Windows 7 el siguiente script funcionó para mí

@echo off
net use Z: /delete /y >nul
net stop LanmanWorkstation /y >nul
net start LanmanWorkstation >nul
timeout 1 >nul
net use Z: \\path\to\directory

Este script está destinado a desmontar lo que está asignado a Z. Luego borre las credenciales en caché utilizadas para montar z. Luego, vuelva a asignar la unidad utilizando las credenciales de otro usuario.

Cuando ejecuto esto en Windows 10, net stop y net start arrojan errores de acceso denegado. Intenté crear un acceso directo al script y configurarlo para que se ejecute siempre como administrador, pero esta opción aparece atenuada en mi casilla, probablemente debido a la configuración de la política de grupo.

Estoy intentando encontrar una manera de lograr esta misma solución de desasignación/asignación y actualmente estoy explorando opciones otorgadas a través de PowerShell. Mi intento actual en PowerShell está usando

mount -Name "z" -PSProvider filesystem -Root "\\path\to\directory" -Persist

El mapa debe ser persistente para que la unidad aparezca en el Explorador de Windows. Este comando funciona como debería cuando lo ejecuto en PowerShell, pero al hacer doble clic en el archivo para ejecutarlo no se asigna la unidad, probablemente debido a problemas de acceso. Soy nuevo en PowerShell y todavía estoy aprendiendo, por lo que no conozco todas las opciones disponibles. ¿Alguien sabe una manera de lograr el efecto que busco?

Respuesta1

Vea lo siguiente ---

Borrar caché de credenciales de Windows

La utilidad para eliminar las credenciales almacenadas en caché es difícil de encontrar. Almacena tanto datos de certificados como contraseñas de usuario.

Abra un símbolo del sistema o ingrese lo siguiente en el comando de ejecución

 rundll32.exe keymgr.dll,KRShowKeyMgr

También hay una utilidad de línea de comandos:

C:\> cmdkey /?

Crea, muestra y elimina nombres de usuario y contraseñas almacenados.

Las asignaciones de unidades son históricamente una molestia. Bueno, ya sabes... ;-}

El uso de la red no era la única opción, ya que también se podía usar WScript en VBS o WMIC para hacer esto. Entonces, seguro que PowerShell puede hacer WMI para esto.

#PSTip Crear unidad de red asignada usando WScript.Network

Aquí se puede ver un ejemplo de cómo se puede asignar una unidad:

(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder')

Esto no asignará la unidad de forma persistente. En otras palabras, la unidad desaparecerá después de reiniciar o cuando un usuario cierre sesión. Para garantizar que la asignación de unidades sea persistente, se debe agregar un tercer argumento: un valor booleano establecido en verdadero:

(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder',$true)

Usar el modificador -persist es la opción de PowerShell para mantener la unidad estable, pero también tiene los cmdlets Smb, desde v3.

Get-Command -Name '*smb*'

CommandType     Name                   Version    Source
-----------     ----                   -------    ------
...         
Function        Get-SmbGlobalMapping   2.0.0.0    SmbShare
Function        Get-SmbMapping         2.0.0.0    SmbShare
...        
Function        Get-SmbShare           2.0.0.0    SmbShare
Function        Get-SmbShareAccess     2.0.0.0    SmbShare
....
Function        New-SmbMapping         2.0.0.0    SmbShare
...        
Function        New-SmbShare           2.0.0.0    SmbShare
...            
Function        Remove-SmbShare        2.0.0.0    SmbShare
...           
Function        Set-SmbShare           2.0.0.0    SmbShare
...

Ver también: Powershell: asignar/desasignar unidad de red en una computadora remota

En cuanto a esto...

Lo ejecuto en PowerShell, pero al hacer doble clic en el archivo para ejecutarlo no se asigna la unidad, probablemente debido a problemas de acceso.

... no es una cosa. .ps1 están asociados de forma predeterminada con el bloc de notas u otro editor de texto. Esto lo hago por diseño. Claro, puedes cambiar esa asociación, pero no lo hagas. Los usuarios hacen doble clic en casi cualquier cosa, y eso puede generar una serie de problemas reales de seguridad/gestión de riesgos/operacionalmente para usted y su organización.

Hay formas de hacer doble clic para ejecutar, con o sin permisos elevados:

  1. Todo el asunto de la asociación, simplemente no lo hagas.
  2. Llame a un .ps1 desde un archivo bat/cmd.

Aunque realmente siempre he sentido esto, hacer doble clic para ejecutar incluso .bat, .vbs, .cmd y simplemente se ejecutan era algo malo, mucho antes de que PowerShell existiera. Sin embargo, la industria adoptó ese hábito y, por lo tanto, fue difícil sacar a la gente de él.

  1. Cree un acceso directo personalizado, configurado correctamente para hacer doble clic para ejecutar.

Ejemplo:

# specify the path to your PowerShell script
$ScriptPath = "C:\test\test.ps1"

# create a lnk file
$shortcutPath = [System.IO.Path]::ChangeExtension($ScriptPath, "lnk")
$filename = [System.IO.Path]::GetFileName($ScriptPath)

# create a new shortcut
$shell = New-Object -ComObject WScript.Shell
$scut = $shell.CreateShortcut($shortcutPath)

# launch the script with powershell.exe:
$scut.TargetPath = "powershell.exe"

# skip profile scripts and enable execution policy for this one call
# IMPORTANT: specify only the script file name, not the complete path
$scut.Arguments = "-noprofile -executionpolicy bypass -file ""$filename"""

# IMPORTANT: leave the working directory empty. This way, the 
# shortcut uses relative paths 
$scut.WorkingDirectory = ""

# optinally specify a nice icon
$scut.IconLocation = "$env:windir\system32\shell32.dll,162"

# save shortcut file
$scut.Save()

# open shortcut file in File Explorer
explorer.exe /select, $ShortcutPath
  1. Convierta nuestro script en un .exe usando esta herramienta MS PowerShellGallery.com.

PS2EXE-GUI: "Convertir" scripts de PowerShell en archivos EXE con GUI

Entonces tienes opciones. Lo que usted elija es una cuestión de asignaciones operativas, etc.

información relacionada