【问题标题】:Powershell - Check if file is in usePowershell - 检查文件是否正在使用中
【发布时间】:2013-08-09 05:15:06
【问题描述】:

是否有 Powershell 命令来检查文件是否正在被其他用户使用?如果没有,写一个可以的脚本需要什么?

【问题讨论】:

标签: scripting powershell


【解决方案1】:

您永远无法判断文件当前是否正在被使用,而只是它最近被使用过。原因是脚本返回文件的那一刻可能会被以前使用它的任何程序关闭。像这样编写脚本只会导致不稳定的行为。

更好的方法是在文件未使用时执行脚本将要执行的任何操作,并捕获因使用冲突导致的异常。最终结果将是一个更简单、更可靠的程序。

【讨论】:

  • 是的,但有时您想知道哪个进程打开了文件,以便在错误处理中报告。这可以使调试某些脚本在半夜失败的原因变得更容易一些。
【解决方案2】:

据我所知,没有内置命令,但您可以使用多种工具:

net file

来自 Technet 上的 SysInternalspsfilehandle):

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

handle.exe | select-string ': File'

【讨论】:

    【解决方案3】:

    我发现使用 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 的吗?我的问题是关于任意文件。
    • 你说得对,Derek,它处理 dll 文件,这在我想知道是否可以导入 powershell 模块时很有用。如果你想检查任何文件,我相信你可以在 powershell 中使用你自己的函数调整这个 C# 逻辑:stackoverflow.com/questions/876473/… 另外,如果你想更进一步并获得对锁定文件的访问权限,你也可以尝试解锁它: msdn.microsoft.com/en-us/library/system.io.filestream.aspx
    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多