【发布时间】:2018-08-23 21:09:12
【问题描述】:
使用 Powershell ScheduledJob(不要与 ScheduledTask 混淆)时,不会填充自动变量 $PSScriptRoot。
带有指定本地脚本的 -Filepath 参数的 ScheduledJob:
-Filepath "C:\Scriptpath\Script.ps1"
未能填充 $PSScriptRoot。
Get-Job 显示它没有运行脚本,而是像读取 .txt 文件一样输出脚本。 false
带有 -Scriptblock 和 & 调用操作员指定本地脚本的 ScheduledJob:
-Scriptblock {& "C:\Scriptpath\Script.ps1"}
成功填充 $PSScriptRoot。
Script.ps1 可以这么简单
$PSScriptRoot | out-file "C:\Test.txt"
问题似乎是任务计划程序中的作业如何执行文件,而不是 .ps1 中的语法错误。因为如果通过 -Scriptblock 参数调用相同的脚本也可以工作。在任何一种情况下,都会执行脚本,因为 Out-File 将创建一个空白 txt 文件。
这两种用法似乎都符合 Microsoft 的文档:
任何有关行为的指导都会有所帮助。
编辑:
我注意到的是 Get-Job,它显示了计划作业正在执行的“命令”。
如果使用 -Scriptblock。 Get-Job 显示脚本块的确切内容,如上。
& "C:\Scriptpath\Script.ps1"
如果使用 -Filepath。 Get-Job 显示文件的内容。
$PSScriptRoot | out-file "C:\Test.txt"
这就像复制文件的内容然后调用它们。这可以解释为什么 $PSScriptRoot 无法填充。
....~测试噪音~
$PWD | Out-File "C:\file.txt"
在文件中显示 $PWD 恰好是执行计划作业的用户帐户的 $Home 变量。我想我正在做某事。
【问题讨论】:
-
看起来像一个错误。
标签: powershell