关于我正在尝试做什么以及为什么做的一些背景知识。我们正在慢慢地从最终用户Win7机器上的本地办公室副本迁移到通过RDS 2012的发布办公室。2012年,您可以让最终用户机器订阅webfeed,将快捷方式放在Appdata中的实际RDP文件中。为了让我们的图像在RDS之前完全镜像,我需要将快捷方式固定到任务栏。如果您将快捷方式固定为来自RDS网关服务器,则任务栏上的图标是.rdp文件的图标。如果编辑快捷方式的目标并将mstsc.exe放在.rdp文件的路径之前,则可以使用快捷方式的这些图标将快捷方式固定到任务栏。
我找到了关于如何更改快捷方式的目标字段的帖子,但没有找到关于如何添加当前内容的内容。需要一个环境变量,因为短路的路径对于每个用户是不同的。以下是我到目前为止尝试过的
$Word = $env:userprofile + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\RemoteApp and Desktop Connections\Microsoft Word 2010.lnk"
$sh = New-Object -COM WScript.Shell
$targetPath = $sh.CreateShortcut($Word).TargetPath
$sh.TargetPath = "mstsc.exe" + $targetPath ## Make changes
$sh.Save() ## Save$shell = New-Object -COM WScript.Shell
我得到的一个错误是:在这个对象上找不到属性'Arguments';确保它存在并且可以设置。
非常感谢任何帮助。
答案 0 :(得分:1)
而不是使用Shell COM对象,如何使用.Net包装类?有great sample。
要在Powershell中使用VBAccelerator的包装器,请提取源代码并编译这样的DLL,
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /out:ShellLink.dll /r:System.Drawing.dll .\ShellLink.cs .\FileIcon.cs
这应该创建ShellLink.dll,您可以像这样添加Powershell类型,
Add-Type -path .\ShellLink.dll
通过创建一个像这样的新对象来使用该类,
$lnk = new-object vbAccelerator.Components.Shell.ShellLink
$lnk.Target = "C:\Windows\System32\mstsc.exe"
$lnk.Arguments = "some arguments"
$lnk.Description = "My awesome shortcut"
$lnk.Save("c:\temp\test.lnk")
答案 1 :(得分:0)
如果您只是在## Make changes
行之前添加此行,您的代码会将“mstsc.exe”添加到当前目标路径:
$sh = $sh.CreateShortcut($word)
听起来你也想添加一个空格,这样你的lnk文件就是mstsc.exe
的“连接文件”参数。您可以将Arguments
属性设置为so:
function Set-RDSshortcut {
param( [parameter(mandatory=$true)]$Shortcut )
$sh = New-Object -COM WScript.Shell
$targetPath = $sh.CreateShortcut($Shortcut).TargetPath
$targetPath = "mstsc.exe"
$sh = $sh.CreateShortcut($Shortcut)
$sh.TargetPath = $targetPath
$sh.Arguments = $Shortcut
$sh.Save()
} #end function