Powershell - 动态迭代变量

时间:2016-12-27 00:58:48

标签: powershell csv

我正在导入一个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变量。这些复选框的名称以WPFCheckbox0WPFCheckbox1WPFCheckbox2等名称命名。这些对象有两个我计划使用的属性," Command"存储$SoftwareList[$i].path和"内容"存储$SoftwareList[$i].Name

我想不出一种方法来正确循环这些变量,并将CSV中的属性分配给各自WPFCheckbox上的属性。

非常感谢任何建议。

1 个答案:

答案 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

作为旁注(因为我还没有评论你的原始问题),创建一个数组只是作为迭代器通过文件的行是非常低效的。肯定有更好的方法可以做到这一点。

相关问题