我正在尝试配置一个PowerShell脚本,该脚本将在Windows任务计划程序中为多个服务帐户运行。我找到了一种通过此链接Running PowerShell as another user, and launching a script中的第二个答案与给定用户一起运行PowerShell脚本的方法。
作为参考,这是PowerShell代码段:
$username = 'userA'
$password = 'passwordA'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process C:\BatchPath\MyBatch.bat -Credential $credential
现在在Windows任务计划程序中我配置了作业,在执行中我将其设置为运行Powershell.exe并附加参数'-ExecutionPolicy Bypass C:\ ScriptPath \ Script.ps1'。如果此任务计划程序条目的用户配置为userA,则它可以正常工作。如果我在userB上配置任务调度程序条目,那么它将失败。 userA和userB都是计算机上的管理员。
在第二种情况下,我希望脚本文件由userB启动,但PowerShell Start-Process会强制批处理文件作为userA运行。从观看任务管理器,我看不到批处理文件中的作业已开始。
这个示例有点肤浅,但在PowerShell脚本的最终形式中,它将运行具有不同服务帐户的不同批处理文件。
答案 0 :(得分:1)
此问题是因为使用“ UserA”打开的Powershell窗口将仅使用任务计划程序中的“ UserA”凭据运行内部进程或任何其他下级任务。即使您强迫它以与'UserB'凭据相同的方式运行,也不会采用它。
您需要创建一个跳转任务,以使用“ UserB”凭据运行该过程。
考虑一下, 1)在任务计划程序中使用* UserA凭据创建任务* TaskA,使用(Register-ScheduledTask)在计划程序中创建另一个任务* TaskB与* UserB凭据。 2)现在,当您从调度程序执行* TaskA时,它将在调度程序中创建* TaskB。 3)最后,如果您运行* TaskB,它将使用* UserB凭据运行该过程。
我希望这可以解决您的问题。