我正在使用PowerShell来抓取网页并从页面上的表格元素构建对象。有时每个表元素都是唯一的,有时会有多个具有相同名称的元素。
如果在刮擦期间我碰到了属性的第二个实例,我想用数字命名新属性(如果我再次点击该名称,则继续该序列)。
我已按照以下代码设法使其工作,但是有更好的方法吗?
$PropertyExists = $Object.PSObject.Properties.Name |
Where { $_ -like "$PropertyName*" } | Sort -Descending | Select -First 1
If ($PropertyExists) {
$PropertyNumber = [int]($PropertyExists -split "(\d+$)")[1] + 1
} Else {
$PropertyNumber = ""
}
$Object | Add-Member –MemberType NoteProperty
–Name "$PropertyName$PropertyNumber"
–Value $PropertyValue
答案 0 :(得分:1)
如果属性已经定义,则将属性转换为动态数组:
$prop = $Object.$PropertyName
if ($prop -is [Collections.ArrayList]) {
$prop.Add($PropertyValue) >$null
} elseif ($prop -is [object]) {
$Object.$PropertyName = [Collections.ArrayList]@($prop, $PropertyValue)
} else {
Add-Member @{$PropertyName = $PropertyValue} -InputObject $Object
}
因此,您将能够统一处理单值和多值属性:
$Object.foo | ForEach { .... }
另一个优点是我们不那么频繁地调用缓慢的Add-Member。