Я пытаюсь получить переменную последовательности задач MDT внутри сценария Powershell, а затем использовать эту переменную в функции Powershell. Моя проблема заключается в том, что переменная, которую я хочу получить, содержит переменную Powershell, которая не будет разрешена должным образом. Вот как это настроено:
В MDT я использую задачу «Установить переменную последовательности задач» с именем «TS-Destination» и значением «$ ($ env: systemdrive) \ dep» (без кавычек).
Сценарий 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", а затем с помощью этого работает и правильно разрешает переменную. Я пробовал различные методы для экранирования символов и установки переменной, но, похоже, ничего не работает.Помешает ли то, что переменная определена как параметр [строка], что-то подобное работать?
Мне нужно это значение, чтобы иметь возможность принимать переменный формат, потому что сценарий используется в нескольких частях последовательности задач, а системный диск изменяется в процессе развертывания. Я мог бы установить переменную несколько раз во время последовательности задач, но это усложнило бы последовательность задач больше, чем необходимо, и я бы хотел, чтобы сложные части были внутри сценария :)
Итак, главный вопрос:
Как мне заставить это работать правильно?