powershell - 如何将对象的点属性作为变量传递?
问题描述
我是 StackOverflow 的新手,但对 PowerShell 来说并不是那么新……我正在编写一个函数,该函数使用该$host.UI.PromptForChoice()
方法向用户显示选项列表。它需要一个对象数组,读取一个用作标签的属性,然后在屏幕上显示选项。当用作标签的属性是一个简单的字符串时,该函数可以正常工作。当标签所需的属性是两个(或更多)级别时,它不起作用。
例如:
$object[i].base
变为$object[i].$var
($var = "base") <- 这有效!
$object[i].base.name
变为$object[i].$var
($var = "base.name") <- 这不返回任何内容。
我尝试了不同的方式来使用变量而没有改变。
$object.{$var}
$object.($var)
$object."$var"
我几乎可以肯定这是“。”的问题。在变量中被解释。都是一串。
这是完整的功能。我从 Internet 上的另一个帖子中借用了此代码的基础知识,但现在我再也找不到那个帖子了。我向作者道歉,因为他们没有正确地相信他们!
function Show-UserChoices {
param (
[Parameter(Mandatory=$true)]
$InputObject,
[Parameter(Mandatory=$true)]
[string]$LabelProperty,
[string]$Caption = "Please make a selection",
[string]$Message = "Type or copy/paste the text of your choice",
[int]$DefaultChoice = -1
)
$choices = @()
for($i=0;$i -lt $InputObject.Count;$i++){
$choices += [System.Management.Automation.Host.ChoiceDescription]("$($InputObject[$i].$LabelProperty)")
}
$userChoice = $host.UI.PromptForChoice($Caption,$Message,$choices,$DefaultChoice)
return $userChoice
}
任何关于我在这里缺少的建议都非常感谢!
更新:
我找到了处理属性的解决方案。如果我将每个属性标签作为数组中的索引传递,我可以在函数中组装表达式并运行它。它可能不是最漂亮的代码,但它可以满足我的需要。这是我所做的更改:
.example
Show-UserChoices -InputObject $object -LabelProperty foo,bar
This will construct the expression $object.foo.bar
[string[]]$LabelProperty, <-- now accepts an array of strings
$choices = @()
for($i=0;$i -lt $InputObject.Count;$i++){
$exp = '$InputObject[$i]'
foreach ($j in $LabelProperty){
$exp += '.' + $j
}
$choices += [System.Management.Automation.Host.ChoiceDescription]("$(Invoke-Expression $exp)")
}
解决方案
推荐阅读
- scenekit - SceneKit 骨架 3D 动画
- c++ - if 中的不等式和 ==
- arduino - 如何解决 Arduino 中可用的内存不足的问题
- gatling - 使用 nothingFor 函数进行模拟的 Gatling 编译失败
- vba - 如何将word文档中的所有表格转换为图像?
- android - 我的发布 apk 立即崩溃,但调试应用程序正常工作 ionic 5
- node.js - 如何解决 npm 问题
- ios - 在 iOS 中 PDFPage(image:image) 使 PDF 文件变大。如何解决这个问题?
- javascript - 未捕获的类型错误:无法在 HTMLSpanElement.expand 处读取 null 的属性“classList”
- rust - 方法 `draw` 存在,但 Vec 中不满足以下特征边界
>,Compilernote 应该满意了吧?