操作系统:Windows Server 2016
如果我有一个文件夹 X,其中包含指向另一个文件夹 Y 的连接点(位于同一台机器和同一卷上)。那么,如果我通过网络共享 X,连接到 X 的远程用户是否会被重定向到 Y?
用例是文件夹位置/名称 Y 在执行计划任务后不时发生变化。但我希望远程用户始终使用相同的网络共享名称 (X)。我可以在执行任务期间更新连接点。
还有其他技术可以实现这一点吗?我使用以下方法取得了一些成功:我重新创建或更新名为 X 的网络共享并使其直接指向 Y。但这仅在 X 是顶级共享时才有效。
我正在寻找一种在以下情况下也能起作用的解决方案:让 X 成为 Y 的共享。然后,如果 Y 包含子文件夹 A,远程用户可以通过网络路径 X\A 访问它。但我还需要这样一种情况,即通过网络路径(例如 X\B),远程用户应该能够访问计算机上完全不同的路径。因此,我的想法是创建一个从 Y\B 到另一条路径的连接点。(远程用户将通过 X\B 访问)
是否可以?
答案1
是的,SMB 文件服务器将自动mklink /j
透明地跟随目录连接(),即使目标指向共享文件夹之外。(经过实验测试。)
另一方面,服务器不会跟踪符号链接 ( mklink /d
) – 它们留给客户端,默认情况下客户端也不会跟踪它们(如果您启用此选项,目标显然必须是另一个共享文件夹)。有关更多信息,请参阅 harrymc 的帖子。
作为第三个选项,您可以在 Windows Server 上创建共享作为DFS 命名空间,在该目录中,您可以同时拥有常规文件和特殊的“引用”目录,这些目录可能指向另一个共享 - 甚至在另一台服务器上。(这些引用始终在客户端遵循,并且它们被所有 Windows 版本、libsmbclient 甚至 Linux cifs.ko 识别。)
如果需要将文件夹 Y 移动到另一台机器,DFS 可能是首选选项。(它不需要 Active Directory,尽管跨所有文件服务器的通用身份验证确实使事情变得更容易。)
答案2
默认客户端 Windows 不允许符号链接链。
控制该行为的命令是 文件系统工具,文章中进一步记载 Fsutil 行为。
您正在寻找的特定行为名为SymlinkEvaluation
。您可以在命令提示符中输入命令 来查看其当前值
fsutil behavior query SymlinkEvaluation
。以下是我在 Windows 10 上的默认设置:
的行为代码分别SymlinkEvaluation
为
L2L
、L2R
、R2L
和R2R
,含义如下:
L
代表“本地”,R
代表“远程”- 第一个
L
或R
-前-2
指的是链接本身的位置(而不是其目标)相对于访问链接的机器。 - 第二个
L
或R
——后-2
指的是链接的位置相对于 LINK 本身所在机器的目标。
例如,设置SymlinkEvaluation R2L
意味着您可以控制对链接的访问:
- 位于远程机器上(
R
) - 指向同一台远程计算机上的目标(
L
)
因此可能性如下:
- 本地到本地的符号链接,
L2L:{0|1}
- 本地到远程的符号链接,
L2R:{0|1}
- 远程到本地的符号链接,
R2R:{0|1}
- 远程到远程符号链接,
R2L:{0|1}
在哪里0
代表禁用,1
代表启用。
您可能正在寻找的命令是:
fsutil behavior set SymlinkEvaluation R2L:1
请记住,这要在客户端上完成,而不是在服务器上完成。
答案3
2022 年 9 月:网络共享连接点似乎已停止工作。
https://learn.microsoft.com/en-us/sysinternals/downloads/junction
最后更新:2022 年 7 月 19 日
笔记
Windows 不支持远程共享上的目录连接。
过去,我在我的网络共享服务器上创建了连接点,指向不同的驱动器。一切正常。到目前为止,我已经有一段时间没用它了,但事情却出了问题。
- 在客户端,双击连接点图标没有任何反应——没有任何内容显示或变化。
- 在客户端,“属性”将连接点显示为一个文件夹,但其有 0 个字节和 0 个文件。
- 右键单击图标并选择“在新窗口中打开”没有任何反应。
- “映射网络驱动器”或直接进入 \server\share 均不起作用
在服务器端,执行以下操作没有帮助:
- 为连接目标设置新的共享。
- 重新开始,创建新连接点、新共享,重置“安全”选项卡
Windows 10 Pro 21H2 19044.1889 Windows 功能体验包 120.2212.4180.0
向伟大的微软致敬,因为它打破了另一项生产力功能。