Powershell: вставка переменной даты в строки URL - PullRequest
0 голосов
/ 27 января 2020

Мне нужно динамически изменить часть даты в различных URL-адресах для целей веб-копирования. И дата, и форматирование должны быть переменными.

Например, сегодня я могу запросить:

www.website.com/?startdate=2020-01-01&enddate=2020-01-02

Тогда как завтра я может потребоваться:

www.website.com/?startdate=2020-01-02&enddate=2020-01-03

Мое текущее решение заключается в передаче следующего формата моему сценарию в качестве параметра:

www.website.com/?startdate= <- 1, гггг-ММ-дд> & enddate = <0, гггг-ММ-дд>

Где часть слева от запятой - это день, который мне нужен, а часть до право - это его форматирование.

Я использую следующий скрипт для получения моего результата:

$url = "www.website.com/?startdate=<-1,yyyy-MM-dd>&enddate=<0,yyyy-MM-dd>"

$urlsplit = $url.Split("<>") | Where-Object {$_}

Switch ($urlsplit.Length)
{
1 { 
    $result = $url 
}
2 { 
    $dayone = $urlsplit[1].Split(",")[0]
    $formatone =  $urlsplit[1].Split(",")[1] 
    $result = $urlsplit[0] + ((Get-Date).AddDays($dayone).ToString($formatone)) 
}
4 {
    $dayone = $urlsplit[1].Split(",")[0]
    $daytwo = $urlsplit[3].Split(",")[0]
    $formatone = $urlsplit[1].Split(",")[1]
    $formattwo = $urlsplit[3].Split(",")[1]
    $result = $urlsplit[0] + ((Get-Date).AddDays($dayone).ToString($formatone)) + $urlsplit[2] + ((Get-Date).AddDays($daytwo).ToString($formattwo))
}
}
Write-Output $result

URL могут не содержать дату, одну дату или две (как указано выше). Вот почему мне сейчас нужен оператор switch.

Можно ли сделать это проще?

1 Ответ

0 голосов
/ 27 января 2020

Вот пользовательская функция, которая будет выполнять то, что вы ищете, в упрощенном виде без всех этих разделений.

Использование

Write-Host 'Start date only' -ForegroundColor Cyan
Get-Url -StartDate (get-date).AddDays(-1)
Write-Host 'Start date + End date' -ForegroundColor Cyan
Get-Url -StartDate (get-date).AddDays(-1) -EndDate (Get-Date)
Write-Host 'End date only' -ForegroundColor Cyan
Get-Url -EndDate (get-date).AddDays(10)
Write-Host 'No params' -ForegroundColor Cyan
Get-Url 

Я забыл включить в мой скриншот, но вы также можете указать пользовательский формат, используя соответствующий параметр -Format.

Get-Url -StartDate (Get-Date) -Format 'yyyy\/MM\/dd'
Get-Url -StartDate (Get-Date) -Format 'yyyy-MM'

Результат

result

Определение функции

Function Get-Url {
    [cmdletbinding()]
    Param (
        [datetime]$StartDate,  
        [datetime]$EndDate ,  
        $Format = 'yyyy-MM-dd'  
    )

    $Start, $End = ''
    $EndSymbol = '?'
    if ($StartDate -ne $null) {
        $Start = "?startdate=$($StartDate.ToString($Format))"
        $EndSymbol = '&'
    }

    if ($EndDate -ne $null) {
        $End = "($EndSymbol)EndDate=$($EndDate.ToString($Format))"
    }

    return "www.website.com/$Start$($End)"

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...