2010-08-26 28 views

回答

4

您永远无法知道文件当前是否仅用于最近正在使用的文件。原因是脚本返回文件的时刻可能会被以前使用它的任何程序关闭。像这样写脚本只会导致片状行为。

一个好得多的方法是,只要文件没有被使用并且捕获由于使用冲突导致的异常就执行脚本将要执行的任何操作。最终的结果将是一个更简单,更可靠的计划。

+3

是的,但有时您想知道哪个进程已打开该文件,以便您可以在错误处理中报告该进程。这可以使调试为什么某些脚本在半夜失败更容易一些。 – 2010-08-26 17:34:48

4

没有一个内置的命令,我所知道的但有你可以使用这个几个工具:

net file 

SysInternals Technet上(psfilehandle):

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" 

我希望帮助!

+0

是不是只适用于DLL?我的问题是关于任意文件。 – derekerdmann 2013-08-08 21:12:18

+0

你是对的Derek,它处理的是当我想知道我是否可以导入PowerShell模块的时候有用的dll文件。如果你想检查任何文件,我相信你可以在你自己的函数中使用PowerShell中的这个C#逻辑: http://stackoverflow.com/questions/876473/is-there-a-way-to-check如果您想进一步访问锁定的文件,您可以尝试解锁它: http://msdn.microsoft.com/en-us /library/system.io.filestream.aspx – 2013-08-30 15:37:54

相关问题