gpt4 book ai didi

powershell - 发送到 PowerShell 的字符串参数不是真正的字符串吗?

转载 作者:行者123 更新时间:2023-12-03 12:59:15 28 4
gpt4 key购买 nike

我对下面脚本的行为有点困惑:

测试.ps1:

param(
[array]$Value = $(throw "Give me a value")
)

Write-Host $Value
$Value | Get-Member -MemberType Method
$Value.ToUpper()

运行脚本:
PS C:\Temp> .\weird.ps1 test
TypeName: System.String
Name MemberType Definition
—- ———- ———-

ToUpper Method string ToUpper(), string ToUpper(System.Globalization.CultureInfo culture)

Method invocation failed because [System.Object[]] doesn’t contain a method named ‘ToUpper’.
At C:\Temp\weird.ps1:6 char:15
+ $Value.ToUpper <<<< ()
+ CategoryInfo : InvalidOperation: (ToUpper:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

为什么我会收到 MethodNotFound 异常? Get-Member 明确表示它是一个字符串。

最佳答案

这里发生的是变量 $value输入到 Object[]在脚本中。调用 Get-Member之所以有效,是因为您将值通过管道传输到函数中。因此,它看到的不是数组,而是数组中确实输入到 String 的值。 .这可以通过使用以下 Get-Member 来查看无管道调用

Get-Member -MemberType Method -InputObject $value

这也是 ToUpper 正确失败的原因(它是一个数组而不是 String )。

关于powershell - 发送到 PowerShell 的字符串参数不是真正的字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524227/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com