¿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 varios usuarios abren simultáneamente. Esto suele suceder si el software de escritorio no funciona como se esperaba, el usuario cierra la sesión incorrectamente o cuando el usuario abre un archivo y se olvida 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 un mensaje de este tipo cuando intentan abrir un archivo bloqueado (según 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, averiguar 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 el Gestión informática (compmgmt.msc) complemento gráfico.

Abra la consola de administración de la computadora en su servidor de archivos (o conéctese al servidor de forma remota desde la consola de administración que se ejecuta en su computadora) y vaya a Herramientas de 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).

Lista de archivos abiertos en carpetas compartidas de Windows Server 2012 R2

Puede obtener la misma lista de archivos abiertos utilizando el openfiles.exe herramienta 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 |more

Herramienta cli de Openfiles para administrar archivos abiertos

Cuando 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 la lon-fs01 anfitrión:

openfiles /Query /s lon-fs01 /fo csv

los openfiles El comando también le permite ver la lista de archivos abiertos localmente. Para usarlo, habilite el «Mantener lista de objetos”Opción usando el comando: openfiles /local ony reinicie su servidor. Después de eso, el openfiles El comando mostrará los archivos abiertos por los procesos locales (se recomienda usar 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 nombrearchivo.docx archivo 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"

los /i La clave 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 equipos, 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 Abrir documento sección y seleccione Cerrar Abrir archivo en el menú contextual.

cerrar el archivo abierto usando la interfaz gráfica de usuario de la consola de administración de la computadora

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 el Abrir archivos herramienta de línea de comandos. 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 SMB recibido:

openfiles /Disconnect /s lon-fs01 /ID 617909089

Openfiles: desconecta al usuario por ID de sesión

Puede restablecer todas las sesiones a la fuerza y ​​desbloquear todos los archivos abiertos por un usuario específico:

openfiles /disconnect /s lon-fs01/u corpmjenny /id *

Nota. El cierre forzoso de un archivo abierto por un cliente en un servidor SMB puede resultar en la pérdida de datos no guardados. Por lo tanto, utilice el openfiles /disconnect comando o el Close-SMBOpenFile cmdlet (discutido a continuación) con mucho cuidado.

Get-SMBOpenFile: buscar y cerrar controladores de archivos abiertos mediante PowerShell

Aparecieron nuevos cmdlets para administrar recursos compartidos y archivos en un servidor SMB en la versión de PowerShell para Windows Server 2012 / Windows 8. Estos cmdlets se pueden usar para cerrar de forma remota conexiones de red a un archivo abierto.

Puede obtener una lista de archivos abiertos utilizando el Get-SMBOpenFile cmdlet. Cerrar-SmbOpenFile se utiliza 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-SMBOpenFile

cmdlet de PowerShell get-smbopenfile

El comando devuelve el ID del archivo, el ID de la sesión y el nombre completo del archivo (ruta).
Puede mostrar una lista de archivos abiertos con nombres de usuario y computadora (direcciones IP):

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

powershell: enumera los archivos abiertos de smb con nombres de usuario

Puede enumerar todos los archivos abiertos por un usuario específico:

Get-SMBOpenFile –ClientUserName "corpmjenny"|select ClientComputerName,Path

o desde una computadora / servidor específico:

Get-SMBOpenFile –ClientComputerName 192.168.1.190| select ClientUserName,Path

Puede mostrar una lista de archivos abiertos por patrón. Por ejemplo, para enumerar todos exe archivos 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 4123426323239

Pero suele ser más conveniente cerrar el archivo por nombre:

Get-SmbOpenFile | where {$_.Path –like "*annual2020.xlsx"} | Close-SmbOpenFile -Force

Con el Out-GridView cmdlet, puede crear un formulario GUI simple para buscar y cerrar archivos abiertos. La siguiente secuencia de comandos mostrará una lista de los archivos abiertos. Debe usar los filtros integrados en la tabla Out-GridView para buscar archivos abiertos para los que desea restablecer las sesiones SMB. Luego, debe seleccionar los archivos requeridos 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

secuencia de comandos de la interfaz gráfica de usuario de powershell para cerrar archivos abiertos usando out-gridview

¿Cómo cerrar archivos abiertos en una computadora remota usando PowerShell?

los Get-SMBOpenFile y Close-SmbOpenFile Los cmdlets se pueden utilizar 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-fs01

También puede conectarse a un servidor remoto para ejecutar comandos de PorwerShell mediante los cmdlets de PSRemoting: Enter-PSSession o Invoke-Command.

El siguiente comando encontrará la sesión SMB para el archivo abierto pubs.docx y cierre la sesión del archivo.

Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessn

Confirme el cierre del archivo presionando Y. Como resultado, ha desbloqueado el archivo. Ahora otros usuarios pueden abrirlo.

PowerShell Get-SMBOpenFile - Cerrar-SMBOpenFile

Para eliminar la confirmación de forzar el cierre de un archivo en un servidor SMB, utilice el -Force llave.

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

Artículos Interesantes