hi在创建VM后,我运行了运行PowerShell脚本的Azure自定义脚本扩展名。因此,该脚本执行一些基本任务,例如创建共享创建一些文件并创建PowerShell脚本并将其存储在VM上。自定义VM扩展脚本的最后一步我尝试设置任务调度程序作业以调用上面创建的PowerShell脚本,并且该脚本应从扩展程序结束。
问题是扩展名被困在运行状态,永不停止。我编写了一个日志来找出脚本的进度,并表明它通过了整个脚本,但是它陷入了运行,并且任务调度程序脚本没有运行作业。
当我手动登录VM时,我会手动运行脚本,并且可以正常运行。因此,我不确定是什么原因导致它挂起的,以及它作为VM扩展名的运行方式。 以下代码是我尝试运行的任务调度程序,该任务调度程序在尝试通过自定义扩展程序进行设置时不起作用的VM自定义扩展程序,但可以通过VM手动设置精细。
。 $jobname = "MasterFileWatcher"
$script = "c:testMasterFileWatcher.ps1"
$repeat = (New-TimeSpan -Minutes 1)
$action = New-ScheduledTaskAction –Execute "$pshomepowershell.exe" -Argument "$script; quit"
$duration = ([timeSpan]::maxvalue)
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).Date -
RepetitionInterval $repeat -RepetitionDuration $duration
$msg = "Enter the username and password that will run the task";
$credential = $Host.UI.PromptForCredential("Task username and
password",$msg,"$env:userdomain$env:username",$env:userdomain)
$username = $credential.UserName
$password = $credential.GetNetworkCredential().Password
$username = "$env:userdomaintestuser"
$password = "testpass"
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd
Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -User $username -Password $password -Settings $settings
我发现了这个问题。
我必须将用户名设置为系统,以便任务调度程序可以作为当地系统帐户运行
Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -User "System" -Settings $settings