Estou tentando recuperar uma variável de sequência de tarefas MDT dentro de um script Powershell e, em seguida, usar essa variável em uma função Powershell. Meu problema é que a variável que eu quero recuperar contém uma variável Powershell que não será resolvida corretamente. É assim que é configurado:
No MDT eu uso a variável "Set Task Sequence Variable" com o nome "TS-Destination" e o valor "$ ($ env: systemdrive) \ dep" (sem as aspas).
Um script do PowerShell é adicionado através da tarefa "Executar o Powershell Script" e é executado como "% scriptroot% \ Script.ps1" (sem aspas) com os argumentos "-Source 'Z: \ someprogram'" (sem cota dupla). No script do Powershell, a parte em que meu problema está é:
[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
Primeiro, gostaria de dizer que o script funciona se eu definir a variável manualmente dentro do script, mas gostaria que fosse facilmente modificável e flexível, dependendo da preferência do usuário (a escolha de usar um parâmetro ou variável TS).
Como imaginei que isso funcionaria é obter o valor da variável "TS-Destination" e usá-lo na variável $ destination (e resolvê-lo), mas quando o script é executado ele não consegue resolver o problema. variável. Obtém um erro que uma unidade com o nome '$ ($ env' não existe (que é um erro do Copy-Item porque a variável não resolveu). Parece que ele pára de ler o valor da variável após os dois pontos, mas Eu não consigo descobrir o porquê.
Ao solucionar problemas e definir o valor manualmente (usando $ tsenv.Value ('TS-Destination')="$ ($ env: systemdrive) \ dep" e, em seguida, usando isso funciona e resolve a variável corretamente. tentou vários métodos para escapar de caracteres e definir a variável, mas nada parece funcionar.O fato de a variável ser definida como um parâmetro [string] impede que algo assim funcione?
Eu preciso desse valor para poder aceitar o formato variável, porque o script está sendo usado em várias partes da sequência de tarefas e a unidade do sistema é alterada durante o processo de implantação. Eu poderia definir a variável várias vezes durante a sequência de tarefas, mas isso complicaria a sequência de tarefas mais do que o necessário, e gostaria que as partes complicadas estivessem no script:)
Então a questão principal é:
Como faço para que isso funcione corretamente?