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 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)
Jor*_*mer 10
这个问题有一些非常复杂的答案!这是一个超级简单且不言自明的:
(Get-Item C:\somejunction).Target
Run Code Online (Sandbox Code Playgroud)
这可以减少工作量,甚至适用于远程服务器上的联结:
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)
您可以通过执行以下操作获取路径:
Get-ChildItem -Path C:\someJunction
Run Code Online (Sandbox Code Playgroud)
编辑以查找路径而不是文件夹的内容
Get-ChildItem -Path C:\someJunction
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10561 次 |
最近记录: |