Преобразовать строковую переменную в функцию - PullRequest
0 голосов
/ 26 марта 2020

Я разделил шаги моего скрипта установки на разные функции. Я хочу когда-нибудь остановить сценарий. Если я перезапущу скрипт, он должен продолжить последний шаг, на котором я остановился. Итак, я записал последний шаг в Tempfile. Если я запускаю скрипт, он читает последний зарегистрированный шаг временных файлов и перезапускает этот шаг при перезапуске.

Function Step1 {
Set-Content -Path $TEMPFILE -value "Step1" #"Setting current step" into a temp file

do first stuff #part in th function. e.g. copy files, add access rights...

Step2 #calling the next function
}

Function Step2 {
Set-Content -Path $TEMPFILE -value "Step2"

do second stuff 

Step3...  
}

...Step 25

При запуске скрипт проверяет, существует ли Tempfile, и добавляет последний шаг в переменную [String].

Есть ли способ получить эту строковую переменную в последовательность «Перейти к функции»? как: ...

If ($GETSTEP){
   Write-Host "Continuing with $GETSTEP"
   $GOTO = ${function:GETSTEP}
   &GOTO
   }else{
   Write-Host "GET STARTET"
   Step1
   }

PowerShell версия 5.1.14393.3471 ...

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Это создаст функцию getstep:

$function:getstep = [scriptblock]::Create($GETSTEP)
1 голос
/ 26 марта 2020

Если предположить, что $GETSTEP содержит скрипт в виде строки:

if($GETSTEP){
  # Use ScriptBlock.Create() to create a scriptblock from a string
  $scriptBlock = [scriptblock]::Create($GETSTEP)
  &$scriptBlock
}

Если $GETSTEP содержит имя функции, которую нужно выполнить, то это намного проще - используйте оператор вызова (&) для вызова функции:

if($GETSTEP){
    & $GETSTEP
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...