powershell - Powershell 变量包含两次值
问题描述
我有一个从 jenskinsfile 启动的 powershell 脚本。这一切都很好。但在脚本中,我有一个下载文件的功能。这不起作用,因为$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
(请注意,这与隐式输出/输出 via 不同Write-Output
,后者将每个数组元素打印在自己的行上;此外,隐式输出/Write-Output
写入管道,这意味着它们输出数据以供以后处理,而Write-Host
将字符串写入显示器)。
推荐阅读
- scala - Scala RDD 匹配类似的措辞
- java - JDBC (MS SQL) 禁用所有事务以执行 sp_replicationdboption 语句
- node.js - 如何正确使用异步和同步代码来实现结果?
- reactjs - 映射数组中的项目 - 反应
- prolog - 编写一个适用于循环图的谓词,以使用 prolog 检查两个节点之间是否存在路径
- c++ - 标准::原子
ARM(树莓派 3)上的无锁不一致 - typescript - Typescript 中枚举的多个键声明
- quire-api - “导出项目” Quire API 文档
- git - 使用 Hugo 框架为不同的分支部署 GitLab 页面?
- python - 如何修复不和谐机器人中的“事件循环已关闭”