如何在PowerShell中将DateTime作为参数传递?

如何在PowerShell中将DateTime作为参数传递?,datetime,powershell,parameters,Datetime,Powershell,Parameters,我有一个脚本,它调用另一个脚本并随它一起传递参数。每当我尝试传入datetime时,datetime的一部分将用作其他参数的参数 脚本1.ps1 脚本2.ps1 这将导致: test1 Wednesday, December 31, 2014 12:00:00 AM 00:00:00 http://foo.com 编辑-字符串作为日期,键入我的部分: 如果我传递字符串12/31/14,它可以正常工作,但我希望能够传递日期。这是由于位置参数使用和引用的组合。这里有一个可以让它工作的变更(引用日期

我有一个脚本,它调用另一个脚本并随它一起传递参数。每当我尝试传入datetime时,datetime的一部分将用作其他参数的参数

脚本1.ps1 脚本2.ps1 这将导致:

test1
Wednesday, December 31, 2014 12:00:00 AM
00:00:00
http://foo.com
编辑-字符串作为日期,键入我的部分:


如果我传递字符串
12/31/14
,它可以正常工作,但我希望能够传递日期。

这是由于位置参数使用和引用的组合。这里有一个可以让它工作的变更(引用日期输入):

您有什么理由调用单独的PowerShell进程吗?你可以这样称呼它:

#This will run in separate scope 
    & ".\script2.ps1" test1 $dateEnd $siteUrl $outputPath

#This will run in the local (current) scope:
    . ".\script2.ps1" test1 $dateEnd $siteUrl $outputPath

我认为这是您没有正确使用DateTime对象的问题。如果要指定日期,请这样做。您建议的字符串是时间,而不是日期。如果要同时指定两个,请同时提供两个以获取日期

$endDate = "12/31/14 08:00:00"
那是12月31日上午8点

然后在脚本中调用您特别想要的任何内容

param
(
     [string]$test1,
     [DateTime]$dateEnd,
     [string]$siteUrl,
     [string]$outputFile
)      

$test1
$dateEnd.ToLongDateString()
$dateEnd.ToLongTimeString()
$siteUrl
$outputFile
将DateTime对象传递给该对象时(此处显示的是其他测试数据),您应该得到:

test1
Wednesday, December 31, 2014
8:00:00 AM
http://foo.com
C:\myfolder

在分配$argumentList的行中,将$dateEnd参数更改为
$dateEnd.toString('s')

Windows进程的参数是字符串,而不是对象,因此必须将ArgumentList转换为字符串。Powershell.exe然后通过在空格上拆分来解析该字符串(就像任何Windows进程一样),并将其转换回您的参数

通常情况下,这应该工作得很好,但在本例中,请注意运行
(get date).tostring()
时会发生什么。DateTime对象的默认输出包含一个空格,该空格会干扰解析


因此,解决方案是将参数列表中的date参数格式化为没有空格,但仍然采用DateTime::Parse()可以理解的格式(以便PowerShell可以在另一端重新加载变量)。将
's'
传递到DateTime::toString()可以提供这样的格式。

首先,请向我们显示所需的输出。第二,这不会导致您指定的结果。您在Script2.ps1中的任何地方都不会引用任何输出
00:00:00
的内容,您也会回显
$outputFile
,但不会在结果中显示
c:\myFolder
。@TheMadTechnician-您好!他的第一行创建了一个datetime对象。datetime被解析为字符串,因此作为两个位置参数。这就是00:00:00的来源。我之所以将其称为一个单独的进程,是因为我需要返回一些非常大的审核日志,并且我希望每次都能够释放内存,因为使用后处理对象并没有按照我的意图释放内存。哈,就是这样。非常感谢。没有意识到需要传递字符串。
$endDate = "12/31/14 08:00:00"
param
(
     [string]$test1,
     [DateTime]$dateEnd,
     [string]$siteUrl,
     [string]$outputFile
)      

$test1
$dateEnd.ToLongDateString()
$dateEnd.ToLongTimeString()
$siteUrl
$outputFile
test1
Wednesday, December 31, 2014
8:00:00 AM
http://foo.com
C:\myfolder