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).
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
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 on
y 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.
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
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
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
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
¿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
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.
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
Relacionados:
Contenido