.TargetPath似乎不接受变量?

时间:2019-06-27 08:43:43

标签: powershell powershell-ise

我正在尝试使用Powershell ISE为文件夹创建快捷方式,与我发现的所有示例相反,$Shortcut.TargetPath似乎不想分配变量或与之交互一个。

我试图在引号($Shortcut.TargetPath = "\\thisis\where\the\path\goes\")中使用原义的路径,这似乎有效,但是,一旦我使用了变量,它就会变成空($Shortcut.TargetPath = $TargetDir)

我尝试添加它,我尝试先用引号写一个值,然后覆盖该值,我尝试写有引号的值,然后添加到该值,它总是为空。

$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 :(得分:0)

解决了。您还需要在变量周围加上引号。示例:

$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