Изменение даты URL с помощью Powershell - PullRequest
0 голосов
/ 19 октября 2018

Попытка автоматической загрузки файла .csv из сети каждый день.

Пока что я настроил строку $ date для использования в URL (если это правильно).

Изменен TLS с 1.0 на 1.2

Сделайте веб-запрос на сервер, сохраните вывод в файл.

Мне просто нужна $ date для автоматического изменения URL.

Кто-нибудь знает простой способ сделать это?Или мне полностью нужно переделать скрипт?

Cheers,

$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 голосов
/ 19 октября 2018

Я предлагаю использовать комбинацию


## 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
0 голосов
/ 19 октября 2018

Чтобы дополнить другие ответы и продвинуть более удобочитаемое решение, вот метод, который я использовал бы для решения этой проблемы, чтобы динамически добавить дату в 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 в стек поддержки.

0 голосов
/ 19 октября 2018

Вы можете использовать раскрытие строки для вызова $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

Я думаю, что это могло бы быть в состоянии получить отчет вчера, если я пойму, что имел в виду ваш Ури.

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