Поскольку, по крайней мере, PowerShell v5.0, улучшена поддержка ссылок (или, как их называет MS: Reparse Points)
улучшенные командлеты элементов - 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 для обычного файла / папки представляет собой пустую строку, которая при использовании в качестве , если условие в PS преобразуется в 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" }
Командлет Get-ChildItem (псевдоним: dir, ls, gci) теперь отображает атрибут ReparsePoint как l
в столбце Mode без каких-либо расширений. Но он не будет отображать 'HardLink' и отображает 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
на них.
- Remove-Item имеет проблемы. Он не может удалить Junction, и если принудительно, удалит оригинальное содержимое с ним. Это, как говорят, будет исправлено в будущей версии PS v6
Использование этих улучшенных или сегодняшних стандартных командлетов имеет некоторые преимущества перед предыдущими методами, описанными в более старых ответах здесь.
Различает соединение и символическую связь
Если OP хотел проверить, является ли папка Junction, проверка по свойству Attribute приведет к ложному срабатыванию для папки Symbolic Link.
обнаруживает жесткую ссылку.
LinkType является [String] в отличие от свойства Attributes, которое имеет тип [FileAttributes] и нуждается в .ToString () или использовании -band