将mstsc添加到快捷方式目标powershell

时间:2013-12-26 18:44:45

标签: powershell target shortcut

关于我正在尝试做什么以及为什么做的一些背景知识。我们正在慢慢地从最终用户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';确保它存在并且可以设置。

非常感谢任何帮助。

2 个答案:

答案 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