Como recuperar uma variável de sequência de tarefas do MDT e usá-la corretamente dentro do Powershell

2

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:

  1. 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).

  2. 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á é:

Início do script

[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

Fim do script

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?

    
por rogergh 12.12.2014 / 13:14

0 respostas