none
DSC и Register-ScheduledJob RRS feed

  • Вопрос

  • Добрый день.

    Пытаюсь задействовать ресурс Script для управления ScheduledJob, но при тестировании получаю ошибку доступа, просьба подсказать варианты решения проблемы, в контексте DSC. Если аналогичные команды выполнить в консоли через RunAs, задача успешно создаётся.

    Register-ScheduledJob : Произошла ошибка "Отказано в доступе" при регистрации определения запланированного задания DSCT
    askJob. Попробуйте запустить Windows PowerShell с повышенными правами (как администратор).
    строка:1 знак:1
    + Register-ScheduledJob -Name DSCTaskJob -ScheduledJobOption $ScheduledJobOption - ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (Microsoft.Power...edJobDefinition:ScheduledJobDefinition) [Register-S
       cheduledJob], RuntimeException
        + FullyQualifiedErrorId : UnauthorizedAccessToRegisterScheduledJobDefinition,Microsoft.PowerShell.ScheduledJob.Reg
       isterScheduledJobCommand

    Сам скрипт:

        Script TaskJob {
    
            GetScript = Format-DscScriptBlock -Data $Data -ScriptBlock {
    
                @{
                    GetScript = $GetScript
                    SetScript = $SetScript
                    TestScript = $TestScript
                    Result = if (Get-ScheduledJob -Name DSCTaskJob -ErrorAction SilentlyContinue) { $Data.JobRegister } else { !$Data.JobRegister }
                 }
    
            }
    
            SetScript = Format-DscScriptBlock -Data $Data -ScriptBlock {
    
                param(
                    [bool]$JobRegister = $Data.JobRegister
                )
    
                if ($JobRegister = $True) {
    
                    $JobTrigger = New-JobTrigger $Data.JobTrigger
    
                    $ScheduledJobOption = New-ScheduledJobOption $Data.ScheduledJobOption
    
                    Register-ScheduledJob -Name DSCTaskJob -ScheduledJobOption $ScheduledJobOption -FilePath "${env:SystemDrive}\Temp\TaskJob\scripts\$Data.ScriptName.ps1" -Trigger $JobTrigger
    
                } else {
    
                    Unregister-ScheduledJob -Name DSCTaskJob -ErrorAction SilentlyContinue
    
                }
                             
            }
    
            TestScript = Format-DscScriptBlock -Data $Data -ScriptBlock {
            
                if (Get-ScheduledJob -Name DSCTaskJob -ErrorAction SilentlyContinue) { $Data.JobRegister } else { !$Data.JobRegister }
    
            }
    
            DependsOn = "[File]id_rsa.ppk","[File]script"
    
        }

     

Ответы

Все ответы

  • 1) Format-DscScriptBlock  - что за функция?

    2)  if ($JobRegister = $True) - В PowerShell нет такого оператора сравнения, есть -eq

    3) "${env:SystemDrive}\Temp\TaskJob\scripts\$Data.ScriptName.ps1" - Динамические переменные не поддерживаются

    4)  param( [bool]$JobRegister = $Data.JobRegister ) блок SetScript это строка и как Вы собрались передавать параметры, вопрос.

    Да и ресурс для работы с ScheduledJob уже есть - https://github.com/guitarrapc/DSCResources/tree/master/Custom/GraniResource/DSCResources/Grani_ScheduleTask

    https://github.com/PowerShellOrg/StackExchangeResources/tree/master/DSCResources/StackExchange_ScheduledTask
    • Изменено KazunEditor 2 июня 2016 г. 9:46
    • Помечено в качестве ответа Zeratyl 3 июня 2016 г. 10:48
    Отвечающий
  • 1-3-4. Format-DscScriptBlock как раз форматирует ScriptBlock с нужными мне переменными из хеш таблицы

    2. Согласен, моя не внимательность.

    За ссылки спасибо, посмотрю. Предпочитаю использовать ресурсы с http://www.powershellgallery.com

    2 июня 2016 г. 10:03
  • Format-DscScriptBlock - где код функции?
    2 июня 2016 г. 10:15
    Отвечающий
  • К данной проблеме он не имеет отношения

    function Format-DscScriptBlock() {
    
        param(
            [parameter(Mandatory=$True)]
            [System.Collections.Hashtable] $Data,
            [parameter(Mandatory=$True)]
            [System.Management.Automation.ScriptBlock] $ScriptBlock
        )
    
        $Result = $ScriptBlock.ToString()
    
        foreach( $Key in $Data.Keys ) {
    
            $Result = $Result.Replace("`$Data.$Key", $Data[$Key])
    
        }
    
        return $Result
    
    }

    2 июня 2016 г. 10:35
  • Приведите $Data содержимое для теста. И правильно ли я понимаю, что задача должна выполняться под System, а не с переданными учетными данными для Register-ScheduledJob -Credential?

    Register-ScheduledJob: Проблема с регистрацией задания от System

    Для теста проверить создание через -  SCHTASKS /Create /RU "SYSTEM".

    • Изменено KazunEditor 2 июня 2016 г. 12:10
    2 июня 2016 г. 10:49
    Отвечающий
  •     $Data = @{
            JobRegister = "`$True"
            ScriptName = "mow-as-v1"
            JobTrigger = "–Daily –At 22:00 –RandomDelay 00:30:00"
            ScheduledJobOption = "-RequireNetwork"  
        }

    Да, от system, с переданными параметрами Credential задача создаётся успешно.

    2 июня 2016 г. 12:16
  •     $Data = @{
            JobRegister = "`$True"
            ScriptName = "mow-as-v1"
            JobTrigger = "–Daily –At 22:00 –RandomDelay 00:30:00"
            ScheduledJobOption = "-RequireNetwork"  
        }

    Да, от system, с переданными параметрами Credential задача создаётся успешно.

    Для теста проверить создание через -  SCHTASKS /Create /RU "SYSTEM".


    2 июня 2016 г. 12:30
    Отвечающий
  • От обычного пользователя "Отказано в доступе", при runAs "Успешно". Попробую разобраться в коде DSC ресурса, там заявлено создание от учётной записи system. возможно что-то не учитываю.
    2 июня 2016 г. 14:00
  • В ресурсах они решают, через использования модуля ScheduledTasks вместо PSScheduledJob.

    New-JobTrigger заменить на New-ScheduledTaskTrigger
    New-ScheduledJobOption заменить на New-ScheduledTaskSettingsSet
    Register-ScheduledJob заменить на Register-ScheduledTask


    • Изменено KazunEditor 2 июня 2016 г. 14:16
    • Помечено в качестве ответа Zeratyl 3 июня 2016 г. 10:48
    2 июня 2016 г. 14:12
    Отвечающий
  • Переписал под Register-ScheduledTask и успешно отработало.
    3 июня 2016 г. 10:47