至少从 PowerShell v5.0 开始,对链接有了更好的支持(或者 MS 称之为:重新分析点)
改进的 Item cmdlet -LinkType财产
链接的文章位于 WMF 5.0 类别下,这可能意味着该方法自 PS v5.0 起可用。
这些功能包含在标准 Get-Item、Get-ChildItem 中,因此不需要额外的步骤。它可以在任何当前的 PS 上使用。
LinkType 是对象的 String 属性,由 Get-Item 和 Get-ChildItem 返回,
它可以具有以下四个值之一:''、'Junction'、'SymbolicLink'、'HardLink'。
要回答OP的问题,您可以使用以下命令检查文件夹是否是连接点:
if ((Get-Item -Path $Target -Force).LinkType -eq "Junction") { }
要检查文件/文件夹是否是任何类型的“ReparsePoint”(Junction、SymbolicLink 或 HardLink):
if ((Get-Item -Path $Target -Force).LinkType) { }
普通文件/文件夹上的 LinkType 值是一个空字符串,当用作ifPS 中的条件解析为 False
Get-ChildItem 可用于列出所有 Junction 文件夹:
(Get-ChildItem -Path $Target -Force) | Where-Object { $_.LinkType -eq "Junction" }
请注意,文件或文件夹的“SymbolicLink”值相同,因此仅列出文件夹的符号链接:
(Get-ChildItem -Path $Target -Directory -Force) | Where-Object { $_.LinkType -eq "SymbolicLink" }
Cmdlet Get-ChildItem(别名:dir、ls、gci)现在显示 ReparsePoint 属性,如下所示l
在模式列中,没有任何扩展名。但它不会显示“硬链接”并显示l
对于 Junction 和 SymbolicLink:
> Get-ChildItem -Path $Target -Force
Directory: C:\Users
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--hsl 2018-04-12 01:45 All Users
d-rh-- 2018-05-09 06:12 Default
d--hsl 2018-04-12 01:45 Default User
d----- 2018-06-24 03:05 Papo
d-r--- 2018-07-27 07:12 Public
- LinkType 不适用于 \Users 和 \Users\ 内具有特殊权限的文件夹,即使上面所示的 Get-ChildItem 确实有效并显示
l
在他们。
- 删除项目有问题。它无法删除 Junction,如果强制,将删除原始内容。据说这个问题将在未来版本 PS v6 中修复
使用这些改进的或当今的标准 Cmdlet 比以前的方法具有一些优势,如此处较旧的答案中所述。