从函数返回 PSCustomObject 属性
Returning PSCustomObject Properties From a Function
我正在制作一个提示选择的函数,并且在 select 选择该选项后,它通过 PSCustomObject 为 returned 变量的 属性 分配了一个值。
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
}
因此,如果我 运行 独立执行脚本命令,它会按我想要的方式运行。我 select 上面的选项 1 并检查变量显示:
$Results.var1 = "Data 1"
$Results.var2 = "Data 2"
依此类推,相互选择。但是,当我将它包装在一个函数中并在其他地方调用它时,它 return 是两个变量,如下所示:
$Choices = Select-ChoiceFunction
Select 选择 1
$Results.var1 = "Data 1" "Data 2"
$Results.var2 = "Data 1" "Data 2"
我也试过管道 Select-Object
像这样:
$Choices = Select-ChoiceFunction | Select-Object $Results.var1
Select 选择 1 returns 与:
"Data 1" "Data 2"
和上面一样,我想调用函数并独立获取变量属性。我认为该功能制作不正确,但不清楚我需要添加什么才能单独 return 属性。
更新:Ansgar/TheMadTechnician 回答。我应该这样调用属性:
$Choices = Select-ChoiceFunction
Select 选择 1
$Choices.var1 = "Data 1" "Data 2"
$Choices.var2 = "Data 1" "Data 2"
"You are referencing $Results.var1 and $Results.var2 outside of your function, but you should be looking at $Choices.var1 and $Choices.var2." – TheMadTechnician
我正在制作一个提示选择的函数,并且在 select 选择该选项后,它通过 PSCustomObject 为 returned 变量的 属性 分配了一个值。
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
}
因此,如果我 运行 独立执行脚本命令,它会按我想要的方式运行。我 select 上面的选项 1 并检查变量显示:
$Results.var1 = "Data 1"
$Results.var2 = "Data 2"
依此类推,相互选择。但是,当我将它包装在一个函数中并在其他地方调用它时,它 return 是两个变量,如下所示:
$Choices = Select-ChoiceFunction
Select 选择 1
$Results.var1 = "Data 1" "Data 2"
$Results.var2 = "Data 1" "Data 2"
我也试过管道 Select-Object
像这样:
$Choices = Select-ChoiceFunction | Select-Object $Results.var1
Select 选择 1 returns 与:
"Data 1" "Data 2"
和上面一样,我想调用函数并独立获取变量属性。我认为该功能制作不正确,但不清楚我需要添加什么才能单独 return 属性。
更新:Ansgar/TheMadTechnician 回答。我应该这样调用属性:
$Choices = Select-ChoiceFunction
Select 选择 1
$Choices.var1 = "Data 1" "Data 2"
$Choices.var2 = "Data 1" "Data 2"
"You are referencing $Results.var1 and $Results.var2 outside of your function, but you should be looking at $Choices.var1 and $Choices.var2." – TheMadTechnician