我发现这是一个相当独特的问题。我用下面的脚本创建了一个web快捷方式:
$target = "http://internalwebsite/subsite"
$shortcut_lnk = "$publicDesktopusefulname.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:userspublicDesktopusefulname.lnk'
$sh = New-Object -ComObject WScript.Shell
$target = $sh.CreateShortcut($shortcut).TargetPath
但是,这不会返回任何数据。如果我只运行:
$sh.CreateShortcut($shortcut)
它返回:
FullName : C:userspublicDesktopusefulname.lnk
Arguments :
Description :
Hotkey :
IconLocation : https://internalwebsite/1.ico,0
RelativePath :
TargetPath :
WindowStyle : 1
WorkingDirectory :
我已经确认链接按预期工作。我现在的问题是-我如何得到实际的网络链接?如果我去链接的属性,我看到的目标类型是网站(http://internalwebsite/subsite)和目标是灰色的相同的信息。但是到目前为止,我的Google-fu在列出目标类型或解释为什么我不能拉出路径(或任何替代方法)方面没有产生任何结果。
如果有人能帮忙,我将不胜感激!
您需要以稍微不同的方式创建web快捷方式。根据TechNet论坛的帖子,文件名必须具有.url
而不是.lnk
的扩展名,并且必须显式调用对象的.Save()
方法。
Jeff Zeitlin,谢谢你,这就是我的答案!我最终不得不做更多的工作来为URL创建自定义图标(使用稍微不同的方法)。看起来我将不得不删除链接,并将其替换为URL。我正在使用以下脚本(其中一部分是我从不同的堆栈溢出问题窃取的):
$WshShell = New-Object -comObject WScript.Shell
$targetPath = "http://internalwebsite/subsite"
$iconLocation = "https://internalwebsite/1.ico"
$iconFile = "IconFile=" + $iconLocation
$path = "$publicDesktopusefulname.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
这使得以后针对该路径的脚本编写更加容易。非常感谢您的帮助!