脚本开头

脚本开头

我正在尝试检索 Powershell 脚本中的 MDT 任务序列变量,然后在 Powershell 函数中使用该变量。我的问题在于,我想要检索的变量包含无法正确解析的 Powershell 变量。设置方式如下:

  1. 在 MDT 中,我使用“设置任务序列变量”任务,其名称为“TS-Destination”,值为“$($env:systemdrive)\dep”(不带引号)。

  2. 通过“运行 Powershell 脚本”任务添加 PowerShell 脚本,并以“%scriptroot%\Script.ps1”(不带引号)的形式运行,参数为“-Source 'Z:\someprogram'”(不带双引号)。在 Powershell 脚本中,我的问题所在部分如下:

脚本开头

[CmdletBinding()]
Param(

[Parameter(Mandatory=$True,Position=0)]
 [string]$Source,

[Parameter(Mandatory=$False)]
 [string]$Destination

)

$tsenv = New-Object -ComObject Microsoft.SMS.TSEnvironment

If ($Destination -eq "") {

$Destination = $tsenv.Value('TS-Destination')

}

Copy-Item $Source -Destination $Destination -Recurse

脚本结束

首先,我想说的是,如果我在脚本内部手动设置变量,脚本就会起作用,但我希望它能够根据用户的偏好(使用参数或 TS 变量的选择)轻松更改和灵活。

我认为它可以工作的原因是它会从“TS-Destination”变量中获取值并将其用于 $destination 变量(并解析它),但脚本运行时无法解析该变量。它收到一个错误,即名为“$($env”的驱动器不存在(这是 Copy-Item 的错误,因为变量没有解析)。似乎它在冒号后停止读取变量值,但我不知道为什么。

当排除故障并手动设置值时(通过使用 $tsenv.Value('TS-Destination') = "$($env:systemdrive)\dep" 然后使用该值并正确解析变量。我尝试了各种方法来转义字符并设置变量,但似乎没有任何效果。变量被定义为 [string] 参数这一事实是否会阻止这样的操作?

我需要这个值能够接受变量格式,因为该脚本正在任务序列的多个部分中使用,并且系统驱动器在部署过程中会发生变化。我可以在任务序列期间多次设置变量,但这会使任务序列变得比必要的更复杂,我希望复杂的部分在脚本内:)

所以主要问题是:

我怎样才能让它正常工作?

相关内容