[英]add data to an array powershell
I am not sure why the output is not working correctly. 我不确定为什么输出无法正常工作。 Can someone please advise.
有人可以请教。 Essentially the array works, except for 1 major issue.
从本质上讲,该阵列有效,除了1个主要问题。 everytime a new object gets added to the array it replaces all the previous objects in the array with the last one entered.
每次将新对象添加到数组时,它都会使用最后输入的对象替换数组中的所有先前对象。
I get my array of objects, I just want it to add to the array the new data object, not replace all previous entries and add the new data object. 我得到了对象数组,我只是希望它向数组中添加新的数据对象,而不是替换所有先前的条目并添加新的数据对象。
I can not figure out what I am doing wrong. 我不知道我在做什么错。
$RptInfo = New-Object Object -TypeName PSObject
Add-Member -MemberType NoteProperty -Name Counted -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name ItemName -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name ItemType -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name LineURI -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name RegistrarPool -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name Identity -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name Office -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name OfficeName -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name DisplayName -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name Location -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name VoicePolicy -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name DialPlan -Value "" -InputObject $RptInfo
[array]$RptArray = @()
$VoicePolicy_Table = Get-CsUser | Where {$_.EnterpriseVoiceEnabled -eq $true} | Sort-Object -Property VoicePolicy | Group-Object -Property VoicePolicy, 'Voice Policy'
$DialPlan_Table = Get-CsUser | Where {$_.EnterpriseVoiceEnabled -eq $true} | Sort-Object -Property DialPlan | Group-Object -Property DialPlan, 'Dial Plan'
foreach ($VP in $VoicePolicy_Table) {
$RptInfo.Counted = $VP.Count
$RptInfo.ItemName = $VP.Name
$RptInfo.ItemType = 'Voice Policy'
$RptArray += $RptInfo
}
ForEach ($RPT in $RptArray) {
$RPT.ItemName
}
The problem is what's happening when you do this: 问题是当您这样做时正在发生什么:
$RptArray += $RptInfo
You might be thinking of $RptInfo
as a value type, and that you are copying a new value to the array. 您可能会认为
$RptInfo
是值类型,并且您正在将新值复制到数组。
$RptInfo
is actually a reference . $RptInfo
实际上是一个引用 。 Inside the loop you are simply modifying the existing object, and then adding another reference to this single object onto the array. 在循环内部,您只需修改现有对象,然后将对该单个对象的另一个引用添加到数组中。
This might work: 这可能起作用:
function New-ReportInfo
{
$RptInfo = New-Object Object -TypeName PSObject
Add-Member -MemberType NoteProperty -Name Counted -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name ItemName -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name ItemType -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name LineURI -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name RegistrarPool -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name Identity -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name Office -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name OfficeName -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name DisplayName -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name Location -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name VoicePolicy -Value "" -InputObject $RptInfo
Add-Member -MemberType NoteProperty -Name DialPlan -Value "" -InputObject $RptInfo
$RptInfo
}
[array]$RptArray= @()
foreach ($VP in $VoicePolicy_Table)
{
$RptInfoCopy = New-ReportInfo
$RptInfoCopy.Counted = $VP.Count
$RptInfoCopy.ItemName = $VP.Name
$RptInfoCopy.ItemType = 'Voice Policy'
$RptArray += $RptInfoCopy
}
Or, if you are fond of piping 或者,如果您喜欢管道系统
$RptArray = ($VoidPolicy_Table | % {
$RptInfoCopy = New-ReportInfo
$RptInfoCopy.Counted = $_.Count
$RptInfoCopy.ItemName = $_.Name
$RptInfoCopy.ItemType = 'Voice Policy'
$RptInfoCopy
})
For me iterating $VoidPolicy_Table and building $RptArray in one step and populating the three properties looks more stringent: 对我而言,迭代$ VoidPolicy_Table并一步构建$ RptArray并填充这三个属性看起来更加严格:
$VoicePolicy_Table = Get-CsUser | Where {$_.EnterpriseVoiceEnabled -eq $true} | Sort-Object -Property VoicePolicy | Group-Object -Property VoicePolicy, 'Voice Policy'
$DialPlan_Table = Get-CsUser | Where {$_.EnterpriseVoiceEnabled -eq $true} | Sort-Object -Property DialPlan | Group-Object -Property DialPlan, 'Dial Plan'
$RptArray = ForEach ($VP in $VoicePolicy_Table) {
[PSCustomObject]@{
Counted = $VP.Count
ItemName = $VP.Name
ItemType = 'Voice Policy'
LineURI = ""
RegistrarPool = ""
Identity = ""
Office = ""
OfficeName = ""
DisplayName = ""
Location = ""
VoicePolicy = ""
DialPlan = ""
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.