【问题标题】:powershell export-csv to force write if file is currently open如果文件当前打开,powershell export-csv 强制写入
【发布时间】:2013-12-02 18:12:53
【问题描述】:

我有一个成功的脚本,它从本地机器上进行一些数据分析并在最后导出一个 csv 文件。没有问题。

问题是,如果有人打开了该文件,同时脚本正在写入该文件(我有 -append 开关),则不会写入任何内容,因此我会丢失该特定计算机的数据。

任何想法如何强制写入文件,即使它已打开或正在使用?谢谢。

现有数组的功能导出:

$NewCSVObject | Export-CSV '<fullpath>\CleanupResults.csv' -noType -Append

【问题讨论】:

  • 我认为这个问题没有单一的答案。这在很大程度上取决于如何其他用户(程序)打开文件句柄。

标签: powershell


【解决方案1】:

您是否尝试过将该文件设置为只读?这将防止其他人对其进行机会主义锁定,并且您仍然可以使用 -Force 开关向其附加数据。

【讨论】:

  • 完美。我将文件标记为只读并使用导出命令应用 -Force 并在打开文件的情况下进行测试,但它仍然覆盖了文件。很好的解决方案。非常感谢mjolinor。感谢您的帮助。
【解决方案2】:

你真的不想那样做。如果另一个进程已经拥有对该文件的独占访问权限,只需选择另一个要写入的文件。

试图将数据硬塞进别人乱搞的文件是自找麻烦。例如,其他进程可能会将更改写入文件。因此,您的输入将被其他进程拥有的任何数据替换。

【讨论】:

  • 实际上系统写入/附加文件是唯一具有写入权限的文件。其他人都阅读过以复制或浏览数据。如果任何人打开文件,即使是只读的,也不会让进程附加文件。只允许我选择强制覆盖,因为这比查看数据和打开文件的任何人都重要。
【解决方案3】:

您可以在PSTools 的帮助下执行此操作,方法是在写入文件之前远程删除文件上的锁定。

如何使用 PSFile 命令关闭远程机器上的文件的示例:
PSFile.exe \\remotecomputername "C:\File.CSV" -c

您还可以在尝试写入文件之前测试文件锁并对其进行逻辑处理。 这个线程有一个很好的测试锁的例子。
How can I force a Powershell script to wait overwriting a file until another process is finished reading it?

【讨论】:

    猜你喜欢
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多