¿Cómo ver y cerrar archivos abiertos en Windows Server SMB Share?
Los administradores del servidor de archivos de Windows a menudo tienen que forzar el cierre de los archivos compartidos que están abiertos simultáneamente por varios usuarios. Esto suele suceder si el software de escritorio no funciona como se esperaba, si el usuario cierra sesión incorrectamente o si el usuario abrió un archivo y se olvidó de cerrarlo (se fue a casa, de vacaciones, etc.). En todos estos casos, el archivo de la carpeta de red compartida todavía está abierto (y bloqueado) y otros usuarios no pueden modificarlo. Otros usuarios pueden ver este mensaje cuando intentan abrir un archivo bloqueado (dependiendo de la aplicación utilizada):
The document filename is locked for editing by another user. To open a read-only copy of his document, click…En este artículo, le mostraremos cómo obtener la lista de archivos abiertos en un servidor de archivos de Windows, descubrir qué usuario bloqueó un archivo en una carpeta compartida y cómo cerrar (restablecer) sesiones de archivos para desbloquear archivos abiertos.
Ver archivos abiertos en una carpeta de red compartida en Windows Server
Puede obtener la lista de archivos abiertos por los usuarios en el servidor de archivos de Windows utilizando la Administración de equipos integrada.
compmgmt.msc) complemento gráfico.
Abra la consola de Administración de equipos en su servidor de archivos (o conéctese al servidor de forma remota desde la consola de administración que se ejecuta en su equipo) y vaya a Herramientas del sistema-> Carpetas compartidas-> Abrir archivos. Se muestra una lista de archivos abiertos en el servidor SMB actual en el lado derecho de la ventana. La lista contiene la ruta local al archivo, el nombre de la cuenta de usuario que abre el archivo, el número de bloqueos y el modo en que se abre el archivo (Lectura o Escritura+Lectura).
Puede obtener la misma lista de archivos abiertos usando el integrado
openfiles.exeherramienta de consola Por ejemplo, con el siguiente comando puede obtener el ID de sesión, el nombre de usuario y la ruta local completa al archivo abierto:
openfiles /Query /fo csv |moreCuando un usuario accede de forma remota a una carpeta o archivo en una carpeta de red compartida en el servidor, se crea una nueva sesión SMB. Puede administrar archivos abiertos utilizando estos ID de sesión.
Puede mostrar una lista de archivos abiertos en un servidor remoto. Por ejemplo, debe enumerar todos los archivos abiertos en carpetas compartidas en el host lon-fs01:
openfiles /Query /s lon-fs01 /fo csvEste
openfilesEl comando también le permite ver la lista de archivos abiertos localmente. Para usarlo, habilite la opción “Mantener lista de objetos” usando el comando:
openfiles /local ony reinicie su servidor. Después de eso, el
openfilesEl comando mostrará archivos abiertos por procesos locales (se recomienda utilizar este modo solo con fines de depuración, ya que puede afectar negativamente el rendimiento del servidor).
¿Cómo saber quién está bloqueando un archivo en una carpeta compartida?
Para identificar al usuario que abrió (bloqueó) el archivo filename.docx en la carpeta de red compartida en el servidor remoto lon-fs01, ejecute este comando:
openfiles /Query /s lon-fs01 /fo csv | find /i "filename.docx"Este
/iLa tecla se utiliza para realizar búsquedas de archivos que no distinguen entre mayúsculas y minúsculas.
Puede especificar solo una parte del nombre del archivo. Por ejemplo, debe averiguar quién abrió un archivo XLSX que contiene "sale_report" en su nombre. Utilice la siguiente tubería:
openfiles /Query /s lon-fs01 /fo csv | find /i "sale_report"| find /i "xlsx"Por supuesto, puede encontrar este archivo en la GUI de administración de computadoras, pero es menos conveniente (esta consola no proporciona la función de búsqueda).
¿Cómo cerrar por la fuerza un archivo abierto en un recurso compartido SMB?
Para cerrar un archivo abierto, búsquelo en la lista de archivos en la sección Abrir archivo y seleccione Cerrar archivo abierto en el menú contextual.
Si hay cientos de archivos abiertos en su servidor de archivos, no será fácil encontrar el archivo específico en la consola. Es más conveniente utilizar la herramienta de línea de comandos Openfiles. Como ya hemos dicho, devuelve el ID de sesión del archivo abierto. Con este ID de sesión, puede forzar el cierre del archivo restableciendo la conexión SMB.
Primero, necesita encontrar el ID de sesión del archivo abierto:
openfiles /Query /s lon-fs01 /fo csv | find /i "farm"| find /i ".xlsx"Desconecte al usuario del archivo utilizando el ID de sesión de SMB recibido:
openfiles /Disconnect /s lon-fs01 /ID 617909089
Puede restablecer a la fuerza todas las sesiones y desbloquear todos los archivos abiertos por un usuario específico:
openfiles /disconnect /s lon-fs01/u corp\mjenny /id *Nota. Cerrar a la fuerza un archivo abierto por un cliente en un servidor SMB puede provocar la pérdida de datos no guardados. Por lo tanto, utilice el
openfiles /disconnectcomando o el
Close-SMBOpenFilecmdlet (discutido a continuación) con mucho cuidado.
Get-SMBOpenFile: Buscar y cerrar controladores de archivos abiertos mediante PowerShell
En la versión de PowerShell para Windows Server 2012/Windows 8 aparecieron nuevos cmdlets para administrar recursos compartidos y archivos en un servidor SMB. Estos cmdlets se pueden usar para cerrar de forma remota las conexiones de red a un archivo abierto.
Puede obtener una lista de archivos abiertos mediante el cmdlet Get-SMBOpenFile. Close-SmbOpenFile se usa para cerrar/restablecer la conexión a un archivo remoto.
Para mostrar una lista de archivos abiertos en el servidor SMB de Windows, ejecute el comando:
Get-SMBOpenFileEl comando devuelve la identificación del archivo, la identificación de la sesión y el nombre completo del archivo (ruta).
Puede mostrar una lista de archivos abiertos con nombres de usuario y de computadora (direcciones IP):
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionIDPuede enumerar todos los archivos abiertos por un usuario específico:
Get-SMBOpenFile -ClientUserName "corp\mjenny"|select ClientComputerName,Patho desde una computadora/servidor específico:
Get-SMBOpenFile -ClientComputerName 192.168.1.190| select ClientUserName,PathPuede mostrar una lista de archivos abiertos por patrón. Por ejemplo, para enumerar todos los archivos exe abiertos desde la carpeta compartida:
Get-SmbOpenFile | Where-Object {$_.Path -Like "*.exe*"}o abrir archivos con un nombre específico:
Get-SmbOpenFile | Where-Object {$_.Path -Like "*reports*"}El cmdlet Close-SmbOpenFile se usa para cerrar el controlador de archivos abiertos. Puede cerrar el archivo por ID:
Close-SmbOpenFile -FileId 4123426323239Pero suele ser más conveniente cerrar el archivo por su nombre:
Get-SmbOpenFile | where {$_.Path -like "*annual2020.xlsx"} | Close-SmbOpenFile -ForceCon el
Out-GridViewcmdlet, puede crear un formulario GUI simple para buscar y cerrar archivos abiertos. El siguiente script enumerará los archivos abiertos. Debe usar los filtros incorporados en la tabla Out-GridView para encontrar archivos abiertos para los que desea restablecer las sesiones SMB. Luego debe seleccionar los archivos necesarios y hacer clic en Aceptar. Como resultado, los archivos seleccionados se cerrarán a la fuerza.
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru -title “Select Open Files”|Close-SmbOpenFile -Confirm:$false -Verbose¿Cómo cerrar archivos abiertos en una computadora remota usando PowerShell?
Este
Get-SMBOpenFiley
Close-SmbOpenFileLos cmdlets se pueden usar para buscar y cerrar archivos abiertos (bloqueados) de forma remota. Primero, debe conectarse a un servidor SMB de Windows remoto a través de una sesión CIM:
$sessn = New-CIMSession -Computername lon-fs01También puede conectarse a un servidor remoto para ejecutar comandos de PowerShell mediante los cmdlets de PSRemoting:
Enter-PSSessiono
Invoke-CommandEl siguiente comando encontrará la sesión SMB para el archivo abierto pubs.docx y cerrará la sesión del archivo.
Get-SMBOpenFile -CIMSession $sessn | where {$_.Path -like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessnConfirme el cierre del archivo presionando
Y. Como resultado, ha desbloqueado el archivo. Ahora otros usuarios pueden abrirlo.
Para eliminar la confirmación de forzar el cierre de un archivo en un servidor SMB, use el
-Forcellave.
Con PowerShell, puede cerrar sesiones SMB y desbloquear todos los archivos que un usuario específico ha abierto (un usuario se fue a casa y no liberó los archivos abiertos). Por ejemplo, para restablecer todas las sesiones de archivos del usuario mjenny, ejecute este comando:
Get-SMBOpenFile -CIMSession $sessn | where {$_.ClientUserName -like "*mjenny*"}|Close-SMBOpenFile -CIMSession $sessn






