Как передать параметры в Windows запланированное задание? - PullRequest
2 голосов
/ 09 июля 2020

Мне нужно передать параметры сценарию PowerShell, который запускается с использованием Windows запланированной задачи. Запланированная задача запускается из конвейера Azure с использованием команды cmd Start-ScheduledTask -TaskName "ExampleTask*"

Изображение запланированной задачи

Запланированная задача имеет сценарий PS, подобный этому:

param(
    [Parameter(Mandatory = $true)]
    $var
)

echo $var

И мне нужно динамически изменить $var из конвейера Azure DevOps. Есть ли способы сделать это?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Вы можете использовать Set-ScheduledTask для обновления существующей ScheduledTask с динамическими c переменными из Azure Pipeline task. См. Шаги ниже.

1, Создайте переменные в конвейере azure, измените тип переменной на секретный, если это учетные данные. См. Ниже: я создал Пользователь , Пароль , DynamicVariable в конвейере

enter image description here

2, Add a powershell task in your pipeline to update your existed ScheduledTask.

I set the Arguments in my scheduled task as this: -NoProfile -ExecutionPolicy Bypass -File "c:\test\scheduled.ps1" -var "$(DynamicVariable)"'

See below script in the Powershell task.

#update the Argument with variable defined in the pipeline $(DynamicVariable)
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument '-NoProfile -ExecutionPolicy Bypass -File "c:\test\scheduled.ps1" -var "$(DynamicVariable)"' 

#update the scheduled task
Set-ScheduledTask -Password "$(Password)" -User "$(User)" -TaskName "PipelineTask" -Action $Action

Start-ScheduledTask -TaskName "MyTask"

If you want to set the variable DynamicVariable dynamically in the pipeline. You can use команды ведения журнала "##vso[task.setvariable variable..]...

Добавьте еще одну задачу PowerShell перед указанной выше задачей PowerShell для выполнения следующих команд:

echo "##vso[task.setvariable variable=DynamicVariable]newValue"

0 голосов
/ 09 июля 2020

Настройте его так;

Программа / Скрипт: % SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe

Аргументы: - c "C: \ script.ps1 -var thevalue"

script.ps1:

    param(
        [Parameter(Mandatory = $true)]
        $var
    )
    
    [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [System.Windows.Forms.Messagebox]::Show("This is the Message text : " + $var)

Если в путь или аргументы, можно использовать любые из следующих вариантов кавычек:

-c "& 'c:\script.ps1'" -var 'the param'

-c "& ""c:\script.ps1""" -var 'the param'

Для кавычек в аргументах;

-c "& ""c:\script.ps1""" -var 'the x\"x''param'
-c "& ""c:\script.ps1""" -var 'the x"""x''param'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...