在创建后添加子对象到PSObject



在使用Powershell时,可以使用Add-Member函数来操作对象树。

下面的函数应该读取包含客户及其对应域名的CSV文件,并按照如下方式构建对象树:

Customer1--- some attributes
|__ Domainname1---some attributes
|__ Domainname2---some attributes
Customer2--- some Attribute 
|__ Domainname3---some attributes
Customer3--- some attributes
|__ Domainname1---some attributes
|__ Domainname2---some attributes
|__ Domainname3---some attributes

CSV文件是一个未排序的客户列表及其域,看起来像:

Kunde,Domain
"Customer1", "DomainName1"
"Customer2", "DomainName3"
"Customer1", "DomainName2"
"Customer3", "DomainName4"

在将domainname3添加到customer2之后,domainname3也会作为可能的子对象出现在customer1对象上。

结果树在调试器中是这样的:

Customer1--- some attributes
|__ Domainname1---some attributes
|__ Domainname2---some attributes
|__ Domainname3---some attributes
Customer2--- some Attribute 
|__ Domainname1---some attributes
|__ Domainname2---some attributes
|__ Domainname3---some attributes

我怎样才能得到计划好的结果?

powershell功能:

Function ReadCustomerDomains([string]$File )
{
$CSVData = Import-Csv  $File -Delimiter ","
$CustomerListObject = New-Object PSObject 

ForEach ($Item in $CSVData)   
{
if ( Get-Member -InputObject $CustomerListObject -name $($Item.Kunde) )
{
}
else
{
$CustomerListObject | Add-Member -NotePropertyName "$($Item.Kunde)" -NotePropertyValue $Customer_Properties
}
}
ForEach ($Item in $CSVData)   
{
$CustomerItem = $CustomerListObject.$($Item.Kunde)
Add-Member -InputObject $CustomerItem -NotepropertyName "$($Item.Domain)"  -NotePropertyValue $Customer_Domain_Properties
$CustomerItem =$Null 
}
$CustomerList += $CustomerListObject
return  $CustomerList
}

尝试如下:

$filename = "c:temptest.csv"
$headers = 'Customer', 'Domain'
$csv = Import-Csv -Path $filename -Header $headers
$customers = $csv | Group-Object -Property 'Customer'
$table = [System.Collections.ArrayList]::new()
foreach($customer in $customers)
{
$newRow = New-Object -TypeName psobject
$newRow | Add-Member -NotePropertyName Customer -NotePropertyValue $customer.Name
$domainObj = New-Object -TypeName PSObject
foreach($domain in $customer.Group)
{
$attributes = [System.Collections.Generic.Dictionary[string,object]]::new()
for($i = 0; $i -lt 4; $i++)
{
$attributes.Add('Attribute' + $i, $i)
}
$domainObj | Add-Member -NotePropertyName $domain.Domain -NotePropertyValue $attributes
}
$newRow | Add-Member -NotePropertyName Domains -NotePropertyValue $domainObj
$table.Add($newRow) | Out-Null
}
$table | foreach { $_.Customer; $_.Domains | foreach {$_ | Format-List} }

相关内容

  • 没有找到相关文章

最新更新