посмотрите мою новую библиотеку Serialize.Linq . Он сериализует выражения linq для json, xml и двоичных файлов.
Попробуйте это:
function Test-ReparsePoint([string]$path) {
$file = Get-Item $path -Force -ea SilentlyContinue
return [bool]($file.Attributes -band [IO.FileAttributes]::ReparsePoint)
}
Это довольно минимальная реализация, но она должна сработать. Обратите внимание, что это не различает жесткую ссылку и символическую ссылку. Внизу они оба просто пользуются точками повторной обработки NTFS , IIRC .
Для тех, которые хотят проверить, является ли ресурс hardlink или символьной ссылкой:
(Get-Item ".\some_resource").LinkType -eq "HardLink"
(Get-Item ".\some_resource").LinkType -eq "SymbolicLink"
Мои результаты в Vista с использованием сценария PowerShell Кейта Хилла для тестирования символических и жестких ссылок:
c:\markus\other>mklink symlink.doc \temp\2006rsltns.doc
symbolic link created for symlink.doc <<===>> \temp\2006rsltns.doc
c:\markus\other>fsutil hardlink create HARDLINK.doc \temp\2006rsltns.doc
Hardlink created for c:\markus\other\HARDLINK.doc <<===>> c:\temp\2006rsltns.doc
c:\markus\other>dir
Volume in drive C has no label.
Volume Serial Number is C8BC-2EBD
Directory of c:\markus\other
02/12/2010 05:21 PM <DIR> .
02/12/2010 05:21 PM <DIR> ..
01/10/2006 06:12 PM 25,088 HARDLINK.doc
02/12/2010 05:21 PM <SYMLINK> symlink.doc [\temp\2006rsltns.doc]
2 File(s) 25,088 bytes
2 Dir(s) 6,805,803,008 bytes free
c:\markus\other>powershell \script\IsSymLink.ps1 HARDLINK.doc
False
c:\\markus\other>powershell \script\IsSymLink.ps1 symlink.doc
True
Он показывает, что символические ссылки являются точками повторной обработки и имеют установленный бит ReparsePoint FileAttribute, а жесткие ссылки - нет.