Cómo administrar eficientemente los recursos compartidos de archivos de Windows con PowerShell

Administrar recursos compartidos SMB con PowerShell es prácticamente una solución, especialmente si alguna vez has tenido que hacerlo en varios servidores o quieres automatizar tareas. A veces, los comandos y las opciones pueden ser abrumadores, sobre todo si intentas ajustar la configuración del servidor o crear nuevos recursos compartidos sobre la marcha. Es genial que el módulo SMBShare sea tan potente con funciones como crear recursos compartidos, administrar el acceso e incluso comprobar qué está abierto en tiempo real. Ten en cuenta que algunas de estas tareas requieren derechos de administrador, así que no te emociones demasiado sin los permisos adecuados. Esta guía te dará una idea más clara de cómo crear, administrar y solucionar problemas de recursos compartidos SMB directamente desde PowerShell, lo que te ahorrará el dolor de cabeza de tener que navegar por los menús manualmente.

Cómo solucionar problemas de recursos compartidos SMB en Windows con PowerShell

Crear una carpeta compartida en Windows con PowerShell

En primer lugar, crear recursos compartidos ya no es tan sencillo como hacer clic derecho. Si quieres configurar uno rápidamente, usar PowerShell es la mejor opción. Te recomendamos revisar tus recursos compartidos existentes con [nombre del recurso compartido] Get-SmbShare. Esto te mostrará lo que ya tienes disponible, incluyendo los recursos compartidos de administrador predeterminados.

Aquí está el comando para crear un nuevo recurso compartido:

New-SmbShare -Name Scripts -Path C:\PS -FullAccess woshub\mun_admins, woshub\mun-man01$ -ChangeAccess "woshub\mun-man01_scripts_rw" -ReadAccess "$env:USERDOMAIN\domain users" –description "PowerShell scripts for admin"

En resumen, se trata de otorgar acceso completo a algunos grupos de administradores, cambiar los permisos de una cuenta de equipo específica y permisos de lectura a todos los usuarios del dominio. Recuerda que puedes agregar opciones, como -EncryptData $Truesi necesitas cifrar el tráfico SMB o -CachingModepara el acceso sin conexión. A veces, crear un recurso compartido temporal o establecer límites de conexión también resulta útil (como -Temporaryo -ConcurrentUserLimit 50).Estas opciones son útiles para necesidades más específicas, especialmente si configuras esto para automatización o pruebas temporales.

Si quieres ver la configuración completa de la carpeta compartida, simplemente haz lo siguiente:

Get-SmbShare -Name scripts | select *

Y si deseas eliminar un recurso compartido más tarde, simplemente:

Remove-SmbShare Scripts

Agregar acceso de usuario también es sencillo:

Grant-SmbShareAccess -Name Scripts -AccountName "woshub\b.hoffmann" -AccessRight Change -Force

O bien, para revocar el acceso de alguien:

Revoke-SmbShareAccess -Name Scripts -AccountName Everyone -Force

A veces es posible que desees bloquear el acceso a ciertas cuentas (denegar permisos tiende a anular otros):

Block-SmbShareAccess -Name Scripts -AccountName woshub\ExternalGuests -Force

Cómo solucionar bloqueos de recursos compartidos SMB y administrar archivos abiertos

Esto es lo que se complica si los usuarios informan que «El archivo está bloqueado» o que ya no pueden acceder a ciertos archivos. PowerShell permite ver quién tiene archivos abiertos e incluso cerrarlos si es necesario, lo cual es bastante complicado, pero a veces necesario.

Comprueba qué archivos están abiertos con:

Get-SmbOpenFile | select ClientUserName, ClientComputerName, Path, SessionID

Si desea ver los archivos abiertos de un usuario específico, esto ayuda:

Get-SmbOpenFile -ClientUserName "woshub\b.hoffmann" | select ClientComputerName, Path

Y aquí está la parte extraña: si tienes que forzar el cierre de un archivo porque está colgado o atascado, esta línea es la magia:

$sessn = New-CIMSession -ComputerName munfs01 Get-SMBOpenFile -CIMSession $sessn | where {$_. Path -like "*sale_report2022.docx*"} | Close-SMBOpenFile -CIMSession $sessn

No sé por qué, pero a veces falla al primer intento y luego funciona tras reiniciar o reintentar un par de veces. Windows lo hace más difícil de lo necesario.

Asignación de unidades de red con PowerShell

Asignar recursos compartidos SMB a unidades de red puede ser un fastidio si se hace manualmente cada vez. Por suerte, New-SmbMappingel cmdlet de PowerShell se encarga de la tarea. A continuación, se explica cómo asignar el recurso compartido \\munfs01\scripts a la unidad U:

New-SmbMapping -LocalPath U: -RemotePath \\munfs01\scripts -UserName b.hoffmann -Password my22pass -Persistent $true -SaveCredential

Nota: Sin -Persistent, la unidad desaparece tras reiniciar. Esta -SaveCredentialopción almacena tus credenciales en el Administrador de Credenciales de Windows.¡Genial la automatización! Si quieres ver todas las unidades asignadas, simplemente ejecuta:

Get-SmbMapping

Y si las cosas salen mal, desmapear es simplemente:

Remove-SmbMapping U: -Force

Si tiene problemas con un recurso compartido difícil de gestionar o necesita configurar unidades persistentes en los equipos de los usuarios, las GPO siguen siendo útiles, pero hacerlo con PowerShell es más rápido si administra varios servidores o automatiza la implementación. Recuerde que los problemas con SMB pueden ser complejos; a veces, solo hay que limpiar archivos abiertos, restablecer configuraciones o deshabilitar protocolos antiguos como SMB1 si ya no son necesarios (simplemente ejecute Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force).

Resumen

  • La creación de acciones nos New-SmbShareha ahorrado muchísimo tiempo.
  • Comprobar los archivos abiertos ayuda a mantener el servidor funcionando sin problemas cuando algo se bloquea.
  • Tenga cuidado con los permisos: úselos Grant-SmbShareAccessy Revoke-SmbShareAccessmantenga el acceso ordenado.
  • La asignación de unidades New-SmbMappingse puede automatizar por completo, lo que resulta ideal para los scripts de implementación.

Resumen

PowerShell ofrece una forma muy eficaz de administrar recursos compartidos SMB, solucionar problemas de bloqueo de archivos y automatizar los recursos compartidos de red. No es perfecto (a veces los comandos fallan o requieren un segundo intento), pero en general reduce mucho el trabajo manual. Solo recuerda ejecutar tu shell como administrador cuando sea necesario y comprobar los permisos o abrir los identificadores de archivos si algo funciona de forma extraña. Espero que esto te sirva de punto de partida para solucionar problemas de SMB sin complicaciones. Espero que esto les sea útil a todos; a mí me funcionó, quizá a ti también.