You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 7无法通过Close-SmbOpenFile关闭父文件夹D:\TEST

解决PowerShell无法关闭SMB父文件夹打开记录的问题

我使用PowerShell脚本关闭已打开的网络文件,脚本可正常关闭子文件夹及文件,但无法关闭父文件夹(如D:\TEST)。

我的初始脚本:

Get-SMBOpenFile | where {$_.Path -like "D:\TEST\*" -or $_.Path -like "D:\TEST\"} | Close-SmbOpenFile -Force -Verbose

执行该脚本后,仍能看到父文件夹的打开记录:

FileId       SessionId    Path                     ShareRelativePath ClientComputerName ClientUserName 
------       ---------    ----                     ----------------- ------------------ -------------- 
618475292929 618475290673 D:\TEST\                   192.168.1.1       CONTOSO\user1

补充测试:执行仅匹配子项的命令Get-SMBOpenFile | where {$_.Path -like "D:\TEST\*"},输出包含父文件夹的打开记录:

FileId       SessionId    Path                                          ShareRelativePath     ClientComputerName ClientUserName
------       ---------    ----                                          -----------------     ------------------ --------------
619012162101 618475290673 D:\TEST\New folder - Copy                    New folder - Copy     192.168.1.1       CONTOSO\User
619012162273 618475290673 D:\TEST\                                                           192.168.1.1       CONTOSO\User
619012162277 618475290673 D:\TEST\New folder - Copy (2)                 New folder - Copy (2) 192.168.1.1       CONTOSO\User

执行关闭命令后,父文件夹的打开记录依然存在:

Get-SMBOpenFile | where {$_.Path -like "D:\TEST\*"}

FileId       SessionId    Path                     ShareRelativePath ClientComputerName ClientUserName
------       ---------    ----                     ----------------- ------------------ --------------
619012162357 618475290673 D:\TEST\                                   192.168.1.1       CONTOSO\User
619012162365 618475290673 D:\TEST\                                   192.168.1.1       CONTOSO\User

解决方法

1. 修正Path匹配条件

Get-SMBOpenFile返回的父文件夹路径可能存在两种格式:D:\TEST(无末尾斜杠)和D:\TEST\(有末尾斜杠),原脚本的匹配规则没覆盖无斜杠的情况。修改过滤条件,同时匹配两种格式:

Get-SMBOpenFile | Where-Object {
    $_.Path -eq "D:\TEST" -or 
    $_.Path -eq "D:\TEST\" -or 
    $_.Path -like "D:\TEST\*"
} | Close-SmbOpenFile -Force -Verbose

2. 单独关闭父文件夹的打开记录

如果只需要处理父文件夹的打开记录,可以直接精确匹配路径后关闭:

Get-SMBOpenFile | Where-Object {
    $_.Path -eq "D:\TEST" -or $_.Path -eq "D:\TEST\"
} | Close-SmbOpenFile -Force -Verbose

3. 关闭对应SMB会话彻底断开连接

如果客户端(如打开资源管理器窗口)在关闭文件后立即重新建立连接,导致打开记录反复出现,可以直接关闭对应的SMB会话:

# 获取目标会话ID(去重)
$targetSessions = Get-SMBOpenFile | Where-Object {
    $_.Path -eq "D:\TEST" -or 
    $_.Path -eq "D:\TEST\" -or 
    $_.Path -like "D:\TEST\*"
} | Select-Object -Unique SessionId

# 关闭会话
$targetSessions | ForEach-Object {
    Close-SmbSession -SessionId $_.SessionId -Force -Verbose
}

内容的提问来源于stack exchange,提问作者Arbelac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:57:22