0

我已经从 azure 存储帐户文件共享中获得了打开的文件句柄,但是这些信息似乎很难理解是什么进程启动了它或这个文件句柄在哪个文件上。

获取文件句柄https://docs.microsoft.com/en-us/powershell/module/az.storage/get-azstoragefilehandle?view=azps-2.7.0

https://github.com/Azure/azure-powershell/blob/master/src/Storage/Storage.Management/help/Get-AzStorageFileHandle.md#example-1-list-all-file-handles-on-a-文件共享-递归-排序-按-clientip-and-opentime

如何使用此列表中的 handleid 或 sessionid 获取更多信息?

我在 azure docs 和 Internet 上搜索了很多,但没有这方面的信息。

示例脚本和响应:

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
4

1 回答 1

0

经过快速研究和本地测试,我相信命令返回的“路径”是您要查找的文件或目录路径。文件句柄不仅适用于文件,也适用于文件夹。这里的诀窍是文件的句柄并不总是被持有。事实上,大多数应用程序一打开文件就释放文件句柄,比如记事本。因此,当您运行该命令时,大多数情况下,您只能看到文件夹的句柄,而不是文件的句柄。

为了验证这一点,我使用以下代码进行了测试:

        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”的句柄:

在此处输入图像描述

但是如果你用记事本打开文件,只会显示文件夹句柄。

无论如何,您可以使用返回的“路径”来确定其他人正在持有哪个文件。

顺便说一句,handle.exe 不适用于云环境。你不应该使用它。

于 2019-10-22T06:43:22.053 回答