让PowerShell基于OS位创建快捷方式

时间:2016-12-09 16:56:29

标签: powershell

我想通过SCCM任务序列部署PowerShell脚本。作为其中的一部分,我需要从C:\Program Files x86\TESTapp\test.exe目录复制和重命名快捷方式。我已经完成了,但我刚刚获悉一些客户端是在32位操作系统上。

让PowerShell确定要采取的路径的最佳方法是什么,即:“Program Files(x86)”或“Program Files”

以下是我目前无法使用的内容:

Switch (Get-WmiObject Win32_OperatingSystem).OSArchitecture {
  "32-bit" {$PF = "Program Files"}
  "64-bit" {$PF = "Program Files x86"}
}

$TargetFile = "$env:C:\$PF\TESTapp\Test.exe"
$ShortcutFile = "$env:Public\Desktop\NewName-Test.lnk"
$WScriptShell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
$Shortcut.TargetPath = $TargetFile
$Shortcut.Save()

任何建议都将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个

Switch (Get-WmiObject Win32_OperatingSystem).OSArchitecture {
  "32-bit" {$PF = "$env:ProgramFiles"}
  "64-bit" {$PF = "$env:ProgramFiles(x86)"}
}
$TargetFile = "$PF\TESTapp\Test.exe"
If (Test-Path $TargetFile) {
    $ShortcutFile = "$env:Public\Desktop\NewName-Test.lnk"
    $WScriptShell = New-Object -ComObject WScript.Shell
    $Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
    $Shortcut.TargetPath = $TargetFile
    $Shortcut.Save()
}

答案 1 :(得分:0)

你的错误是 - 你忘记了切换表达式上的():

Switch ((Get-WmiObject Win32_OperatingSystem).OSArchitecture) {
  "32-bit" {$PF = "Program Files"}
  "64-bit" {$PF = "Program Files x86"}
}

$TargetFile = "C:\$PF\TESTapp\Test.exe"
$ShortcutFile = "$env:Public\Desktop\NewName-Test.lnk"
$WScriptShell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
$Shortcut.TargetPath = $TargetFile
$Shortcut.Save()