блок сценариев powershell расширяется для отладки - PullRequest
0 голосов
/ 30 октября 2019

Как я могу развернуть все переменные в $scriptblock, не выписывая вручную все переменные:

Мне нравится делать это так:

>>$scriptBlock = {Install-Package -Name $($Using:h.Name) \
>>  -RequiredVersion $($Using:h.Version) \
>>  -Source $Using:nuget_source -Force -SkipDependencies}
>>write-host ("install-command: {0}" -f $scriptBlock)

install-command: Install-Package -Name $($Using:h.Name) \
  -RequiredVersion $($Using:h.Version) -Source $Using:nuget_source \
  -Force -SkipDependencies

Но я должен это сделатьвот так, что усложнит автоматизацию:

>>write-host ("install-command: Install-Package -Name {0} -RequiredVersion {1} -Source {2} -Force -SkipDependencies" \
>>  -f $h.Name, $h.Version, $nuget_source)

install-command: Install-Package -Name Selenium.WebDriver.IEDriver \
  -RequiredVersion 3.150.1 -Source https://nuget.org/api/v2/ -Force -SkipDependencies

Ответ в переменной раскрытия powershell в блоке скриптов не помогает, потому что это уже блок скриптов:

>> [Scriptblock]$sb = [ScriptBlock]::Create($testScriptBlock)
>> $sb
Install-Package -Name $($Using:h.Name) -RequiredVersion \ 
   $($Using:h.Version) -Source $Using:nuget_source -Force -SkipDependencies

1 Ответ

1 голос
/ 30 октября 2019

$Using: доступно только в сеансах ( Об использовании ). Возможно, вы можете преобразовать блок скриптов в строку и заменить $Using: на $ и развернуть его .

write-host ("install-command: {0}" -f $ExecutionContext.InvokeCommand.ExpandString($scriptBlock.ToString().Replace('$Using:', '$')) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...