Powershell создает ярлык - PullRequest
0 голосов
/ 12 июня 2018

У меня есть скрипт powershell, который не будет корректно обновлять $ TargetFile.Вот мой код:

$TargetFile = "C:\Users\wjschan\AppData\Roaming\DAS Toolbox\DAS Toolbox.exe"

$ShortcutFile = "$StartMenuPath\$ApplicationName.lnk"
$WScriptShell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
$NewTarget = $TargetFile
$Shortcut.TargetPath = $TargetFile
$Shortcut.IconLocation = $IconLocation
$Shortcut.Save()

Но когда я щелкаю правой кнопкой мыши по ярлыку, в качестве цели указывается «Этот компьютер».Однако, если я добавлю этот код, он будет работать нормально:

$ShortcutFile = "$StartMenuPath\$ApplicationName.lnk"
$WScriptShell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
$NewTarget = $TargetFile
$Shortcut.TargetPath = "C:\Users\wjschan\AppData\Roaming\DAS Toolbox\DAS Toolbox.exe"
$Shortcut.IconLocation = $IconLocation
$Shortcut.Save()

Я не понимаю, почему жесткое кодирование пути к файлу работает, а переменная - нет.Это работает раньше, если $ TargetFile указывает на другой путь (скажем, сетевой ресурс).

Win10, сборка 1607 (текущий бизнес-филиал) - и нет, я не могу получить более новую сборку.

1 Ответ

0 голосов
/ 12 июня 2018

Очевидно, ваш $TargetFile не относится к типу String.
Я подозреваю, что он относится к типу IO.FileInfo, поскольку вы, вероятно, динамически строите путь.
Чтобы выяснить, к какому типу объекта это относится в действительностипопробуйте: $TargetFile.PSTypeNames

Чтобы принудительно установить значение String, оберните его в кавычки, например:

$Shortcut.TargetPath = "$TargetFile"

Или используйте: $TargetFile.ToString() или [String]$TargetFile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...