SMA Workflows и Remoting, работа с переменными
SMA использует PowerShell Workflows, это накладывает некоторые ограничения, например при обращении к переменным или невозможность использования Invoke-Command. Для вызова команд недоступных в PowerShell Workflows можно использовать InlineScript. При этом все что “внутри” InlineScript выполняется “отдельно”, некое подобие sandbox’а.
Workflow Get-VMReplicaStatus
{
param(
[Paramater(mandatory=$true)]
$VMHost,
[Paramater(mandatory=$true)]
$VMName
)
InlineScript
{
Invoke-Command -ComputerName $USING:VMHost -ScriptBlock {Get-VMReplication -VMName $USING:VMName}
}
}
В данном случае переменная VMName не будет доступна в ScriptBlock’е, т.к. $USING:VMName используется для передачи переменной из PowerShell Workflow в InlineScript. Решением будет переобозначить переменную в InlineScript’е.
Workflow Get-VMReplicaStatus
{
param(
[Paramater(mandatory=$true)]
$VMHost,
[Paramater(mandatory=$true)]
$VMName
)
InlineScript
{
$VMName = $USING:VMName
Invoke-Command -ComputerName $USING:VMHost -ScriptBlock {param($VMName) Get-VMReplication -VMName $VMName} -ArgumentList $VMName
}
}
Однако, Best Practice - передавать переменные как аргументы для InlineScript.
Workflow Get-VMReplicaStatus
{
param(
[Paramater(mandatory=$true)]
$VMHost,
[Paramater(mandatory=$true)]
$VMName
)
InlineScript
{
Get-VMReplication $USING:VMName
} -PSComputerName $VMHost
}
Written on July 30, 2014