AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 782458
Accepted
Omnomnomnom
Omnomnomnom
Asked: 2016-06-08 04:17:59 +0800 CST2016-06-08 04:17:59 +0800 CST 2016-06-08 04:17:59 +0800 CST

计划任务以退出代码 0 运行,但并不总是执行 powershell 脚本

  • 772

情况

在我们的组织中,我创建了一个创建计划任务的 GPO。此任务在两个用户帐户登录时触发。

它执行一个 powershell 脚本来更改网络连接的 DNS 服务器。(使用 dnsmasq 为这些用户屏蔽一些网站。我知道这不是一个防弹的解决方案,但它已经足够好了。)

计划任务的操作是以下命令:

C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe

这些是参数:

-ExecutionPolicy Bypass –NoProfile –Command "& {C:\ProgramData\ORGNAME\scripts\SetDNS.ps1}" > C:\ProgramData\ORGNAME\scripts\SetDNS.log

如您所见,输出被发送到日志文件。

这是脚本的内容:

$wmi = get-wmiobject Win32_NetworkAdapterConfiguration -filter "ipenabled = 'true'"
foreach($adapter in $wmi)
{
    if($adapter.description -NotLike "*VMware*")
    {
        $adapter.SetDNSServerSearchOrder("XXX.XXX.XXX.XXX")
    }
}

invoke-expression -command "c:\windows\system32\ipconfig /flushdns"

问题

问题是这工作正常,大约 10 次中有 9 次。当它不起作用时,任务调度程序仍然报告退出代码 0,但似乎脚本甚至没有开始执行,因为没有任何反应并且没有创建日志文件。

一些额外的信息

  • 任务在SYSTEM账户下运行
  • 它以最高权限运行
  • 当任务按需运行时,它工作正常
  • 所有计算机都运行 Windows 7 企业版 (x64)

我尝试过的一些事情

  • 我想也许任务调度程序触发脚本的速度太快了,有些事情可能还没有初始化,所以我尝试设置一个 30 秒的延迟。

  • 每 5 分钟重新运行一次任务,持续 15 分钟。

  • 失败时重新启动任务,这显然不起作用,因为powershell.exe似乎返回错误代码0。

scheduled-task powershell
  • 2 2 个回答
  • 26526 Views

2 个回答

  • Voted
  1. Best Answer
    Peter Hahndorf
    2016-06-08T06:08:10+08:002016-06-08T06:08:10+08:00

    我认为退出代码任务计划程序报告的是用于运行 powershell.exe 而不是您的脚本。

    尝试将其更改为:

    -ExecutionPolicy Bypass –NoProfile –Command "& {C:\ProgramData\ORGNAME\scripts\SetDNS.ps1; exit $LastExitCode}" > C:\ProgramData\ORGNAME\scripts\SetDNS.log
    

    $LastExitCode具有脚本的退出代码,您必须将其提升到任务调度程序的一级。

    Exit在脚本中添加一些错误处理并使用语句来设置实际的退出代码也是一个好主意。

    • 8
  2. uSlackr
    2016-06-08T05:47:18+08:002016-06-08T05:47:18+08:00

    -Command从您的脚本参数中删除 并改为使用-File. 命令是在您输入 powershell 命令时使用的,但您有一个脚本文件。

    详情在这里

    • 1

相关问题

  • Windows XP 中的任务计划程序是否足够可靠以执行重要任务?

  • 如果同一个任务已经在运行,如何防止计划任务运行?

  • 无法安排任务(访问被拒绝)

  • Windows 计划任务报告?

  • 如何为 Microsoft SQL Server 2005 自动运行夜间备份?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve