PowerShell中如何通过字符串形式的变量名操作对应对象属性
PowerShell动态操作匹配名称的WPF控件方法
失效原因
Get-Variable返回的是PSVariable类型的变量元数据对象,不是变量存储的实际WPF控件实例。直接对这个元数据对象赋值属性、或者用Add-Member给元数据对象加属性,都只是修改变量条目本身,没有触碰真正的控件对象,自然不会在界面上生效。
正确写法
访问PSVariable对象自带的.Value属性,就能拿到变量存储的实际控件实例,直接修改实例属性即可:
$grids = Get-Variable "wpfgrd*" foreach($gridEntry in $grids){ $actualGrid = $gridEntry.Value $actualGrid.Background = "#FF212123" }
如果要防止匹配到同名但不是WPF Grid的变量引发报错,可以增加类型判断:
Get-Variable "wpfgrd*" | ForEach-Object { if ($_.Value -is [System.Windows.Controls.Grid]) { $_.Value.Background = "#FF212123" } }
不要使用
Invoke-Expression拼接变量名的方案实现该需求,这类写法存在脚本注入风险,直接读取PSVariable.Value是最安全的官方支持写法。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

