2017-10-10 44 views
1

我正在使用導入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" } 
} 

我想什麼通過字符串數組循環的時候就知道了,我該如何將其轉換成一個變量並訪問諸如文本/內容和可見性之類的屬性。

回答

4

如果你把在Get-Variable lblC_Name輸出仔細看,你會看到標籤是變量對象的Value財產,所以這是你需要的內容:

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

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