我有一个PowerShell(PS)脚本,我想每天早上5点执行,我想运行它自动运行,所以我通过任务计划程序安排它(运行Windows 7 Ultimate SP1,64位)。作为测试,我写了一个简单的PS脚本,它只是附加到带有时间戳的文本文件中。它运行 - 我可以看到PowerShell窗口打开并写出PS日志 - 但它没有写入文本文件。
脚本从命令行和PS shell运行良好。它不能从任务计划程序工作,无论是从计划时间还是从任务计划程序列表,右键单击并选择运行。它都运行,但不会写入文本文件。
在任务计划程序中,我有"操作"设置为启动程序PowerShell.exe。对于"添加参数",我有: -NoProfile -ExecutionPolicy Bypass -Command C:\ AccessTask \ ATestScript.ps1
脚本本身很简单:
Start-Transcript -path "C:\Temp\aTestScript.log" -Verbose
write-output "Start";
# just write one line to file
write-output "Logging";
$text = Get-Date
$text >> 'aTestScriptOutput.txt'
write-output $error[0] | fl -force
write-output "Quit";
Stop-Transcript
为了让计划任务写入文本文件,我需要做些什么特别的事情吗?
答案 0 :(得分:1)
添加文件的完整路径就是答案:
$text >> 'C:\Temp\aTestScriptOutput.txt'
指定启动目录可能也有效。谢谢你的帮助!
答案 1 :(得分:0)
计划任务不会在脚本目录中运行。您需要在“计划任务”编辑器中设置该目录。我相信这是“开始”字段。
如果输出文件始终位于同一位置,则可以使用完整的绝对路径。要提高可移植性,请使用相对于脚本的路径,例如Join-Path -Path $PSScriptRoot -ChildPath 'aTestScriptOutput.txt'
。
上次建议:如果您的输出文件只包含文本,则输出管道输出到Set-Content
,而不是使用>>
重定向。 >>
运算符以UTF-16输出,当您尝试查看它时可能会导致悲伤。
答案 2 :(得分:0)
您应该使用最高权限(在任务定义中)运行任务,以使其写入文件夹。