2016-12-22 74 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