【问题标题】:Returning PSCustomObject Properties From a Function从函数返回 PSCustomObject 属性
【发布时间】:2018-06-19 01:04:55
【问题描述】:

我正在创建一个提示选择的函数,在选择该选择后,它通过 PSCustomObject 为返回的变量的属性分配一个值。

function Select-ChoiceFunction {
    # This generates a simple choice menu #
    $Title = "Title"
    $Info = "Info"
    $choice = echo @("Choice &1", "Choice &2", "Choice &3", "&Cancel")
    [int]$defaultchoice = 3
    $selection = $host.UI.PromptForChoice($title, $info, $choice, $defaultchoice)

    # Switch assigns two pieces of data to two variables #
    switch ($selection) {
        0 {
            $var1 = "Data 1"
            $var2 = "Data 2"
            Write-Host "`Choice 1`n"; break
        }
        1 {
            $var1 = "Data 3"
            $var2 = "Data 4"
            Write-Host "`Choice 2`n"; break
        }
        2 {
            $var1 = "Data 5"
            $var2 = "Data 6"
            Write-Host "`Choice 3`n"; break
        }
        default {
            $WarningPreference = "Stop"
            Write-Warning "`nNo Choice Made.`n"
        }
    }

    # Creating PSObject to return Properties from selection outside the Function #
    $Results = [PSCustomObject]@{
        var1 = $var1
        var2 = $var2
    }

    return $Results
}

因此,如果我独立运行脚本命令,它会按我的意愿运行。我选择上面的选项 1 并检查变量显示:

$Results.var1 = "Data 1"
$Results.var2 = "Data 2"

依此类推,供彼此选择。但是,当我将它包装在一个函数中并在其他地方调用它时,它会返回两个变量,如下所示:

$Choices = Select-ChoiceFunction

选择选项 1

$Results.var1 = "Data 1" "Data 2"
$Results.var2 = "Data 1" "Data 2"

我还尝试像这样将Select-Object 传递给它:

$Choices = Select-ChoiceFunction | Select-Object $Results.var1

选择选项 1 返回:

“数据 1” “数据 2”

与上面一样,我想调用函数并独立获取变量属性。我认为该函数的制作不正确,但不清楚我需要添加什么才能分别返回属性。

更新:由 Ansgar/TheMadTechnician 回答。我应该这样调用属性:

$Choices = Select-ChoiceFunction

选择选项 1

$Choices.var1 = "Data 1" "Data 2"
$Choices.var2 = "Data 1" "Data 2"

【问题讨论】:

  • 我无法重现此内容。当我运行你的代码时,我得到了想要的结果。也许尝试启动一个全新的 PowerShell 会话(尤其是如果您使用的是 ISE),看看您是否仍然得到错误的结果。
  • 对我来说调用该函数会引发错误,b/c $choice 不是 [Management.Automation.Host.ChoiceDescription[]] 类型。不过,在修复它之后,它按预期工作。请仔细检查 $Choices.var1$Choices.var2 是否真的没有正确的值。
  • 您在函数之外引用了$Results.var1$Results.var2,但您应该查看$Choices.var1$Choices.var2
  • Ansgar/TheMadTechnician:那是我出错的地方。显然,只见树木不见森林。谢谢!不知道该怎么做,但我的问题得到了回答。
  • @Admonition 不用担心;它发生了。我投票决定关闭这个错字/不可重现的原因。这些类型的问题往往对其他读者没有用,这就是我们没有发布答案的原因。我建议只删除问题;没有伤害。

标签: powershell scripting powershell-4.0


【解决方案1】:

“您在函数之外引用了 $Results.var1 和 $Results.var2,但您应该查看 $Choices.var1 和 $Choices.var2。” – TheMadTechnician

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2022-12-03
    • 2013-07-28
    • 2020-03-26
    • 2023-01-30
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多