Назад | Перейти на главную страницу

Как получить переменную последовательности задач MDT и правильно использовать ее внутри Powershell

Я пытаюсь получить переменную последовательности задач MDT внутри сценария Powershell, а затем использовать эту переменную в функции 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", а затем с помощью этого работает и правильно разрешает переменную. Я пробовал различные методы для экранирования символов и установки переменной, но, похоже, ничего не работает.Помешает ли то, что переменная определена как параметр [строка], что-то подобное работать?

Мне нужно это значение, чтобы иметь возможность принимать переменный формат, потому что сценарий используется в нескольких частях последовательности задач, а системный диск изменяется в процессе развертывания. Я мог бы установить переменную несколько раз во время последовательности задач, но это усложнило бы последовательность задач больше, чем необходимо, и я бы хотел, чтобы сложные части были внутри сценария :)

Итак, главный вопрос:

Как мне заставить это работать правильно?