powershell - 使用 -Filepath 参数通过 Powershell ScheduledJob 调用 $PSScriptRoot 时为空
问题描述
使用 Powershell ScheduledJob 时不会填充自动变量 $PSScriptRoot(不要与 ScheduledTask 混淆)。
带有指定本地脚本的 -Filepath 参数的 ScheduledJob:
-Filepath "C:\Scriptpath\Script.ps1"
无法填充 $PSScriptRoot。
Get-Job 显示它没有运行脚本,而是像读取 .txt 文件一样输出脚本。 错误的
带有 -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 变量。我想我正在做某事。
解决方案
您似乎在描述两个问题:
$PSScriptRoot
在某些情况下无人居住。带有 -FilePath 参数的 Set-ScheduledJob 显示文件的内容而不是执行它。
对于#1:$PSScriptRoot 有一个未解决的问题,但很难说情况是否符合您的用例,因为......您没有提供任何代码。我建议你添加更多的源代码来解释你的代码是如何使用的$PSScriptRoot
对于#2:Set-ScheduledJob 的文档: -Filepath似乎需要一个 .ps1 文件,但您的示例显示了一个非 .ps1 文件正在传递。
-文件路径
指定计划作业运行的脚本。输入本地计算机上.ps1 文件的路径。要指定脚本参数的默认值,请使用 ArgumentList 参数。每个计划的作业都必须具有 ScriptBlock 或 FilePath 值。
'c:\Filepath' 处的脚本实际上是否具有 .ps1 扩展名?如果没有,请给它一个并更改您的-Filepath
参数以匹配。
可能是一个问题导致另一个问题,但从当前的文本中不清楚它们是如何相关的。
推荐阅读
- javascript - 如何为带有回调函数作为参数的函数编写摩卡测试并返回一个承诺
- firebase - 保护firebase android客户端的云运行http端点
- python - 可以将图像中的物体提取到黑色背景中的图像处理算法
- css - 我的 svg 文本中某些角落的奇怪间隙是什么?
- c# - VB6--COM Interop--C#(VS2019) SQL查询超时当调用两个表时。加入
- android - 使用 BitmapFactory 时在 Android 中将 Int 图像数组解析为字节数组失败
- c++ - Rxcpp:如何复制 OfType 运算符?
- python - 如何将我的 .wav 文件重新定义为 HTML 文件?
- node.js - nodeJS的经过身份验证的代理检查器
- javascript - 将值从我的 Json (Node.js + Express) 传递到我的最终应用程序