我使用了很多文件夹共享,但是有一堆锁定的文件已经被其他进程打开了。
我要关闭那些文件。到目前为止,我一直在使用MMC -系统工具-共享文件夹-打开文件。
如果我可以使用PowerShell来过滤OpenFiles.exe检索的列表/表,并且一旦获得文件ID,就可以使用网络文件/close关闭它,或者使用其他一些具有类似效果的PS本机方法,这样就更方便了。
我是PowerShell的新手,所以我想知道是否有一种方法可以创建一个PS脚本来接收文件的路径,然后使用文件ID关闭该文件?
发布于 2017-07-28 20:08:57
Get-SmbOpenFile和Close-SmbOpenFile将为您完成任务。
登录到您的文件服务器,启动PowerShell。使用Get-SmbOpenFile显示文件服务器上所有打开的文件。这些文件将与下表标题一起显示
FileId SessionId Path ShareRelativePath ClientComputerName ClientUserName
使用Close-SmbOpenFile关闭文件。
Close-SmbOpenFile -FileId 4415226383589
如果您知道Excel文件是问题所在,则可以缩小对所有具有.XLSX扩展名的打开文件的搜索范围。
Get-SmbOpenFile | Where-Object -Property sharerelativepath -match ".XLSX"
在结果中找到问题文件后,您可以通过fileID关闭该文件。
如果您想关闭文件服务器上所有打开的文件:
Get-SmbOpenFile | Close-SmbOpenFile
如果要关闭一个或多个已打开并与文件扩展名".XLSX“匹配的文件。
Get-SmbOpenFile | Where-Object -Property sharerelativepath -match ".XLSX" | Close-SmbOpenFile -Force
*注*根据TechNet文章“关闭-SMBOpenFile强制关闭由服务器消息块(SMB)服务器的一个客户端打开的文件。此cmdlet应谨慎使用,因为如果客户端在文件关闭前未将所有文件修改刷新回服务器,则可能会导致该文件被关闭的客户端数据丢失”。
有关CMDlets的更多信息
Get-SmbOpenFile https://technet.microsoft.com/en-us/library/jj635701(v=wps.620).aspx
关闭-SmbOpenFile https://technet.microsoft.com/en-us/library/jj635721(v=wps.620).aspx
发布于 2016-11-10 15:38:55
下面是一个快速而又脏的使用CMD和OpenFiles.exe的方法。我相信,如果需要的话,它可以很快地被翻译成PoSH。将其保存为CloseFile.cmd,并将其放在路径上的一个文件夹中。
@echo off
if "%1" == "" goto SYNTAX
if "%2" == "" goto SYNTAX
goto RUNIT
:SYNTAX
echo Use:
echo CloseFile.cmd ^<server^> ^<file^>
goto :EOF
:RUNIT
set _server=%1
set _file=%2
openfiles /query /s %_server% /fo csv | findstr /i /c:"%_file%" > _filelist.txt
for /f "tokens=1,4 delims=," %%a in (_filelist.txt) do (
openfiles /disconnect /s %_server% /op %%b /id %%a
)
if exist _filelist.txt del _filelist.txt
https://serverfault.com/questions/718875
复制相似问题