Powershell - 检查文件是否正在使用

4

是否有PowerShell命令可以检查文件是否被其他用户使用?如果没有,编写一个能够检查的脚本需要什么条件?


可能是重复问题: https://dev59.com/WXNA5IYBdhLWcg3wcddk - mikemaccana
可能是PowerShell脚本检查锁定文件的应用程序?的重复。 - mikemaccana
3个回答

6

你永远无法确定一个文件是否正在被使用,只能知道它最近被使用过。原因是脚本返回的瞬间,之前使用该文件的程序可能已经关闭了该文件。编写这样的脚本只会导致不稳定的行为。

更好的方法是,假设文件未被使用并执行脚本要做的事情,并捕获由于使用冲突而导致的异常。最终结果将是一个更简单和可靠的程序。


4
有时候你想知道哪个进程打开了这个文件,这样你就可以在错误处理中报告。这能使调试为什么某些脚本在深夜失败变得更加容易一些。 - Keith Hill

4

我不知道是否存在内置命令,但是有几个工具可以用于此:

net file

来自Technet上的SysInternalspsfilehandle):

psfile.exe # lists and allows you to close remotely opened files

handle.exe | select-string ': File'

1
我发现使用SysInternals的"ListDlls.exe"非常容易和方便:
c:\SysInternals\Listdlls.exe -d AssemblyInUse.dll

ListDLLs v3.1 - List loaded DLLs
Copyright (C) 1997-2011 Mark Russinovich
Sysinternals - www.sysinternals.com

----------------------------------------------------------------------------
powershell.exe pid: 7296
Command line: "C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe"

我希望这有所帮助!


这不仅适用于DLL文件吗?我的问题是关于任意文件的。 - derekerdmann
你是正确的 Derek,这个处理dll文件非常有用,当我想知道是否可以导入powershell模块时。如果你想检查任何文件,我相信你可以使用自己的函数在powershell中适应这个C#逻辑:https://dev59.com/XnNA5IYBdhLWcg3wpvtg此外,如果你想进一步访问锁定的文件,也可以尝试解锁它: http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx - Brandon Hawbaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接