我有一台 Windows Server 2012 R2 服务器正在运行一个包含三个操作的计划任务,每个操作都运行 PowerShell 脚本:
以下每个操作都“从”相关(且正确)的目录“开始”:
原来,第三个动作——应用ABP- 的设置方式与其他两个完全相同,例如,一个简单的“开始于”文件夹,然后.\ApplyABPs.ps1
作为参数。这按预期工作。
我想在后一个脚本中添加一些日志记录,因此我添加了以下代码来点源我的共享FunctionsLibrary.ps1
文件,创建一个日志文件并写入它:
# Call functions file...
. (Join-Path "C:\scripts\" FunctionLibrary.ps1)
# Create a log file
$LogFile = Create-Log -Location $LogfileLocation
Write-Log -Important -Text "==== ApplyABPs.ps1 ====="
该脚本的附加内容ApplyABPs
和此FunctionLibrary.ps1
脚本在其他文件中均可运行。
如果我ApplyABPs.ps1
从 PowerShell ISE 运行此脚本,它会按预期工作 - 创建日志文件并写入其中。
但是,当我尝试运行计划任务时,前两个操作照常运行,但第三个操作失败:
该代码没有给我提供太多细节,但Last Run Result
任务计划程序顶部显示The directory name is invalid. (0x8007010B)
。
因此...出于测试目的,我尝试将相同的代码FunctionLibrary.ps1
和脚本代码修改添加到其他两个操作中。然后任务计划程序立即失败,并为第一个操作返回了相同的错误。
当我再次取出代码时,操作就可以起作用。
我尝试改变计划任务调用 PowerShell 的方式(因此顶部屏幕截图中的-executionpolicy bypass
、-noprofile
和-file
参数)但这没有什么区别。
根据directory invalid
错误消息,我想知道 PowerShell(由计划任务调用时)是否无法访问点源文件,或者类似的东西?
如果有人可以解释这个特定的错误,或者深入了解任务计划程序如何调用 PowerShell(以及它使用的目录/相对性),那就太理想了。
答案1
使用以下语法在任务计划程序中运行 PowerShell 脚本:
程序/脚本:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
添加参数:-NoLogo-Noninteractive-Noprofile-命令“&{C:\ScriptFolder\get-LicensingInputFromAD.ps1}”
并在任务参数字段中使用每个.ps1 文件的完整路径\文件名。