【问题标题】:Why is my parameter not passed into the function?为什么我的参数没有传递给函数?
【发布时间】:2020-01-16 15:21:45
【问题描述】:

当我创建函数时,我在家用笔记本电脑上遇到了奇怪的行为。参数不传递给函数。

例子:

function Get-Info {
    param (
        $input
    )
    $input | gm
}

使用此代码 (Get-Info -input 'test') 我收到错误:

gm : You must specify an object for the Get-Member cmdlet.
At line:5 char:14
+     $input | gm
+                   ~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand

我也只是想用参数打印一个详细的语句,但我只得到一个空行。

为什么参数没有传入函数?

【问题讨论】:

  • $input 变量有特殊含义。阅读Get-Help about_Automatic_Variables
  • @JosefZ,感谢您的提示。我更改了参数名称,但收到相同的奇怪行为。

标签: function powershell parameter-passing


【解决方案1】:

试试这个方法。 这 [字符串] |通用

【讨论】:

  • 以不同的方式格式化答案中的文本和代码可能会有所帮助。这是否是格式化您的答案的一种方式(使用反引号(``)作为代码)? “试试这个方法。This [String] | gm。”
  • OP 想要检查存储在 $input 变量中的值的类型,因此传递类型文字 [string] 将无济于事。
【解决方案2】:

@JosefZ 的评论是正确的。 $input 基本上是about_Automatic_Variables 中所述的保留变量名。

包含一个枚举器,它枚举传递给函数的所有输入。 $input 变量仅适用于函数和脚本块(它们是未命名的函数)。

因此,更改参数名称应该会如您所愿。但是不要忘记更改调用函数的方式,以便它也使用新的参数名称。这种情况下,调用函数时也可以完全跳过参数名

function Get-Info { param($myinput) $myinput | gm }
Get-Info -myinput 'test'
Get-Info 'test'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 2017-08-02
    • 2018-09-03
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多