YuS_2
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору farag Цитата: Ну, тогда просто необходимо начать разбор структуры того, что подается командлету на вход... Цитата: New-ScheduledTaskAction Краткий обзор Creates a scheduled task action. Описание The New-ScheduledTaskAction cmdlet creates an object that contains the definition of a scheduled task action. A scheduled task action represents a command that a task executes when Task Scheduler runs the task. You can use a task action definition to register a new scheduled task or update an existing task registration. A task can have a single action or a maximum of 32 actions. When you specify multiple actions, Task Scheduler executes the actions sequentially. The Task Scheduler service controls tasks activation, and it hosts the tasks that it starts. Параметры -Argument <String> Specifies arguments for the command-line operation. | то бишь: 1. создает действие, а не действия 2. в качестве аргумента должна подаваться строка с одной командой, а не строка с массивом команд (хотя тут, скорее, всё зависит от запускаемой программы, т.е. вполне возможно, что в качестве аргумента можно подавать и набор команд). Далее: Цитата: Register-ScheduledTask Краткий обзор Registers a scheduled task definition on a local computer. Описание The Register-ScheduledTask cmdlet registers a scheduled task definition on a local computer. You can register a task to run any of the following application or file types: Win32 applications, Win16 applications, OS/2 applications, MS-DOS applications, batch files (*.bat), command files (*.cmd), or any properly registered file type. Параметры -Action <CimInstance[]> Specifies an array of one or more work items for the task to run. If you specify multiple actions, the computer runs them in order. You can specify up to 32 actions. | то бишь: 1. Регистрирует задачу в планировщике 2. В качестве действия в одной задаче может содержаться до 32 объектов с командами, причем их тип CimInstance (что создает, как раз, New-ScheduledTaskAction) Выводы: Нам надо либо создать пакетный batch-файл со списком команд и подавать его в качестве единственной команды (что, имхо, непрактично, ибо привлекать cmd из powershell - неспортивно), либо создать массив одиночных действий. Ну или доводить "до ума" ту задачу с запуском powershell.exe c автономной строкой со списком команд win32, т.е. приводить в соответствие все кавычки в сочетании с параметрами запускаемых приложений win32, так чтобы те кавычки при запуске были на месте и не съедались бы ни powershell.exe, ни командлетами при передаче тех параметров на запуск... В общем, например, если переписать тот код в соответствии с документацией, без особых заморочек с кавычками, то получилось бы это: Код: $arr = @( "-c ""&{regsvr32.exe /u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenuShim64.dll""}""", "-c ""&{regsvr32.exe /u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu64.dll""}""", "-c ""&{regsvr32.exe /u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu.dll""}""", "-c ""&{start-sleep -seconds 10}""" ) $action = for ($i=0;$i -lt $arr.length;$i++){ New-ScheduledTaskAction -Execute powershell.exe -argument $arr[$i] } $trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am $settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable $principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest $params = @{ TaskName = "2C" Action = $action Trigger = $trigger Settings = $settings Principal = $principal } Register-ScheduledTask @params -Force | Но, учитывая, что: Цитата: task to run any of the following application or file types: Win32 applications, Win16 applications, OS/2 applications, MS-DOS applications, batch files (*.bat), command files (*.cmd), or any properly registered file type. | поэтому, я бы не стал дергать на каждое действие новый экземпляр powershell, а сделал бы проще: Код: $arr = @( "/u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenuShim64.dll""", "/u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu64.dll""", "/u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu.dll""" ) $action = for ($i=0;$i -lt $arr.length;$i++){ New-ScheduledTaskAction -Execute regsvr32.exe -argument $arr[$i] } $action += New-ScheduledTaskAction -execute powershell.exe -argument "-command 'start-sleep -seconds 10'" $trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am $settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable $principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest $params = @{ TaskName = "2C" Action = $action Trigger = $trigger Settings = $settings Principal = $principal } Register-ScheduledTask @params -Force | как-то так... Проверить не на чем, Acrobat DC у меня отсутствует... Добавлено: Что-то тут пришла мысля... а ведь, если мы подаем в командлет создания действия автономную строку, состоящую из нескольких строк, то при передаче в планировщик, вся эта строка вытянется в одну, т.е. блок команд у нас должен стать однострочником, поэтому команды необходимо разделять так, как если бы они были записаны в одну строку мысля оказалась неверной и по итогам последующего эксперимента, выход скрипта получился таким: Код: $action = New-ScheduledTaskAction -Execute powershell.exe -Argument @" -command "&{ regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenuShim64.dll" regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu64.dll" regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu.dll" start-sleep -seconds 10 }" "@ $trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am $settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable $principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest $params = @{ TaskName = "2C" Action = $action Trigger = $trigger Settings = $settings Principal = $principal } Register-ScheduledTask @params -Force | Попробуйте и этот вариант... | Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:10 19-08-2019 | Исправлено: YuS_2, 10:11 20-08-2019 |
|