Windows Server 2008 R2 PowerShell 脚本手动运行,但不作为计划任务运行

Windows Server 2008 R2 PowerShell 脚本手动运行,但不作为计划任务运行

我有一个使用以下方法手动运行的 PowerShell 脚本PowerShell ISE。但是,当使用管理员凭据作为计划任务运行时,该任务不会以预期的结果运行。

剧本:

$request=new-object System.Net.WebClient
$request.DownloadFile("...url...", "C:\path\to\file.csv")

管理员用户有完全控制脚本和它正在写入的文件夹。URL 存在并在合理的时间内(少于一秒)响应。

如果我手动运行该任务,状态将为 0x41301(“当前正在运行”),直到我最终结束它。我使用以下两种方法设置了任务:

  1. 启动程序:C:\path\to\PS.PS1
  2. 启动程序:C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe使用附加选项-noninteractive -command "C:\path\to\PS.PS1"

使用选项 1,任务历史记录显示它已打开 notepad.exe 的一个实例,但从未终止它。使用选项 2,它完成了任务,但并未下载/创建文件。

我已经使用过,Set-ExecutionPolicy Unrestricted因为这不是一个签名的脚本。

我该如何解决这个问题?

答案1

由于您正在运行脚本文件而不是脚本块,因此应该使用的参数是 -File。

此外,使用 Set-ExecutionPolicy cmdlet 设置执行策略并不能保证脚本在该上下文中执行。有效的执行策略可能会被组策略 (GPO) 覆盖。要强制执行文件,请使用 -ExecutionPolicy 参数

您正在寻找的命令如下

powershell.exe -ExecutionPolicy Unrestricted -NonInteractive -NoProfile -File c:\path\ps.ps1

有关这些参数的更多信息可以找到这里

答案2

您尝试运行的脚本文件不是本机受信任的文件。在文件路径前使用 & 符号来运行命令:

Powershell.exe -ExecutionPolicy Unrestricted -Command { & 'C:\path\to\PS.PS1' }

其他 PowerShell 启动参数可以在以下位置找到PowerShell.exe 命令行帮助

答案3

您能否通过以下方式确认所有范围的执行政策:

Get-ExecutionPolicy -List

如果您设置本地机器政策远程签名,你应该能够拥有如下任务定义:

开始于:C:\Windows\System32\WindowsPowerShell\v1.0

跑步:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -File c:\path\to\ps.ps1

答案4

尽管您可能已经找到了解决问题的方法,但我仍将发布此说明以造福其他人。我遇到了类似的问题。我基本上使用了不同的域帐户进行测试和比较。选中“无论用户是否登录都运行”后,任务运行正常。

需要记住并确保以下几点:

  1. 用于执行任务的帐户必须在服务器的本地安全策略下具有“以批处理作业登录”权限(或属于本地管理员组的成员)。您必须指定运行脚本/批处理文件所需的帐户。
  2. 确保输入正确的密码字符
  3. 2008 R2 中的任务不会以交互方式运行,特别是如果您以“无论用户是否登录都运行”的方式运行它们。这很可能会失败,特别是如果您在脚本上寻找任何特定于创建任务时用户配置文件的对象\资源,因为 powershell 会话将需要该信息才能启动,否则它将启动并立即结束。例如,在运行脚本时将 $Path 定义为“无论用户是否登录都运行”,我指定了一个映射驱动器。它会在任务启动时寻找该驱动器,但由于验证运行任务的用户帐户未登录,并且在脚本上您引用回它需要处理的源\对象不存在,任务将终止。映射驱动器 (\server\share) x:\ vs. 实际 UNC 路径 \server\share
  4. 检查您的步骤、脚本和参数。有时,即使您已多次执行此过程,最小的部分也会产生很大的影响。我在输入密码时多次漏掉了一个字符,在构建脚本或任务时有时漏掉了一个分号。

检查提供的链接,希望您或其他人可以从此信息中受益。注意安全。

https://technet.microsoft.com/en-us/library/cc722152.aspx

相关内容