2016-12-22 3 views
0

У меня есть шаблон развертывания лазурной масштаба виртуальной машины с этим extensionProfile:Powershell скрипт не может выполнить регистровой ScheduledJob как Azure Resource Manager CustomScriptExtension

"extensionProfile": { 
    "extensions": [ 
     { 
     "name": "customScript", 
     "location": "[resourceGroup().location]", 
     "properties": { 
      "publisher": "Microsoft.Compute", 
      "type": "CustomScriptExtension", 
      "settings": { 
      "fileUris": [ 
       "[concat(parameters('customInstallScriptLocation'), parameters('customInstallScriptFileName'))]" 
      ] 
      }, 
      "typeHandlerVersion": "1.8", 
      "autoUpgradeMinorVersion": true, 
      "protectedSettings": { 
      "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File \"', parameters('customInstallScriptFileName'), '\" -adminUsername ', parameters('adminUsername'), ' -adminPassword ', parameters('adminPassword'))]" 
      } 
     } 
     } 
    ] 
    } 

При развертывании vmss пользовательский скрипт выполняется, такие команды, как Invoke-WebRequest и Start-Process, без проблем. Но Register-ScheduledJob не работает. Когда я подключаюсь к удаленному рабочему столу и запускаю этот скрипт установки вручную, все работает правильно.

Это код, который терпит неудачу, когда не работает вручную:

$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:45 
Register-ScheduledJob -Trigger $trigger -FilePath $installDir\natPuncherStartupScript.ps1 -Name NPSSOnStartup >> $log 
logAndClearErrors $true 

Ошибка:

Register-ScheduledJob : An error occurred while registering scheduled jobdefinition NPSSOnInstall to the Windows Task Scheduler. The Task Scheduler error is: (32,4):UserId:. 

Я также попытался:

$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:45 
Register-ScheduledJob -Credential $credential -Trigger $trigger -FilePath $installDir\natPuncherStartupScript.ps1 -Name NPSSOnStartup >> $log 
logAndClearErrors $true 

Но теперь показывает ошибки что имя пользователя/пароль неверно. Также при запуске этого вручную с удаленного рабочего стола это работает отлично.

Что мне не хватает? Почему я не могу назначить работу из таможни?

+0

Вы это означает, что, когда вы указываете '' -Credential' в регистровой ScheduledJob' и развернуть шаблон ARM, то вы получите сообщение об ошибке: «имя пользователя/пароль недействителен»? Как вы получили «$ credential» для Credential? –

+0

'$ adminPasswordSecure = ConvertTo-SecureString $ adminPassword -AsPlainText -Force $ credential = New-Object System.Management.Automation.PSCredential ($ adminUsername, $ adminPasswordSecure) ' – Maarten

+0

Я использую код из моего предыдущего комментария для создания моего объекта учетных данных, $ adminUsername и $ adminPassword передаются из customScriptExtension. – Maarten

ответ

0

Согласно вашему описанию, я смог воспроизвести ошибки, с которыми вы столкнулись, используя Register-ScheduledJob.

Из официального документа о Register-ScheduledJob.

-Credential

Задает учетную запись пользователя, который имеет разрешение на запуск запланированного задания. По умолчанию используется текущий пользователь.

Я предположил, что эта проблема, возможно, вызвана учетной записью пользователя, которая запускает это запланированное задание. После некоторых испытаний он мог работать как ожидается на моей стороне, и запланированное задание могло быть зарегистрировано на моей Azure VM с использованием шаблона ARM. Вот основная команда, вы можете сослаться на нее.

$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:45 
$pwd= ConvertTo-SecureString “{your-vm-adminPwd}” -AsPlainText -Force 
$credential = New-Object System.Management.Automation.PSCredential (“{your-vm-adminName}”, $pwd) 
Register-ScheduledJob -Trigger $trigger -FilePath $installDir\start1.ps1 -Name bruceScheduledJob -Credential $credential -Authentication CredSSP 
+0

Спасибо за ваш ответ. С вашим кодом он по-прежнему не работает с customScriptExtension. Я использовал имя vm adminUsername и пароль как учетные данные, но без имени домена или имени пользователя. Когда мой скрипт установки вызывается customScriptExtension, команда 'whoami' возвращает' nt authority \ system', с удаленного рабочего стола возвращается 'myDomain \ MyAdminUsername'. Нужно ли указать полное имя пользователя, потому что скрипт выполняется пользователем из другого домена? И если да, то как я могу его запросить? Я развертываю виртуальный машинный шкале, и у каждого vm будет другое имя. – Maarten

+0

Я проверил официальный [учебник] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/psscheduledjob/register- schedulejob # example-4-create-schedule-jobs-on-remote-computers) о создании запланированного ввода на удаленном компьютере. После того, как я определил «Register-ScheduledJob» с параметром «-Authentication CredSSP», тогда запланированная запись может быть успешно зарегистрирована. Для adminUsername я проверил как одно имя пользователя, так и имя пользователя в сочетании с именем компьютера. Вы можете проверить это на вашей стороне. –

-2

Я провел ЧАСЫ с той же проблемой, и не хотел, чтобы предоставить информацию пользователя/пароля в сценарии и другие решения не удалось. Эта линия PowerScript наконец работал (исполняет партию команда YourCommand):

&schtasks /create /tn YourTaskName /sc onstart /tr YourCommand /NP /DELAY 0001:00 /RU SYSTEM 
0

Вы должны иметь это войти в систему как LocalSystem учетной записи, если вы хотите иметь vmextension зарегистрировать его.

Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -User "System" -Settings $settings 

Stackoverflow link of this issue I had