首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Powershell和Openfile关闭Windows共享中的锁定文件

使用Powershell和Openfile关闭Windows共享中的锁定文件
EN

Server Fault用户
提问于 2015-09-03 15:24:25
回答 2查看 46.8K关注 0票数 5

我使用了很多文件夹共享,但是有一堆锁定的文件已经被其他进程打开了。

我要关闭那些文件。到目前为止,我一直在使用MMC -系统工具-共享文件夹-打开文件。

如果我可以使用PowerShell来过滤OpenFiles.exe检索的列表/表,并且一旦获得文件ID,就可以使用网络文件/close关闭它,或者使用其他一些具有类似效果的PS本机方法,这样就更方便了。

我是PowerShell的新手,所以我想知道是否有一种方法可以创建一个PS脚本来接收文件的路径,然后使用文件ID关闭该文件?

EN

回答 2

Server Fault用户

发布于 2017-07-28 20:08:57

Get-SmbOpenFile和Close-SmbOpenFile将为您完成任务。

登录到您的文件服务器,启动PowerShell。使用Get-SmbOpenFile显示文件服务器上所有打开的文件。这些文件将与下表标题一起显示

代码语言:javascript
运行
复制
FileId                  SessionId               Path           ShareRelativePath      ClientComputerName     ClientUserName

使用Close-SmbOpenFile关闭文件。

代码语言:javascript
运行
复制
Close-SmbOpenFile -FileId 4415226383589

如果您知道Excel文件是问题所在,则可以缩小对所有具有.XLSX扩展名的打开文件的搜索范围。

代码语言:javascript
运行
复制
Get-SmbOpenFile | Where-Object -Property sharerelativepath -match ".XLSX"

在结果中找到问题文件后,您可以通过fileID关闭该文件。

如果您想关闭文件服务器上所有打开的文件:

代码语言:javascript
运行
复制
Get-SmbOpenFile | Close-SmbOpenFile

如果要关闭一个或多个已打开并与文件扩展名".XLSX“匹配的文件。

代码语言:javascript
运行
复制
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

票数 5
EN

Server Fault用户

发布于 2016-11-10 15:38:55

下面是一个快速而又脏的使用CMD和OpenFiles.exe的方法。我相信,如果需要的话,它可以很快地被翻译成PoSH。将其保存为CloseFile.cmd,并将其放在路径上的一个文件夹中。

代码语言:javascript
运行
复制
    @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
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/718875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档