我可以创建所有用户都可以看到的全局PowerShell PSWorkflowJob作业吗?

时间:2016-11-13 03:02:32

标签: windows powershell scheduled-tasks

我想写一个PowerShell工作流,它将运行脚本,重新启动并继续执行它停止的地方。不是在用户登录时,而是在计算机重新启动时(非交互式)。

挑战在于它需要在本地运行。 Windows使这令人愤怒地困难。

到目前为止,我所做的是创建一个作为作业运行的工作流程(PSWorkflowJob)。

在工作流程的中间,它使用-wait开关

运行restart-computer

然后我创建一个在启动时运行的计划任务,恢复该工作流程

问题是任务无法在启动时运行,除非它们存储凭据或作为本地系统运行。我不想在此脚本中完全传递管理员信誉,因此我将该任务作为本地系统运行。

当计算机重新启动该任务时,它无法找到作业,因为该作业是由本地管理员创建的。

workflow Resume_Workflow
{

    PowerShell.exe -Noninteractive -ExecutionPolicy Bypass -File 'C:\somescript.ps1'

    Restart-Computer -Wait

    PowerShell.exe -Noninteractive -ExecutionPolicy Bypass -File 'C:\someotherscript.ps1'

}

$taskName = 'Continue_Workflow'
#Pass code directly to powershell.exe to avoid creating another .ps1 file
$PSCode = @'
-NoProfile -command "& powershell.exe {
Import-Module PSWorkflow;
Resume-Job -Name new_resume_workflow_job -Wait;
}"
'@

$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument $PSCode
$trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:00:30
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8
$principal = New-ScheduledTaskPrincipal -UserId SYSTEM `
    -LogonType ServiceAccount -RunLevel Highest

$definition = New-ScheduledTask -Action $action -Principal $principal `
    -Settings $settings -Description "Run $($taskName) at startup" `
    -Trigger $trigger

Register-ScheduledTask -TaskName $taskName -InputObject $definition

# Execute the workflow as a PS job (PSWorkflowJob)
Resume_Workflow -AsJob -JobName new_resume_workflow_job

0 个答案:

没有答案