如何获取网络快捷方式 lnk 文件的目标?
How do I get the target of a web shortcut lnk file?
我发现这是一个相当独特的问题。我使用以下脚本创建了一个网络快捷方式:
$target = "http://internalwebsite/subsite"
$shortcut_lnk = "$publicDesktop\usefulname.lnk"
$wscriptshell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($Shortcut_lnk)
$Shortcut.TargetPath = $Target
$ShortCut.IconLocation = "https://internalwebsite/1.ico, 0";
$Shortcut.Save()
不幸的是,目标是 http 而不是 HTTPS。我想检测任何具有不安全版本的快捷方式并将其替换为安全版本。
我找到了下面的代码,应该给我需要的信息:
$shortcut = 'C:\users\public\Desktop\usefulname.lnk'
$sh = New-Object -ComObject WScript.Shell
$target = $sh.CreateShortcut($shortcut).TargetPath
不过,这个returns没有数据。如果我只是 运行:
$sh.CreateShortcut($shortcut)
它returns:
FullName : C:\users\public\Desktop\usefulname.lnk
Arguments :
Description :
Hotkey :
IconLocation : https://internalwebsite/1.ico,0
RelativePath :
TargetPath :
WindowStyle : 1
WorkingDirectory :
我已确认 link 按预期工作。我现在的问题 - 如何获得实际的网络 link?如果我转到 link 的属性,我会看到目标类型是网站 (http://internalwebsite/subsite),并且目标显示为灰色,信息相同。但到目前为止,我的 Google-fu 在列出目标类型或解释为什么我无法拉出路径(或任何替代方法)方面没有产生任何结果。
如果有人能提供帮助,我将不胜感激!
您需要以稍微不同的方式创建网络快捷方式。根据 this TechNet forum posting,文件名 必须 具有 .url
而不是 .lnk
的扩展名,并且您 必须 显式调用对象的.Save()
方法
Jeff Zeitlin, thank you, that ended up being the answer for me! I ended up having to do a little more looking to create a custom icon for a URL (uses a slightly different method). Looks like I'm going to have to remove the link and replace it with a URL. I'm using the following script (part of which I pilfered from ):
$WshShell = New-Object -comObject WScript.Shell
$targetPath = "http://internalwebsite/subsite"
$iconLocation = "https://internalwebsite/1.ico"
$iconFile = "IconFile=" + $iconLocation
$path = "$publicDesktop\usefulname.url"
$Shortcut = $WshShell.CreateShortcut($path)
$Shortcut.TargetPath = $targetPath
$Shortcut.Save()
Add-Content $path "HotKey=0"
Add-Content $path "$iconfile"
Add-Content $path "IconIndex=0"
然后,如果我想找出有关文件的信息,我可以使用:
get-content $path
这使得以后针对该路径编写任何脚本变得更加容易。非常感谢您的帮助!
我发现这是一个相当独特的问题。我使用以下脚本创建了一个网络快捷方式:
$target = "http://internalwebsite/subsite"
$shortcut_lnk = "$publicDesktop\usefulname.lnk"
$wscriptshell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($Shortcut_lnk)
$Shortcut.TargetPath = $Target
$ShortCut.IconLocation = "https://internalwebsite/1.ico, 0";
$Shortcut.Save()
不幸的是,目标是 http 而不是 HTTPS。我想检测任何具有不安全版本的快捷方式并将其替换为安全版本。
我找到了下面的代码,应该给我需要的信息:
$shortcut = 'C:\users\public\Desktop\usefulname.lnk'
$sh = New-Object -ComObject WScript.Shell
$target = $sh.CreateShortcut($shortcut).TargetPath
不过,这个returns没有数据。如果我只是 运行:
$sh.CreateShortcut($shortcut)
它returns:
FullName : C:\users\public\Desktop\usefulname.lnk
Arguments :
Description :
Hotkey :
IconLocation : https://internalwebsite/1.ico,0
RelativePath :
TargetPath :
WindowStyle : 1
WorkingDirectory :
我已确认 link 按预期工作。我现在的问题 - 如何获得实际的网络 link?如果我转到 link 的属性,我会看到目标类型是网站 (http://internalwebsite/subsite),并且目标显示为灰色,信息相同。但到目前为止,我的 Google-fu 在列出目标类型或解释为什么我无法拉出路径(或任何替代方法)方面没有产生任何结果。
如果有人能提供帮助,我将不胜感激!
您需要以稍微不同的方式创建网络快捷方式。根据 this TechNet forum posting,文件名 必须 具有 .url
而不是 .lnk
的扩展名,并且您 必须 显式调用对象的.Save()
方法
Jeff Zeitlin, thank you, that ended up being the answer for me! I ended up having to do a little more looking to create a custom icon for a URL (uses a slightly different method). Looks like I'm going to have to remove the link and replace it with a URL. I'm using the following script (part of which I pilfered from
$WshShell = New-Object -comObject WScript.Shell
$targetPath = "http://internalwebsite/subsite"
$iconLocation = "https://internalwebsite/1.ico"
$iconFile = "IconFile=" + $iconLocation
$path = "$publicDesktop\usefulname.url"
$Shortcut = $WshShell.CreateShortcut($path)
$Shortcut.TargetPath = $targetPath
$Shortcut.Save()
Add-Content $path "HotKey=0"
Add-Content $path "$iconfile"
Add-Content $path "IconIndex=0"
然后,如果我想找出有关文件的信息,我可以使用:
get-content $path
这使得以后针对该路径编写任何脚本变得更加容易。非常感谢您的帮助!