首页 > 解决方案 > 在带有预览窗格的 WindowsExplorer 中选择的文件会锁定文件,因此 powershell 无法输出到该文件

问题描述

我有一个预定的脚本,它将一堆具有静态名称的 HTML 文件输出到远程位置。我注意到,如果我在 Windows 资源管理器中选择了其中一个文件以便其内容显示在预览窗格中,则 Powershell 无法覆盖该文件并跳过更新它。仅当输出文件位于远程位置时才会发生这种情况。如果文件是本地的,就可以正常工作。在这种情况下,如何强制 PowerShell 覆盖远程文件?许多用户使用这些报告,如果其中一个用户在脚本运行时离开 Windows 资源管理器窗口,其中一个文件在一夜之间突出显示,则该文件将不会被更新。

标签: powershellwindows-explorerlocked-filespreview-pane

解决方案


  • 将 HTML 文件移动到网络服务器。你将彻底解决你的问题。Windows 服务器上的 IIS 设置是Next, Next, Next. 您可以在旧位置留下指向新文件位置 (https://....) 的链接,以便用户可以轻松导航到新位置。可能这个链接可以自动化(由于现代安全标准不确定)
  • [System.IO.File]::Delete($path)在写入此文件之前尝试。这会从文件系统中删除文件条目,但对于那些现在打开文件的人来说,文件是打开的。这会使您的脚本写入具有相同名称的新文件。旧文件没有名称存在(已删除),但在每个人都关闭它之前保持打开状态。用 resresh 检查它是否真的被删除了!
  • [System.IO.File]::Move($path, $someTrashFullName)在写入此文件之前尝试。$someTrashFullName 可能必须在同一个驱动器上。与 相同Delete,但重命名文件。一些自我更新软件使用这种策略。文件已重命名,但仍以新名称保持打开状态。
  • 尝试用某个文件的快捷方式替换文件。您可以生成具有不同名称的文件并以编程方式更改快捷方式
  • 使用 js 更改位置的HTML 文件?他们读取附近的 JSON(由导出脚本生成)并在那里查找新文件名。因此,用户打开静态未更改的 A.html、JS 在 A.json 中查找新名称并将用户重定向到 A-2020-08-11.html。我不确定浏览器是否允许从 JS 中读取从网络驱动器打开的文件的 JSON 文件。
  • 剩下的唯一方法是停止网络共享或\并关闭服务器端打开的文件。
  • 完全禁用此文件夹中的预览可能会很有趣?

推荐阅读