2016-12-22 40 views
0

我有一个蓝色的虚拟机规模与此extensionProfile的部署模板:PowerShell脚本无法执行注册-ScheduledJob作为Azure的资源管理器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

你的意思是,当你在'注册-ScheduledJob'指定'-Credential'和部署ARM模板,然后你会得到一个错误:“用户名/密码无效”?你是如何获得Credential的'$ credential'的? –

+0

'$ adminPasswordSecure =的ConvertTo-SecureString的$ ADMINPASSWORD -AsPlainText -Force $证书=新物体System.Management.Automation。PSCredential($ adminUsername,$ adminPasswordSecure)' – Maarten

+0

我使用我之前评论中的代码创建我的凭证对象,$ customUsername和$ adminPassword从customScriptExtension传递。 – Maarten

回答

0

根据你的描述,我可以重现您通过使用Register-ScheduledJob遇到的错误。

从官方文档大约Register-ScheduledJob

-Credential

指定有权运行计划任务的用户帐户。默认值是当前用户。

我认为这个问题可能是由运行这个计划任务的用户帐户投入的。经过一些试验后,它可以像我预期的那样工作,并且可以使用ARM模板将预定作业注册到我的Azure虚拟机。这是核心命令,你可以参考它。

$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'。 我是否需要指定完整的用户名,因为脚本是由来自不同域的用户执行的?如果是这样,我该如何要求?我正在部署一个虚拟机缩放集,每个虚拟机将具有不同的名称 – Maarten

+0

我已经检查过官方的[教程](https://msdn.microsoft.com/en-us/powershell/reference/5.1/psscheduledjob/register-在远程计算机上创建计划作业的排定作业#例4-创建计划作业 - 在远程计算机上)。在我使用参数“-Authentication CredSSP”指定'Register-ScheduledJob'后,可以成功注册预定作业。对于adminUsername,我已经测试了单个用户名和与计算机名称相结合的用户名。你可以在你身边测试它。 –

-2

我花了几个小时同样的问题,并没有想要提供脚本的用户名/密码信息和其他解决方案失败。此行的PowerScript终于摸索(执行批处理命令YourCommand):

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

你需要有,如果你想拥有vmextension注册它,它登录为LocalSystem帐户。

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

Stackoverflow link of this issue I had