- Вопрос или проблема
- Ранее принятый ответ обернутый в код времени:
- Принятый ответ PS7 с разными результатами за секунду: https://superuser.com/a/1652788/68111
- В PowerShell
- Ответ или решение
- 1. Использование командной строки (CMD)
- Разбор команды:
- 2. Использование PowerShell
- Разбор команды:
- 3. Использование специальных утилит
- 4. Примечания
- Заключение
Вопрос или проблема
Есть ли способ увидеть список всех активных символических ссылок на компьютере с Windows?
Я принял ответ @JoachimOtahal, так как он работает в пределах одной секунды, и, думаю, он предоставил то, что мне нужно было, когда был задан вопрос.
Ранее принятый ответ обернутый в код времени:
C:\Windows\System32> cmd /E /C "prompt $T$$ & echo.%TIME%$ & dir /AL /S C:\ | find "SYMLINK" & for %Z in (.) do rem/ "
22:01:17.00$
06/05/2021 08:26 AM <SYMLINKD> Все пользователи [C:\ProgramData]
06/14/2021 04:57 PM <SYMLINK> DEFAULTUSER_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\DEFAULT]
06/14/2021 04:57 PM <SYMLINK> SAM_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SAM]
06/14/2021 04:57 PM <SYMLINK> SECURITY_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SECURITY]
06/14/2021 04:57 PM <SYMLINK> SOFTWARE_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SOFTWARE]
06/14/2021 04:57 PM <SYMLINK> SYSTEM_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SYSTEM]
06/14/2021 04:57 PM <SYMLINK> DEFAULTUSER_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\DEFAULT]
06/14/2021 04:57 PM <SYMLINK> SAM_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SAM]
06/14/2021 04:57 PM <SYMLINK> SECURITY_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SECURITY]
06/14/2021 04:57 PM <SYMLINK> SOFTWARE_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SOFTWARE]
06/14/2021 04:57 PM <SYMLINK> SYSTEM_BASE [C:\ProgramData\Microsoft\Windows\Containers\BaseImages\40caa4df-ced5-4c45-99a3-7e2bc561dafb\BaseLayer\Files\Windows\System32\Config\SYSTEM]
05/22/2021 09:02 AM <SYMLINKD> Загрузки [E:\Downloads\]
22:01:38.69$ rem/
Принятый ответ PS7 с разными результатами за секунду: https://superuser.com/a/1652788/68111
$_.Linktype пропускает символические ссылки. $_.Attributes пропускает жесткие ссылки. Джунгли перечислены в обоих свойствах. -Force необходим, иначе скрытые символические ссылки будут пропущены.
Полный рабочий пример, который получает символические ссылки, джунгли и жесткие ссылки:
Get-ChildItem -Path "C:\Windows\","c:\","$env:USERPROFILE" -Force |
Where-Object { $_.LinkType -ne $null -or $_.Attributes -match "ReparsePoint" } |
ft FullName,Length,Attributes,Linktype,Target
Вывод выглядит так – в моем случае я создал джунгль, чтобы показать, как это должно выглядеть. Заметьте: у PS все еще есть ошибка, не показывающая цель символических ссылок, проверьте эту информацию: https://stackoverflow.com/questions/16926127/powershell-to-resolve-junction-target-path
PS D:\> Get-ChildItem -Path "C:\Windows\","c:\","$env:USERPROFILE" -Force |
Where-Object { $_.LinkType -ne $null -or $_.Attributes -match "ReparsePoint" } |
ft FullName,Length,Attributes,Linktype,Target
FullName Length Attributes LinkType Target
-------- ------ ---------- -------- ------
C:\Windows\bfsvc.exe 79360 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-b..vironment-servicing_31bf3856ad364e35_10.0.17763.1518_no...
C:\Windows\DfsrAdmin.exe 232960 Archive HardLink {C:\Windows\WinSxS\msil_dfsradmin_31bf3856ad364e35_10.0.17763.529_none_86a482ce47ce0e6b\DfsrAdmin.exe...
C:\Windows\explorer.exe 4389168 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-explorer_31bf3856ad364e35_10.0.17763.1911_none_9f01b4994bb...
C:\Windows\HelpPane.exe 1072128 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-help-client_31bf3856ad364e35_10.0.17763.1911_none_b9659da9...
C:\Windows\hh.exe 18432 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-htmlhelp_31bf3856ad364e35_10.0.17763.1697_none_15caed9d569...
C:\Windows\mib.bin 43131 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-snmp-mgmt-api_31bf3856ad364e35_10.0.17763.1_none_dc5249570...
C:\Windows\notepad.exe 254464 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-notepad_31bf3856ad364e35_10.0.17763.1697_none_bc8f846641e0...
C:\Windows\regedit.exe 357888 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-registry-editor_31bf3856ad364e35_10.0.17763.1697_none_41a3...
C:\Windows\splwow64.exe 133632 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-printing-spooler-core_31bf3856ad364e35_10.0.17763.1697_non...
C:\Windows\twain_32.dll 64512 Archive HardLink {C:\Windows\WinSxS\wow64_microsoft-windows-w..ion-twaincomponents_31bf3856ad364e35_10.0.17763.1_none_...
C:\Windows\WindowsShell.Manifest 670 ReadOnly, Hidden, Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-shell32_31bf3856ad364e35_10.0.17763.1_none_5cef14c36a2559b...
C:\Windows\winhlp32.exe 11776 Archive HardLink {C:\Windows\WinSxS\wow64_microsoft-windows-winhstb_31bf3856ad364e35_10.0.17763.1_none_2420a29095f0ffc...
C:\Windows\WMSysPr9.prx 316640 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-mediaplayer-wmvsdk_31bf3856ad364e35_10.0.17763.1_none_96f1...
C:\Windows\write.exe 11264 Archive HardLink {C:\Windows\WinSxS\amd64_microsoft-windows-write_31bf3856ad364e35_10.0.17763.1_none_5048bc153541494b\...
C:\BackupPlatte Directory, ReparsePoint Junction {Volume{6072e7bc-2cae-11e9-b57a-bc5ff4e5c991}\}
C:\Dokumente und Einstellungen Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Programme Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Anwendungsdaten Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Cookies Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Druckumgebung Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Eigene Dateien Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Lokale Einstellungen Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Netzwerkumgebung Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Recent Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\SendTo Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Startmenü Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Administrator\Vorlagen Hidden, System, Directory, ReparsePoint, NotContentIndexed
Простой мод для углубления в то, что я искал (-and $_.Length -eq 1
) Только PowerShell 7 +:
PS > Get-ChildItem -Path "C:\Windows\","c:\","$env:USERPROFILE" -Force |
Where-Object { $_.LinkType -ne $null -or $_.Attributes -match "ReparsePoint" -and $_.Length -eq 1 } |
ft FullName,Attributes,Linktype,Target
FullName Attributes LinkType Target
-------- ---------- -------- ------
C:\Documents and Settings Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\Application Data Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\Cookies Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\Downloads Directory, ReparsePoint SymbolicLink {E:\Downloads\}
C:\Users\Louis\iCloudDrive ReadOnly, Directory, Archive, ReparsePoint {}
C:\Users\Louis\Local Settings Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\My Documents Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\NetHood Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\PrintHood Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\Recent Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\SendTo Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\Start Menu Hidden, System, Directory, ReparsePoint, NotContentIndexed
C:\Users\Louis\Templates Hidden, System, Directory, ReparsePoint, NotContentIndexed
Попробуйте следующую команду:
dir /AL /S C:\
/A
отображает все файлы с определенным атрибутом, аL
указывает на точки повторного анализа (символические ссылки и джунгли)/S
делает команду рекурсивной- замените
C:\
на букву диска, который вы хотите просканировать, или на путь, если вы не хотите сканировать весь диск
В PowerShell
Get-ChildItem -Path C:\ -Force -Recurse -ErrorAction 'silentlycontinue' |
Where { $_.Attributes -match "ReparsePoint"}
-Force
включает скрытые и системные файлы-Recurse
получает все дочерние элементы-ErrorAction 'silentlycontinue'
подавляет ошибки Доступ к пути XYZ запрещенWhere { $_.Attributes -match "ReparsePoint"}
проверяет папки и файлы, является ли это джунглем
Объяснение Режима и Атрибутов†:
PS > Get-ChildItem | SELECT Mode,Attributes -Unique
Mode Attributes
---- ----------
d---- Directory
d---s System, Directory
d---- Directory, NotContentIndexed
d---- Directory, Compressed
la--- Archive
-a--- Archive
lar-- ReadOnly, Archive
-a--- Archive, Compressed
Существует также удобная программа для этого под названием NTFSLinksView.
Редактировать: есть также SageLinks, эта также проверяет действительность.
Я знаю, что этот ответ запоздал, но вот, возможно, что-то ближе к тому, что вы, вероятно, искали:
dir /AL /S C:\ | find "SYMLINK"
В Windows файлы НЕ могут содержать символ < или > в имени файла, и поэтому никакой файл не может включать "<SYMLINKD>"
в имени файла. Правильный способ искать только символические ссылки – указать "<SYMLINKD>"
в опции поиска.
dir /AL /S C:\ | find "<SYMLINKD>"
То же самое касается джунглей:
dir /AL /S C:\ | find "<JUNCTION>"
Даже когда я ищу как символические ссылки, так и джунгли, я все равно рекомендую использовать find с просто “<“, чтобы избежать отображения сводок.
dir /AL /S C:\ | find "<"
Опция /B (dir /AL /B C:\
) также может исключить сводку, но это также удаляет адрес точки повторного анализа.
Простой и удобный Windows-приложение, которое мгновенно показывает символические ссылки и их тип:
https://github.com/raspopov/SageLinks
Только что заметил, что это также упоминается выше.
Ответ или решение
На системах Windows менеджмент ярлыков, включая символические ссылки, может быть выполнен с помощью различных инструментов и команд. Символические ссылки (симлинки) позволяют создать указатель на другой файл или каталог, что является удобным способом управления файлами и папками в файловой системе. Если вы хотите просмотреть список всех активных символических ссылок на Windows-машине, ниже представлены несколько методов для выполнения этой задачи.
1. Использование командной строки (CMD)
Вы можете использовать различные команды, включая dir
, чтобы просмотреть символические ссылки. Пример команды:
dir /AL /S C:\
Разбор команды:
/A
: показывает файлы с заданным атрибутом.L
: указывает на отображение репарсных точек (символьных ссылок и связывающих точек)./S
: делает команду рекурсивной, чтобы искать в подкаталогах.
Эта команда вернет все символические ссылки на указанном диске или в конкретной директории.
Если вам нужно фильтровать результаты, вы также можете использовать find
:
dir /AL /S C:\ | find "<SYMLINK>"
<SYMLINK>
будет извлекать только символические ссылки, а не другие пункты, такие как жесткие ссылки или джанкции.
2. Использование PowerShell
PowerShell предоставляет более мощный и гибкий способ для управления файловой системой. Например, следующая команда отображает все репарсные точки, включая символические ссылки:
Get-ChildItem -Path C:\ -Force -Recurse -ErrorAction 'silentlycontinue' |
Where-Object { $_.Attributes -match "ReparsePoint" }
Разбор команды:
-Force
: включает скрытые и системные файлы.-Recurse
: обходит все дочерние элементы.-ErrorAction 'silentlycontinue'
: подавляет ошибки доступа.
3. Использование специальных утилит
Существуют сторонние приложения, которые могут помочь вам с управлением символическими ссылками. Например:
- NTFSLinksView — свободная утилита от NirSoft, которая отображает символические ссылки в системе.
- SageLinks — еще одна программа, которая проверяет целостность ссылок.
4. Примечания
При работе с командной строкой и PowerShell обратите внимание на наличие прав администратора, особенно при доступе к системным директориям (например, C:\Windows
). Это может потребовать дополнительных прав для полного доступа ко всем путям.
Также стоит учитывать, что символические ссылки могут не быть видны на основе настроек системы, поэтому использование параметров, показывающих скрытые и системные файлы, будет полезным.
Заключение
Управление символическими ссылками на Windows может осуществляться различными способами с помощью встроенных инструментов и сторонних программ. Вам следует выбирать тот метод, который наиболее соответствует вашим потребностям. Если вы ищете более визуальное представление, то сторонние утилиты могут оказаться полезными.
Использование вышеуказанных команд позволит вам быстро и эффективно получить информацию о символических ссылках в вашей системе.