Переменная Powershell содержит значение дважды - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть сценарий powershell, который запускается через jenskinsfile. Это все хорошо работает. Но в скрипте у меня есть функция для загрузки файла. Это не работает, потому что переменная $filePath содержит значение дважды. Когда эта часть будет запущена, журнал будет выглядеть так:

https://example.com/api/download
D:\folder\file_2.txt D:\folder\file_2.txt

Как я могу получить значение только для значений в $filePath?

function DownloadFile ($folder, $version) {

    $wc = New-Object System.Net.WebClient
    $wc.Headers['Content-Type'] = 'application/json'

    $requesturl = "https://example.com/api/download"
    $filePath = Join-Path -Path $folder -ChildPath "\file_$version.txt"

    Write-Host "$requesturl"
    Write-Host "$filePath"

    $wc.DownloadFile($requesturl, $filePath)

    return $filePath
}

1 Ответ

3 голосов
/ 03 апреля 2020

Подразумевается, что аргумент, передаваемый параметру -folder (который представлен внутри вашей функции как переменная параметра $folder), представляет собой массив путей к папкам, а не один .

Поэтому решение состоит в том, чтобы при вызове функции DownloadFile вы пропускали путь к папке single ; Например:

DownloadFile -folder D:\folder -version 2

# With *positional* parameter binding:
DownloadFile D:\folder 2

Поскольку Join-Path принимает массив путей в качестве аргумента -Path, он выводит , кратное пути при задании массива; Например:

PS> $folder = 'c:\abc', 'c:\def'; Join-Path -Path $folder -ChildPath file.txt
c:\abc\file.txt
c:\def\file.txt

Передача массива Write-Host неявно stringizes it, что означает создание одной строки, состоящей из элементов массива, объединенных пробелами:

PS> $folder = 'c:\abc', 'c:\def'; Write-Host $folder
c:\abc c:\def

(Обратите внимание, что это отличается от неявного вывода / вывода через Write-Output, который печатает каждый элемент массива в отдельной строке; также неявный вывод / Write-Output записывает в pipe , то есть они выводят data для последующей обработки, тогда как Write-Host записывает строки на дисплей ).

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