我已经从azure存储帐户文件共享中获得了打开的文件句柄,但这些信息似乎很少,无法理解是什么进程启动了它,或者这个文件句柄在哪个文件上。
如何使用handleid或sessionid从此列表中获取更多信息?
我在azure文档和互联网上搜索了很多,但没有关于这方面的信息。
示例脚本和响应:
PS C:\>Get-AzStorageFileHandle -ShareName "mysharename" -Recursive | Sort-Object ClientIP,OpenTime
HandleId Path ClientIp ClientPort OpenTime LastReconnectTime FileId ParentId SessionId
-------- ---- -------- ---------- -------- ----------------- ------ -------- ---------
28506980357 104.46.105.229 49805 2019-07-29 08:37:36Z 0 0 9297571480349046273
28506980537 dir1 104.46.105.229 49805 2019-07-30 09:28:48Z 10376363910205800448 0 9297571480349046273发布于 2019-10-22 14:43:22
经过快速研究和本地测试,我相信该命令返回的" path“就是您要查找的文件或目录路径。文件句柄不仅适用于文件,也适用于文件夹。这里的诀窍是文件的句柄并不总是保持不变。事实上,大多数应用程序在打开文件后立即释放文件句柄,如记事本。因此,当您运行该命令时,大多数情况下,您只能看到文件夹的句柄,而不是文件的句柄。
为了验证这一点,我使用以下代码进行了测试:
static void Main(string[] args)
{
string path = args[0];
var file=File.Open(path, FileMode.OpenOrCreate);
Console.WriteLine("Press any key to release the handle");
Console.ReadKey();
file.Close();
}当执行File.Open时,进程持有句柄,然后我运行Get-AzStorageFileHandle。将显示"test.csv“的句柄:

但是如果你用记事本打开文件,只会显示文件夹的句柄。
无论如何,您可以使用返回的"path“来确定哪个文件正在被其他人持有。
顺便说一下,handle.exe不适用于云环境。您不应该使用它。
https://stackoverflow.com/questions/58186835
复制相似问题