2017-07-12 73 views
3

我想創建一個腳本來幫助複製時間範圍內修改的文件。我想離開$EndDate參數作爲可選參數,在這種情況下,我希望腳本使用今天的日期作爲默認值。我如何將今天的日期作爲PowerShell中參數的默認值

下面是腳本:

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 

回答

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

給它一個默認值,像這樣,你可能還需要對其進行格式化:

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

我不會建議格式化它會將它從DateTime類型轉換爲String數據類型,從而導致中的問題

編輯:剛剛意識到您明確鑄造爲[string]。 AFAIK這會破壞您的Where-Object,因爲您正在將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 
+0

好,其已被轉換爲字符串,所以無論 – 4c74356b41

+0

呀,我才意識到和我更新的答案。導致在OP的代碼錯誤,所以不是真的「什麼」 – gms0ulman

+0

我有點懶得測試這個,但我會假設PowerShell可以來回投它 – 4c74356b41

相關問題