【问题标题】:Powershell script not running correctly as a scheduled task on Windows 2008Powershell 脚本无法在 Windows 2008 上作为计划任务正确运行
【发布时间】:2013-05-12 10:41:39
【问题描述】:

我有这个脚本,它连接到一堆服务器并从应用程序和系统日志以及磁盘空间中获取服务状态、错误。它在 Windows XP 上作为计划任务运行良好,但在 Windows 2008 上存在一些奇怪的问题。我正在使用一个函数从单独的文件中导入凭据,它们以加密形式存储在该文件中:

function Import-credential($path) {
    $cred = Import-Clixml $path
    $cred.password = $cred.Password | ConvertTo-SecureString
    New-Object system.Management.Automation.PSCredential(
      $cred.username, $cred.password)
}

当我手动运行它并且它在 Windows XP 上作为计划任务运行但在 Windows 2008 上失败并出现以下错误时,这工作正常:

New-Object : Exception calling ".ctor" with "2" argument(s): "Cannot process ar
gument because the value of argument "password" is null. Change the value of ar
gument "password" to a non-null value."
At F:\Tools\MCHS Server Report\monitor.ps1:9 char:15
+     New-Object <<<<  system.Management.Automation.PSCredential(
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvoca 
   tionException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power 
   Shell.Commands.NewObjectCommand

这是第 9 行:

New-Object system.Management.Automation.PSCredential(

在任务计划程序中,我在 Program/Script 中拥有 powershell.exe 的完整路径,在 Add Arguments 中拥有 -command 和“F:\Tools\MCHS Server Report\monitor.ps1”。

有什么想法吗?

编辑:我尝试将它运行的帐户更改为我自己的帐户(我使用的是专门为计划任务创建的本地帐户)并且它工作正常。考虑到我们都是管理员并且似乎拥有相同的权限,我对为什么它不能与其他用户一起使用的想法为 0...

【问题讨论】:

  • 运行任务的用户是否有权访问密码文件?您是否将任务配置为以最高权限运行?
  • 是的,他可以访问该文件。我已将任务配置为以最高权限运行,但这并没有改变 :( 感谢您抽出宝贵时间发表评论!
  • 我仍然怀疑与 UAC 相关的问题。您可以暂时禁用 UAC(需要重新启动服务器)吗?您使用的是哪个 PowerShell 版本?
  • 不幸的是,它已经关闭了。

标签: powershell scheduled-tasks


【解决方案1】:

默认情况下,ConvertTo-SecureString/ConvertFrom-SecureString 使用绑定到最初加密字符串的用户和计算机的加密密钥。如果您以服务帐户登录并保存凭据,它应该能够在它作为服务运行时对其进行解密。

【讨论】:

  • 谢谢!这听起来像是根本原因。我之前注意到导出凭据会根据系统返回不同的结果,但不知道它也是与用户相关的。我试图投票,但我显然缺乏声誉所以......认为自己被投票了:)
猜你喜欢
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2012-10-12
  • 2014-05-05
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多