.TargetPath, похоже, не принимает переменные? - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь создать ярлык для папки, используя Powershell ISE, и, в отличие от всех найденных примеров, $Shortcut.TargetPath, похоже, не хочет назначать переменную или взаимодействовать с ней.

Я пытался использовать буквенные пути в кавычках ($Shortcut.TargetPath = "\\thisis\where\the\path\goes\"), которые, кажется, работают, однако, как только я использую переменную, она просто превращается в ноль ($Shortcut.TargetPath = $TargetDir).

Я пытался добавить его, я пытался сначала записать значение с кавычками, а затем перезаписать это значение, я попытался написать значение с кавычками, а затем добавить к этому значению, оно всегда превращается вnull.

$WScriptShell = New-Object -ComObject WScript.Shell

$TargetDir = "D:\Files\"
$SourceDir = "C:\Windows\"

$Shortcutid1 = $TargetDir + '.lnk'
$Shortcutid = $SourceDir + '.lnk'

$Shortcut = $WScriptShell.CreateShortcut($Shortcutid1)
$Shortcut.TargetPath = $TargetDir
$Shortcut.TargetPath
$TargetDir

$Shortcut1 = $WScriptShell.CreateShortcut($Shortcutid)
$Shortcut1.TargetPath = "C:\Windows\"
$Shortcut1.TargetPath

Теперь, что я ожидаю, произойдет так:

D:\Files\
D:\Files\
C:\Windows\

Вместо этого я получу вывод:

D:\Files\
C:\Windows\

Строка $Shortcut.TargetPath просто пустая, но не нулевая.

Я проверил ее с if([string]::IsNullOrEmpty($Shortcut.TargetPath)) {"empty"} else {"wat"}, и на выходе получилось wat, так что, как ни странно, там, по крайней мере, что-то есть?Изменить: версия Powershell является версия 5.1.17763.503

1 Ответ

0 голосов
/ 27 июня 2019

Решил это.Вам нужно также поставить кавычки вокруг переменной.Пример:

$WScriptShell = New-Object -ComObject WScript.Shell

$TargetDir = "D:\Files\"
$SourceDir = "C:\Windows\"

$Shortcutid1 = $TargetDir + '.lnk'
$Shortcutid = $SourceDir + '.lnk'

$Shortcut = $WScriptShell.CreateShortcut($Shortcutid1)

$Shortcut.TargetPath = "$TargetDir"

$Shortcut.TargetPath
$TargetDir

$Shortcut1 = $WScriptShell.CreateShortcut($Shortcutid)
$Shortcut1.TargetPath = "C:\Windows\"
$Shortcut1.TargetPath

Ожидаемый результат соответствует фактическому результату на этот раз.'' Очевидно, игнорирует переменные, если вы публикуете $ в своем коде.«» однако позволяет переменным быть распознанными.Если вы хотите добавить больше переменных, я бы рекомендовал объединить их заранее Пример:

$a = "$TargetDir" + "\yourfolder" $Shortcut.TargetPath = "$a"

Приводит к выходуиз:

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