起初我尝试使用以下命令作为计划任务(请参阅下面的任务完整转储)
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -Command C:\Users\knegyesi\Documents\wsl2-network.ps1 *>C:\Users\knegyesi\AppData\Local\Temp\log.txt
哪个做但是,startwsl hostname -I
返回的是空的,而从命令提示符下它可以完美运行。使用 wsl.exe 的完整路径不会改变任何东西。
然后我读到使用 cmd 或 vbs 文件,而不是直接运行 PS1。然而,这根本无法运行。
我已经尽可能简化了我的案例。我查看了类似的问题,它们要么没有提供解决方案,要么解决方案不起作用。
我已经创建了一个 cmd 文件:
echo foo > %TEMP%\log.txt
我已经创建了计划任务
Folder: \
HostName: CF3N2Z2
TaskName: \wsl2-network
Next Run Time: N/A
Status: Ready
Logon Mode: Interactive/Background
Last Run Time: 11/15/2021 2:25:52 AM
Last Result: 0
Author: APOLLO\knegyesi
Task To Run: C:\Users\knegyesi\Documents\wsl2-network.cmd
Start In: N/A
Comment: N/A
Scheduled Task State: Enabled
Idle Time: Disabled
Power Management: Stop On Battery Mode, No Start On Batteries
Run As User: SYSTEM
Delete Task If Not Rescheduled: Disabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule: Scheduling data is not available in this format.
Schedule Type: At system start up
Start Time: N/A
Start Date: N/A
End Date: N/A
Days: N/A
Months: N/A
Repeat: Every: N/A
Repeat: Until: Time: N/A
Repeat: Until: Duration: N/A
然后我就这么做了schtasks /Run /TN "wsl2-network"
任务计划程序 GUI 报告成功。但是,未创建日志文件。手动运行脚本有效。我尝试添加@echo off
以确保程序没有输出。
我完全陷入困境,我真的需要这个脚本在启动时运行而不是在登录时运行:(
答案1
两条评论:
首先,正如 DavidPostill 上面提到的,您不应该假设计划任务中任何环境变量的值,因为这是一个有限的环境。
第二,echo
是命令提示符(CMD)的命令,其中的计划任务没有运行。
对于计划任务,最好使用一个.bat
将在隐式 CMD 环境中执行的文件。请记住对调用的每个可执行文件使用完整路径,不要假设 PATH 与登录中的 PATH 相同。