Powershell 变量包含该值两次

标签 powershell

我有一个 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/

相关文章:

windows - 使用 Chef Knife winrm 将文件传输到远程 Windows 机器

internet-explorer - 在Powershell中使用IE COM对象自动从Web保存文件

powershell - 如何使用Powershell从文件夹的根目录中仅删除子文件夹和子文件夹的内容,而不删除单个文件

PowerShell:需要获取两行/行之间的值

具有单参数构造函数的 PowerShell 类不验证数据类型

powershell - 在后台作业中调用命令

powershell - 如何在PowerShell中比较两个字符串对象的内容

apache - Powershell 不退出

windows - 创建我的自定义对象数组 Powershell

.Net 秒表和 Powershell