用于解析联结目标路径的powershell

ash*_*ash 22 powershell symlink junction

在PowerShell中,我需要解析联结的目标路径(符号链接).

例如,假设我有一个c:\someJunction目标是的交叉点c:\temp\target

我试过各种变化$junc = Get-Item c:\someJunction,但只能得到c:\someJunction

在本例中c:\temp\target,如何找到给定连接点的目标路径?

Ste*_*kiy 31

New-Item,Remove-Item和Get-ChildItem已得到增强,可支持创建和管理符号链接.New-Item的-ItemType参数接受新值SymbolicLink.现在,您可以通过运行New-Item cmdlet在一行中创建符号链接.

Windows PowerShell v5中的新增功能

我已经检查了我的Windows 7机器上的符号链接支持,它运行正常.

PS> New-Item -Type SymbolicLink -Target C:\ -Name TestSymlink


    Directory: C:\Users\skokhanovskiy\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l       06.09.2016     18:27                TestSymlink
Run Code Online (Sandbox Code Playgroud)

获取符号链接的目标就像创建它一样简单.

> Get-Item .\TestSymlink | Select-Object -ExpandProperty Target
C:\
Run Code Online (Sandbox Code Playgroud)

  • @AndrewSavinykh完整路径对我来说很好。速记->(获取项C:\ somejunction)。目标-> C:\ temp \ target \ (3认同)

Jor*_*mer 10

这个问题有一些非常复杂的答案!这是一个超级简单且不言自明的:

(Get-Item C:\somejunction).Target
Run Code Online (Sandbox Code Playgroud)


Dav*_*osh 7

这可以减少工作量,甚至适用于远程服务器上的联结:

fsutil reparsepoint query "M:\Junc"
Run Code Online (Sandbox Code Playgroud)

如果您只想要目标名称:

fsutil reparsepoint query "M:\Junc" | where-object { $_ -imatch 'Print Name:' } | foreach-object { $_ -replace 'Print Name\:\s*','' }
Run Code Online (Sandbox Code Playgroud)

所以

fsutil reparsepoint query "M:\Junc"
Run Code Online (Sandbox Code Playgroud)

另外,下面的代码是对 Josh 上面提供的代码的轻微修改。\\?\它可以放入可多次读取的文件中,并且在网络驱动器的情况下可以正确处理前导:

fsutil reparsepoint query "M:\Junc" | where-object { $_ -imatch 'Print Name:' } | foreach-object { $_ -replace 'Print Name\:\s*','' }
Run Code Online (Sandbox Code Playgroud)

给定上面的函数Get_UNCPath,我们可以对函数进行Get_JunctionTarget如下改进:

function Get_JunctionTarget($p_path)
{
    fsutil reparsepoint query $p_path | where-object { $_ -imatch 'Print Name:' } | foreach-object { $_ -replace 'Print Name\:\s*','' }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*osh 5

您可以通过执行以下操作获取路径:

Get-ChildItem -Path C:\someJunction
Run Code Online (Sandbox Code Playgroud)

编辑以查找路径而不是文件夹的内容

Get-ChildItem -Path C:\someJunction
Run Code Online (Sandbox Code Playgroud)