我正在导入一个CSV文件,每行有两个记录,"名称"和"路径"。
$softwareList = Import-Csv C:\Scripts\NEW_INSTALLER\softwareList.csv
$count = 0..($softwareList.count -1)
foreach($i in $count){
Write-Host $softwareList[$i].Name,$softwareList[$i].Path
}
我要做的是根据WPFCheckbox
变量动态地将每条记录的名称和路径分配给$i
变量。这些复选框的名称以WPFCheckbox0
,WPFCheckbox1
,WPFCheckbox2
等名称命名。这些对象有两个我计划使用的属性," Command"存储$SoftwareList[$i].path
和"内容"存储$SoftwareList[$i].Name
我想不出一种方法来正确循环这些变量,并将CSV中的属性分配给各自WPFCheckbox上的属性。
非常感谢任何建议。
答案 0 :(得分:0)
Invoke-Expression 是一种方式,但请注意Mathias'对整体方法的关注。
在你的foreach循环中,你可以做类似的事情:
invoke-expression "`$WPFCheckbox$i`.Command = $($SoftwareList[$i].Path)"
invoke-expression "`$WPFCheckbox$i`.Content= $($SoftwareList[$i].Name)"
$ WPFCheckBox之前的反斜杠`阻止立即计算未定义的变量(在调用表达式之前),但$ I是。这会为您提供一个包含 $ WPFCheckbox1 的字符串,然后您可以在其中附加属性名称和值。 $ SoftwareList值立即处理为原始字符串。
Invoke-Expression 然后评估并执行整个字符串,就像它是一个常规语句一样。
这是一个独立的代码片段:
1..3 |% {
invoke-expression "`$MyVariable$_` = New-Object PSObject"
invoke-expression "`$MyVariable$_` | add-member -NotePropertyName Command -NotePropertyValue [String]::Empty"
invoke-expression "`$MyVariable$_`.Command = 'Path #$_'"
}
$MyVariable1 | Out-String
$MyVariable2 | Out-String
$MyVariable3 | Out-String
作为旁注(因为我还没有评论你的原始问题),创建一个数组只是作为迭代器通过文件的行是非常低效的。肯定有更好的方法可以做到这一点。