Why Get-SmbOpenFile losses the lock when file still opened at remote machine?

Muhammad Khalil 1 Reputation point
2020-09-26T10:49:51.447+00:00

I am using Get-SmbOpenFile, But surprisingly, it looses its connection and I can see that there is no lock even after couple of seconds later on the file any more, even it is still opened. I safely can remove that file on my server or can rename the file.

Why, this can be? I have to check opened .VHDX disk file connected with user and need to close them if they are still opened.

Get-SmbOpenFile | Where-Object { $._Path -match '\apvdp100\Profile\TestP1088\100.txt' } returns nothing even the file is opened remotely.

Get-SmbOpenFile | Where-Object { $._Path -match '100.txt' } returns the object if i open the file remotely and check within a second.

Even immediately after opening on remote machine from shared networked path, switched to file server and executed Get-SmbOpenFile it stops outputting anything and returns nothing.

It should in ideal case must return the information of opened file if it is opened otherwise nothing. But that's not the case as I explained earlier.

So, I have two questions :-)

 **1. So, what is the right way to search the file ? ( above Fully qualified path doesnt returns the search result )     
 2. Why the lock gets lost after couple of seconds later**
Windows Server
Windows Server
A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications.
12,178 questions
Windows Server PowerShell
Windows Server PowerShell
Windows Server: A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications.PowerShell: A family of Microsoft task automation and configuration management frameworks consisting of a command-line shell and associated scripting language.
5,382 questions
0 comments No comments
{count} votes

2 answers

Sort by: Most helpful
  1. Rich Matheisen 45,096 Reputation points
    2020-09-26T14:42:15.637+00:00

    In your first example you're using the '-match' operator. The regular expression you're using is actually looking for the string "apvdp100ProfileTestP1088100.txt" (where the "." represents "any character", not the literal value "."). I doubt that's what you intend. Because you intend to match the literal value "\" and ".", change that regular expression to: "\apvdp100\Profile\TestP1088\100.txt"

    The "\" in a regular expression is an escape character. You need to escape the escape!
    The "." in a regular expression means "match any single character".

    If you intent to match the entire $_.Path value, you should be intentional and add "anchor" characters at both ends of your regular expression to avoid partial matches: "^\apvdp100\Profile\TestP1088\100.txt$"

    If you're going to post your question in multiple forums, please make note of that by linking it in both places. Here's your question from ServerFault: why-get-smbopenfile-losses-the-lock-when-file-still-opened-at-remote

    0 comments No comments

  2. Rich Matheisen 45,096 Reputation points
    2020-09-26T14:57:05.327+00:00

    Have you tried using Get-SMBSession and checking the "NumOpens" property of all sessions to see if there are open files for any sessions?

    0 comments No comments