首页 > 解决方案 > PowerShell 工作流在通过任务计划程序中的计划作业运行时自行挂起

问题描述

我使用 PSworkflow 创建了一个脚本,该脚本从 13 个 VCenter 收集 VM/license/network/mpp 等详细信息,并在 csv 文件中输出所有详细信息。当我在正常的 ps 会话(用户交互会话)中手动运行该脚本时,该脚本运行良好,但是当触发任务调度程序计划时,提交的 PSworkflow 作业会自行暂停,并且不会给出关于暂停 PSWF 作业的原因的错误。

这是它在任务调度程序中的配置方式。- 创建了一个启动 powershell 脚本的批处理文件。下面是命令powershell.exe -Command "& 'XXX\YYY.ps1'" 1>"ZZZ\PPP_log_%date:~-10,2%%date:~-7,2%%date:~-4, 4%.txt" 2>&1 - 在任务计划程序操作中,提到此批处理文件按计划触发。

这是定义工作流的代码:::

workflow cons {
    param ($HN,$consec,$OUTPUT_DIR)
    parallel {
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $HN -Session $Using:consec | out-null
            VMLicense }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $HN -Session $Using:consec | out-null
            getdsusage }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            VMPartInfo }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            VMNWinfra }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            mppstate }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            VMDiskinfra }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            VMInfo }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            VMInfra }
        inlinescript { $OUTPUT_DIR=$Using:OUTPUT_DIR
            $HN=$Using:HN
            connect-viserver -Server $Using:HN -Session $Using:consec | out-null
            VMSnapshot }
    }
}

下面是为每个 VCenters::: 启动 pswf 作业的代码

foreach ($vc in $InputScript) {
$HN=$vc.HN
$User=$vc.User
$Password=$vc.Password
$consec = GetCon    ## "GetCon" is custom function which has just connect-viserver command and its args.#
$job1=$HN.split('.')[0] + '_'  +  (get-date -format yyyyMMddss)
cons -HN $HN -consec $consec -OUTPUT_DIR $OUTPUT_DIR -asjob -JobName $job1
}

get-job | wait-job | export-csv $OUTPUT_DIR\log001.csv -NoTypeInformation

这是从任务调度程序触发此任务时收到的错误消息:

警告:一个或多个作业处于挂起或断开连接状态,如果没有额外的用户输入,将无法继续。

指定 -Force 参数以继续完成、失败或停止状态。调用跟踪参与者时发生错误,导致实例中止。有关更多详细信息,请参阅内部异常。+ CategoryInfo : InvalidResult: (:) [], OperationCanceledException + FullyQualifiedErrorId : JobStateFailed

标签: .netpowershellworkflowworkflow-foundationpowercli

解决方案


推荐阅读