介绍:
我有一个脚本,它通过 UNC 路径将一些数据从本地服务器(服务器 A)复制到另一台服务器(服务器 B),服务器 B 中的共享是为每天更改的外部硬盘创建的,在更换外部硬盘后,使用 mountvol 命令安装新的硬盘,分配的字母是相同的,但您可能已经知道每个硬盘的卷名是不同的。
我遇到的问题(一步一步):
如果我在服务器 B 中打开资源管理器并转到 UNC 路径,这意味着在服务器 A 中有一个来自服务器 B 的我的(用户 X)的会话,在 cmd 中我使用另一个帐户(用户 Y)执行,例如:
dir \\path"
我看到了文件,所以此时有来自同一台计算机和不同用户的 2 个会话。
好奇心:用户 Y 的会话将一直保持,直到您在命令行中写入另一个命令,或者 cmd 窗口失去焦点 - 而不是在 dir 命令完成后立即关闭会话。
出于上述好奇心,在这种情况下,可以忽略用户 Y 的第二个会话,这样就只剩下服务器 A 中用户 X 的一个会话
我转到服务器 B,使用 mountvol 卸载 HDD(也可以在计算机管理中完成),交换 HDD,然后安装新的 HDD。
我回到服务器 A,在 cmd 窗口中使用任何帐户用户 X 或 Y 再次执行 DIR 命令,得到:
The system cannot find the file specified.
如果我转到打开的资源管理器窗口并刷新窗口,文件也不会出现。
- 我在网上发现,在服务器 B 中重新启动资源管理器进程后,共享文件再次可见,即删除服务器 A 中的会话(所有会话?),另一个技巧就是删除服务器 B 中的会话。
可能的解决方案--> 我需要你的帮助:)
由于脚本(批处理脚本)是自动的,并且我不想检查服务器 A 中是否有来自服务器 B 的挂起会话,因此我想强制关闭服务器 A 中给定共享的所有挂起会话,但我想从服务器 B 中的脚本中执行此操作,“net sess(ion(s))”用于本地目的。
如果您有任何其他建议,即另一种可能的解决方案,请告诉我。谢谢。
技术信息:
Server A: Windows Server 2008 R2 Enterprise SP1
Server B: Windows Server 2003 Enterprise SP2
注:如果我错了请纠正我,但我认为:
由于卷名不同,无法刷新资源管理器窗口中 UNC 路径的视图,卸载并重新安装(同一硬盘),刷新即可正常工作。这可能是安全功能吗?还是一个错误?还是我遗漏了什么?
运行 dir 以获取 unc 路径并检索文件列表后,应立即关闭会话,因为不再对其进行“处理”。
运行 unc 路径的目录后,会话保持打开状态,但是当您单击另一个窗口(cmd 窗口失去焦点)时,会话消失。
答案1
这是 PowerShell 如何远远优于某些本机批处理脚本工具的绝佳示例。您可以使用新-PSDrivecmdlet 映射服务器 B 上的驱动器。该驱动器将只保留在此特定的 PowerShell 会话中,因此如果您执行新脚本和/或 PowerShell 会话,驱动器映射将不再被缓存。您也可以直接删除驱动器,然后使用以下方法重新创建删除-PSDrive取决于您的使用情况。