【问题标题】:PowerShell Function arguments are all being passed in the first argumentPowerShell 函数参数都在第一个参数中传递
【发布时间】:2020-05-19 22:28:04
【问题描述】:

当我在 PowerShell 中运行此代码时:

function Check-Missing([String] $arg1, [String] $Arg2, [String] $Arg3)
{
    echo $arg1
    echo "----------"
    echo $arg2
    echo "----------"
    echo $Arg3
}

$titi = "123"
$toto = "456"
$tata = "789"

Check-Missing($titi,$toto,$tata)

我得到这个输出:

123 456 789
----------

----------

我根本无法理解它:-(这里发生了什么?!等等,它变得更好了:

function Start-App{

    Param(
    [parameter(Mandatory=$true)]
    [System.Object] $Arg1,
    [System.Object] $Arg2,
    [System.Object] $Arg3 
    )

    echo $arg1
    echo "---"
    echo $arg2
    echo "---"
    echo $Arg3

}

$a = "abc"
$b = "bcd"
$c = "cde"

Start-App($a.ToString(),$b.ToString(),$c.ToString())

这段代码给了我以下信息:

abc
bcd
cde
---
---

我也试过这个:

function Start-App{

    Param(
    [parameter(Mandatory=$true)]
    [String] $Arg1,
    [String] $Arg2,
    [String] $Arg3 
    )

    echo $arg1
    echo "---"
    echo $arg2
    echo "---"
    echo $Arg3

}

$a = "abc"
$b = "bcd"
$c = "cde"

Start-App($a.ToString(),$b.ToString(),$c.ToString())

但是得到这个完全没有意义的愚蠢错误,因为我在将变量传递给函数之前将它们转换为字符串:

Start-App : Cannot process argument transformation on parameter 'Arg1'. Cannot convert value to type System.String.

我似乎无论做什么,参数都是作为一个传递的(在第一个参数中,这不是我想要的)......我怎样才能确保正确传递参数?!

【问题讨论】:

  • powershell 不在参数列表中使用逗号作为分隔符,也不在参数列表周围使用()。你使用逗号 AND () ... 这意味着你在位置一得到了一个数组......而在其他位置什么都没有。 [咧嘴]
  • edit您的问题标题。标题应该以一种对正在筛选搜索结果列表试图找到问题解决方案的该站点的未来用户有意义的方式解释您遇到的问题或您提出的问题。您当前的标题不包含任何内容;唯一有意义的词是 Powershell,它已经是您通过添加的 Powershell 标签提供的信息。

标签: powershell


【解决方案1】:

根据 Lee 的评论,您可能想了解如何调用 PowerShell 中的函数:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-7

如果您将函数调用更改为此,它会按预期工作:

Check-Missing $titi $toto $tata

此外,在您的第二个示例中,由于您使用的是高级参数,您可以显式调用它们(允许它们出现故障或其他时髦的东西):

Start-App -Arg2 $b -Arg1 $a -Arg3 $c

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-06-08
    相关资源
    最近更新 更多