我有一个 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
}
最佳答案
这意味着您传递给 -folder
参数的参数(在函数内部表示为 $folder
参数变量)是一个 文件夹路径的数组,而不是单个路径。
因此,解决方案是确保在调用 DownloadFile
函数时仅传递单个文件夹路径;例如:
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
隐式字符串化它,这意味着创建一个由用空格连接的数组元素组成的单个字符串:
PS> $folder = 'c:\abc', 'c:\def'; Write-Host $folder
c:\abc c:\def
(请注意,这与通过 Write-Output
的隐式输出/输出不同,隐式输出/输出在其自己的行上打印每个数组元素;此外,隐式输出/Write-Output
写入管道,这意味着它们输出数据以供以后处理,而Write-Host
将字符串写入显示器)。
关于Powershell 变量包含该值两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011706/