使用Powershell修改URL日期

时间:2018-10-19 11:46:31

标签: powershell

每天尝试从网上自动下载.csv文件。

到目前为止,我已经设置了字符串$ date,可以在URL中使用(如果没错)。

将TLS从1.0更改为1.2

向服务器发送Web请求,将输出保存到文件。

我现在需要$ date自动更改URL。

有人知道这样做的简单方法吗?还是我完全需要重做脚本?

干杯

$date = Get-Date
    [System.Net.ServicePointManager]::SecurityProtocol -bor 
[System.Net.SecurityProtocolType]::Tls12
$params = @{
    'Uri'     = @"https://website.net/v1/exportstation=32&buffer=daily&type=data&fileType=csv&grap hType=degreeDays&$(
    'start={0:yyyy-MM-dd}&end={1:yyyy-MM-dd}' -f @($date.AddDays(-1), $date)
)&from=0|7&to=30|2&yearRanges=$($date.Year)
"@
    'OutFile' = "$Env:USERPROFILE\Desktop\File.csv"
}

3 个答案:

答案 0 :(得分:2)

您可以使用字符串扩展以不同的格式调用$date。因此,下面我将其命名为3次,一次是获取昨天的日期$($Date.AddDays(-1).ToString('yyyy-MM-dd')),一次是获取今天的日期$($Date.ToString('yyyy-MM-dd')),最后一次是获取昨天的年份$($Date.AddDays(-1).ToString('yyyy'))

$date = Get-Date
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest ` 
    -Uri "https://website.net/v1/exportstation=32&buffer=daily&type=data&fileType=csv&graphType=degreeDays&start=$($Date.AddDays(-1).ToString('yyyy-MM-dd'))&end=$($Date.ToString('yyyy-MM-dd'))&from=0|7&to=30|2&yearRanges=$($Date.AddDays(-1).ToString('yyyy'))" `
    -Outfile C:\USERS\PC\DESKTOP\FILE.CSV

如果我理解您的Uri的意思,我认为这应该可以得到昨天的报告。

答案 1 :(得分:1)

我建议结合使用


## Q:\Test\2018\10\19\SO_52891734.ps1
$Date  = (Get-Date).Date
$Start = "&start={0:yyyy-MM-dd}" -f $Date.AddDays(-1)
$End   = "&end={0:yyyy-MM-dd}"   -f $Date
$Year  = "&yearRanges={0:yyyy}"  -f $Date.AddDays(-1)
$Other = "&buffer=daily&type=data&fileType=csv&graphType=degreeDays&from=0|7&to=30|2"

$params = @{
    Uri     = "https://website.net/v1/exportstation=32$Other$Start$End$Year" 
    OutFile = "C:\USERS\PC\DESKTOP\FILE.CSV"
}

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Invoke-WebRequest @params

答案 2 :(得分:0)

为补充其他答案并推广更具可读性的解决方案,以下是我用来解决此问题的方法,以便将日期动态添加到URL:

$date = Get-Date
[System.Net.ServicePointManager]::SecurityProtocol =
    [System.Net.ServicePointManager]::SecurityProtocol -bor [System.Net.SecurityProtocolType]::Tls12
$params = @{
    'Uri'     = @"
https://website.net/v1/exportstation=32&buffer=daily&type=data&fileType=csv&graphType=degreeDays&$(
    'start={0:yyyy-MM-dd}&end={1:yyyy-MM-dd}' -f @($date.AddDays(-1), $date)
)&from=0|7&to=30|2&yearRanges=$($date.Year)
"@
    'OutFile' = "$Env:USERPROFILE\Desktop\File.csv"
}
Invoke-WebRequest @params

仅支持一种协议是不明智的,因此我使用按位或将TLS1.2添加到支持堆栈中。