Microsoft Virtualization Discussions

Find CIFS session of named open file


Please tell me, how to find the CIFS session of an open file and how to terminate it.



I don't see any Data ONTAP APIs that do what you seek.  Get-NaCifsSession can tell you about users and volumes being accessed, but not files.  And I don't see any API to terminate an individual session.  You might experiment with manipulating the CIFS share ACLs, but otherwise you would have to call Disable-NaCifs, which is admittedly rather drastic.


ONTAP command

>cifs sessions *

shows all open files.

ONTAP command

>cifs terminate [workstation]

allows to terminate a single session.


You can do it from the Windows' "Computer Management" interface. Open it (compmgmt.msc) and connect to your filer/vfiler (by right-clicking the "Computer Management (Local)" in the first line of the left half of the screen -> connect to another computer). Down there you can find "Shared Folders" -> "Open Files". You can see there all the open files and sessions to your filer/vfiler and by right-clicking the specific open file you want to terminate, a terminate option will appear (don't remember the exact option, but it's there).

Hope it's helpful and what you asked for.


Sure enough, that works.  Also means that it should be possible via WMI, which by extension means PowerShell. 



I had no luck finding a way to do close a file in .NET, WMI, ADSI or COM.

Do you know a way?


I found this thread and found it helpful for 7-mode and wanted to update for cDOT:


You can use a combination of the following 2 commands to get the same information in cDOT at the CLI:

cifs session show -instance  (user info)

cifs session file show -instance   (open file info)


Use the connection ID field to link between the two outputs to establish the files a particular user has open.


To close a session or file you could then use:


cifs session close

cifs session file close


At least at 8.3+ you can also use the MMC to gather this information and close files/sessions if you have the appropriate permissions.


I am unsure about other methods like Powershell.




I know it is a little late to send you this message but maybe someone else needs it.


I have a script that copy folders from a source UNC path to a destination and closes open sessions of exe files. This scripts if for 7-Mode filers but you can change it for your needs.


        This is a function to copy system files from a source folder to a target folder.

        It is used to copy files from a source folder to a target folder. If any .EXE file is in use it closes the session before copy operation.

    .PARAMETER Source
        Is an UNC source path for system's files (\\filer\share\folder\sub-subfolder\...).

    .PARAMETER Target
        Is an UNC target path for system's files (\\filer\share\folder\sub-subfolder\...).

        Copy-SystemFiles.ps1 -Source \\filer1\share1\folder\sub-folder\third-level-folder \\filer2\share2\folder
        Will copy every file in the souce folder to target folder closing every executable .EXE files before copy operation.




function Get-InternalPath {
        [Parameter(Mandatory = $true)]

    $PathArray = $Path.Split('\')
    $Filer = $PathArray[2]

    Connect-NaController -Name $Filer |Out-Null

    $MountPoint = (Get-NaCifsShare -Share $PathArray[3]).MountPoint
    $FullPath = "C:$MountPoint"
    for ($i = 4; $i -lt $PathArray.Length; $i++) {
        $FullPath += "\$($PathArray[$i])"
    return $($FullPath.Replace('/','\'))

    Get-ChildItem -Path $Source|ForEach-Object {
        if($FileName.EndsWith(".exe")) {
            $TargetFiler = $Target.Split("\")[2]

            cmd /c "openfiles /Disconnect /S $TargetFiler /A * /OP $(Get-InternalPath -Path $Target)" |Out-Null

        Copy-Item -Recurse -Force -Path $FileName -Destination $Target -Verbose
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        Write-Output $FailedItem
        Write-Output $ErrorMessage