【问题标题】:Error while calling function-Cannot process argument transformation on parameter 'TriggerTime'调用函数时出错 - 无法处理参数“TriggerTime”上的参数转换
【发布时间】:2015-05-14 15:34:12
【问题描述】:

(像Set-ScheduledTask 这样的命令仅适用于内置“ScheduledTasks”模块的Powershell v4.0)

我正在运行以下代码,但收到错误消息。有人可以帮我理解问题出在哪里。

SetScheduledTask : Cannot process argument transformation on parameter 'TriggerTime'. Cannot convert the "System.Object[]" value 
of type "System.Object[]" to type "System.DateTime".
At C:\Users\skadithi\Desktop\Script.ps1:33 char:17
+ SetScheduledTask([datetime]$startFriday10PM,"QLAT_WinPatching_Friday_10PM")
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [SetScheduledTask], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,SetScheduledTask

接收用户输入并为之后的工作日初始化日期的代码

$startDate=Read-Host "Enter the StartDate in MM/DD/YYYY format"
$startDate=[datetime]$startDate

$startFriday=$startDate.AddDays(1)
$startFriday10PM=$startFriday.AddHours(22)

要更新的代码

Function UpdateScheduledTask
{
[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True)]
  [datetime]$TriggerTime,

   [Parameter(Mandatory=$True)]
   [string]$ScheduleName
     )
    if($TriggerTime -is [DateTime])
    {
        Write-Host "Running on $TriggerTime" -ForegroundColor Green
    }
    else
    {
        Write-Host "Event date must be a DateTime object" -ForegroundColor Yellow
    }
    $Time = New-ScheduledTaskTrigger -At $TriggerTime -Once
    Set-ScheduledTask -TaskName $ScheduleName -Trigger $Time
}

调用函数

UpdateScheduledTask($startFriday10PM,"QLAT_WinPatching_Friday_10PM")

【问题讨论】:

  • 在错误信息之后,显示为标题的文本是来自powershell脚本的cmets。从第一个标题开始的所有文本都是实际代码。
  • 函数调用格式不正确。应该只是UpdateScheduledTask $startFriday10PM "QLAT_WinPatching_Friday_10PM"
  • 此外,由于您指定了 $TriggerTime 的数据类型,因此无需检查它的类型。否则该函数将失败。
  • 嗨,马特,正如您指出的那样,我所做的函数调用是错误的。我使用 stackoverflow.com/questions/4988226/… 进行了更正

标签: powershell


【解决方案1】:

这个错误意味着参数'TriggerTime'需要是System.DateTime类型。

在您的代码中:

$Time = New-ScheduledTaskTrigger -At $TriggerTime -Once 

New-ScheduledTaskTrigger 返回一个新的计划任务触发器对象,但您将 Object 类型的变量传递给 -Trigger 参数

Set-ScheduledTask -TaskName $ScheduleName -Trigger $Time 

可以采用 System.DateTime 类型的变量。

【讨论】:

  • 嗨 Kostia,你提出了一个非常有效的观点,我也对此深信不疑。然而,最初的问题是因为我使用了错误的函数调用语法。我已经用事实证明有用的链接。我继续使用 $time 变量作为 -Trigger 参数,令人惊讶的是没有遇到任何问题。感谢您花时间研究此问题并提供帮助。 stackoverflow.com/questions/4988226/…
猜你喜欢
  • 2014-05-31
  • 2015-01-21
  • 2014-02-26
  • 2021-11-22
  • 2021-12-16
  • 1970-01-01
  • 2017-08-22
  • 2021-05-22
  • 2023-03-29
相关资源
最近更新 更多