如何将今天的日期作为powershell中参数的默认值

时间:2017-07-12 14:24:59

标签: powershell parameters

我想创建一个脚本,帮助复制在时间范围内修改的文件。我想将$EndDate参数保留为可选参数,在这种情况下,我希望脚本将今天的日期用作默认值。

以下是剧本:

param (
  [Parameter(Mandatory=$True)]
  [string]$Path,

  [Parameter(Mandatory=$True)]
  [string]$targetDir,

  [Parameter(Mandatory=$True)]
  [string]$BeginDate,

  [Parameter(Mandatory=$False)]
  [string]$EndDate,

  [switch]$force
)

 Get-ChildItem -Path $Path -Recurse | Where-Object {$_.LastWriteTime -gt $BeginDate -and $_.LastWriteTime -lt $EndDate }| cp -Destination $targetDir -Force

2 个答案:

答案 0 :(得分:3)

[Parameter(Mandatory=$False)][string]$enddate = Get-Date,

给它一个默认值,你可能还想格式化它:

[Parameter(Mandatory=$False)][string]$enddate = (Get-Date -f dd\MM\yy)

答案 1 :(得分:2)

[Parameter(Mandatory=$False)]
[string]$EndDate = Get-Date

我不建议格式化它,因为这会将其从DateTime类型转换为String数据类型,从而导致Where-Object

中出现问题

编辑:刚刚意识到您明确地投射为[string]。当你将Where-Object与字符串进行比较时,AFAIK会破坏你的DateTime(除非PowerShell自动将$EndDate强制转换为DateTime ...)。

这使它更健壮。如果4c74356b41's answer得到你想要的东西,那就去吧!

param (
  [Parameter(Mandatory=$True)]
  [string]$Path,

  [Parameter(Mandatory=$True)]
  [string]$targetDir,

  [Parameter(Mandatory=$True)]
  [string]$BeginDate,

  [Parameter(Mandatory=$False)]
  [string]$EndDate = (Get-Date),

  [switch]$force
)

try{
    [datetime]$BeginDate = $BeginDate
}catch{
    Write-Output "$BeginDate is not a valid datetime"
}

try{
    [datetime]$EndDate = $EndDate 
}catch{
    Write-Output "$EndDate is not a valid datetime"
}

 Get-ChildItem -Path $Path -Recurse | Where-Object {$_.LastWriteTime -gt $BeginDate -and $_.LastWriteTime -lt $EndDate }| cp -Destination $targetDir -Force