【发布时间】:2016-05-11 18:55:31
【问题描述】:
我需要在指向另一台服务器的快捷链接中获取“目标”。
但是……当我使用-Recurse 时,它会跟随链接,而不是简单地获取快捷方式目标。
这是我在网上找到的代码,我为达到我的目的而对其进行了编辑。但它会进入链接并尝试在另一台服务器中查找快捷方式:
#Created By Scott
$varLogFile = "E:\Server\GetBriefsTargets.log"
$varCSVFile = "E:\Server\GetBriefsTargets.csv"
function Get-StartMenuShortcuts
{
$Shortcuts = Get-ChildItem -Recurse "F:\Connect" -Include *.lnk
#$Shortcuts = Get-ChildItem -Recurse "D:\Scripts\scott_testing" -Include *.lnk
$Shell = New-Object -ComObject WScript.Shell
foreach ($Shortcut in $Shortcuts)
{
$Properties = @{
ShortcutName = $Shortcut.Name;
ShortcutFull = $Shortcut.FullName;
ShortcutPath = $shortcut.DirectoryName
Target = $Shell.CreateShortcut($Shortcut).targetpath
}
New-Object PSObject -Property $Properties
}
[Runtime.InteropServices.Marshal]::ReleaseComObject($Shell) | Out-Null
}
$Output = Get-StartMenuShortcuts
$Output
ECHO "$Output" >> $varLogFile
ECHO "$Output" >> $varCSVFile
有人可以就我可以更改的内容提供建议,以便它仍然可以找到所有文件夹中的所有快捷方式链接吗?并停止进入这些链接?
即:
F:\Connect\CLIENTA\shortcut.lnk
F:\Connect\CLIENTB\shortcut.lnk
等等
我必须获取大约 100 个客户的链接,而我不想手动(每个月)进行。
这是我在尝试运行此脚本时遇到的错误:
Get-ChildItem : 指定的路径、文件名或两者都太长。完全
限定文件名必须少于 260 个字符,并且目录名必须
少于 248 个字符。
在 D:\Scripts\scott_testing\GetShortcutTarget_edit1.ps1:8 char:18
+ $Shortcuts = Get-ChildItem -Recurse "F:\Connect" -包括 *.lnk
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
+ CategoryInfo : ReadError: (F:\Connect\CLIENTA\briefs\FILENAME:String) [Get-ChildItem], PathTooLongException
+ FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
它正在链接“内部”并试图在另一台服务器上查找快捷方式。
【问题讨论】:
-
你确定它不仅仅是在“connect”中找到一个包含 248 个以上字符的路径的本地目录。
get-childitem在我运行时不会自行进入递归搜索的链接。 -
Get-ChildItem -Recurse不遵循快捷方式。你在说什么? -
脚本转到:F:\Connect\CLIENTA\briefs.lnk
-
您发布的代码不可能做到这一点。
briefs.lnk真的是捷径吗?快捷方式的所有父文件夹都是常规目录(没有符号链接/连接)吗? -
是的,就像我列出的那样:F:\Connect\CLIENTA\briefs.lnk
标签: powershell shortcut