每天尝试从网上自动下载.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"
}
答案 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添加到支持堆栈中。