我已经编写了以下.ps1 文件:-
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$request = [System.Net.WebRequest]::Create("https://localhost/")
$response = $request.GetResponse()
$response.Close()
我在 Windows Server 2012 R2 任务计划程序中设置了一个任务,以调用上面的 ps1 文件。现在我手动运行此任务,但它一直显示“0x41301”,这意味着它仍在运行...虽然如果我直接在 PowerShell 窗口内运行上述代码,它将在不到一秒的时间内结束?那么为什么使用任务 Schuler 调用这个 ps1 永远不会结束?
--编辑--这是导出的 XML:-
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2016-02-09T00:35:11.5514762</Date>
<Author>ad-services\user.service</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<Repetition>
<Interval>PT5M</Interval>
<Duration>PT30M</Duration>
<StopAtDurationEnd>false</StopAtDurationEnd>
</Repetition>
<StartBoundary>2016-02-09T19:30:01</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-20</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Users\user.service\Documents\AppPoolActivation.ps1</Command>
</Exec>
</Actions>
</Task>
答案1
我认为这说明了问题:
<Actions Context="Author">
<Exec>
<Command>C:\Users\user.service\Documents\AppPoolActivation.ps1</Command>
</Exec>
</Actions>
您不应该仅仅将 .PS1 脚本作为要运行的命令,这会导致命令失败或产生奇怪的结果。:)
相反,在任务中,将要运行的“程序/脚本”更改为:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
通过任务的“参数”字段添加脚本,并包括执行策略更改(如果需要)。即:
-ExecutionPolicy Bypass -file "C:\Users\user.service\Documents\AppPoolActivation.ps1"
您可能还想更改“开始于”字段以匹配脚本存在的路径,即:C:\Users\user.service\Documents\
。
建议不要将脚本存储在用户的配置文件文件夹中,因为这可能会导致访问问题。相反,请在文件夹外创建一个文件夹Users
来保存脚本,并确保用于运行任务的用户帐户具有适当的访问权限。
答案2
我遇到这个问题是因为我已将任务设置为“无论用户是否登录都运行”..当我将其切换为“仅在用户登录时运行”并进行测试时,我意识到我的一个批处理文件中有一个暂停,我忘记删除它了!
我知道这可能不相关但希望它能在未来帮助到某人!
答案3
或者简单地在“操作”选项卡中填写程序/脚本:电源外壳 添加参数(可选):非交互式文件“C:\你的脚本.ps1”