将Datetime传递给powershell脚本

时间:2015-02-10 09:17:40

标签: powershell

在powershell脚本中,我尝试使用两个日期时间参数调用另一个脚本。

父脚本:

$startDate = "02/05/2015 19:00"
$endDate = "02/06/2015 14:15"

Invoke-Expression "C:\MoveAndDeleteFolder.ps1 -startDate $startDate -endDate $endDate"

儿童剧本:

param
(
    [Datetime]$startDate,
    [Datetime]$endDate
)

$startDate| Write-Output

结果:

2015年2月2日星期二 00:00:00

- >时间流逝了!

有人知道为什么吗?

2 个答案:

答案 0 :(得分:2)

问题是您使用字符串

调用脚本

Invoke-Expression "C:\MoveAndDeleteFolder.ps1 -startDate $startDate -endDate $endDate"

$startdate$enddate在日期和时间之间包含空格,因此在解析时,日期被视为参数的值,但由于空格,时间被视为参数。下面的示例显示了这一点。

test1.ps1:

param
(
    [Datetime]$startDate,
    [Datetime]$endDate
)

$startDate| Write-Output

"Args:"
$args

脚本:

$startDate = "02/05/2015 19:00"
$endDate = "02/06/2015 14:15"

Write-Host "c:\test.ps1 -startDate $startDate -endDate $endDate"

Invoke-Expression "c:\test.ps1 -startDate $startDate -endDate $endDate"

输出:

#This is the command that `Invoke-Expression` runs.
c:\test.ps1 -startDate 02/05/2015 19:00 -endDate 02/06/2015 14:15

#This is the failed parsed date
5. februar 2015 00:00:00

Args:
19:00
14:15

这里有两个解决方案。您可以在没有Invoke-Expression的情况下直接运行脚本,它将正确发送对象。

c:\test.ps1 -startDate $startDate -endDate $endDate

输出:

c:\test.ps1 -startDate 02/05/2015 19:00 -endDate 02/06/2015 14:15

5. februar 2015 19:00:00

或者您可以在表达式字符串中引用$startDate$endDate,例如:

Invoke-Expression "C:\MoveAndDeleteFolder.ps1 -startDate '$startDate' -endDate '$endDate'"

答案 1 :(得分:1)

或试试这个:

Invoke-Expression "C:\MoveAndDeleteFolder.ps1 -startDate `"$startDate`" -endDate `"$endDate`""