将字符串转换为可用变量

时间:2017-10-10 18:35:25

标签: powershell xaml

我正在使用一个更大的脚本来导入XAML,这就是为什么这些属性会有所不同。我有很多变量需要根据按钮点击更改可见性。因此,为了简化我的代码,我使用以下方法创建了一个变量数组:

[array]$CVariables += Get-Variable lblC* | Select -ExpandProperty Name
$CVariables += Get-Variable txtC* | Select -ExpandProperty Name
$CVariables += Get-Variable btnC* | Select -ExpandProperty Name

[array]$UVariables += Get-Variable lblU* | Select -ExpandProperty Name
$UVariables += Get-Variable txtU* | Select -ExpandProperty Name
$UVariables += Get-Variable btnU* | Select -ExpandProperty Name

[array]$PVariables += Get-Variable lblP* | Select -ExpandProperty Name
$PVariables += Get-Variable txtP* | Select -ExpandProperty Name
$PVariables += Get-Variable btnP* | Select -ExpandProperty Name

看到每个变量($CVariables$UVariables$PVariables)只包含诸如“lblC_Name”和“txtC_Name”之类的名称,我需要将它们转换为工作变量。

我尝试了Get-Variable,但这只是给了我价值。 例如:

PS> Get-Variable lblC_Name
#This Yields...
Name: lblC_Name
Value: System.Windows.Controls.Label: Name:

我的最终目标是让这样的事情发挥作用:

if ($lstComputerName.IsSelected) {
    $CVariables | % { $($_).Visibility = "Visible" }
}

在遍历字符串数组时我想知道的是,如何将其转换为变量并访问文本/内容和可见性等属性。

1 个答案:

答案 0 :(得分:4)

如果仔细查看Get-Variable lblC_Name的输出,您会发现该标签位于变量对象的 Value 属性中,因此& #39; s你需要使用的东西:

$CVariables | ForEach-Object {
    (Get-Variable $_ -ValueOnly).Visibility = "Visible"
}

$CVariables | ForEach-Object {
    (Get-Variable $_).Value.Visibility = "Visible"
}