I tried for hours to get this to work any help would be greatly appreciated as it would massively speed up merge operations.
Why is $.$something or $.$($something) a no go??
[pre]$fieldsIneed = import-csv ‘C:\Users\NickCrooks\OneDrive - ABC_CO\XYZ_CO-Data_Editing\SQL\HTABC.rpt’ #Select * from Table 1;
$xyzvend = import-csv ‘someotherfile.rpt’ #select * from table2;
#$fieldsIneed | GM -MemberType NoteProperty | Select Name, Definition | Out-GridView
$fieldsIneed | %{
$p = $_ #this property being evaluated at the moment
if($p -inotin $($xyzvend | GM -MemberType NoteProperty)){$xyzvend | Add-Member -MemberType NoteProperty -Name $p.name -Value ‘’ -force}
}
#$xyzvend | GM -MemberType NoteProperty | ?{$.name -like “EFT*”} #confirm success
$propsIcareabout = $xyzvend | GM -MemberType NoteProperty | ?{$.name -like “EFT*”} | select name #easy in this case
#$propsIcareabout += ‘some other manual props if needed’
#region improve data gathering
#region merge properties
$propsIcareabout | %{
$p = $_.name
Write-verbose “Clear the Hash” -Verbose
$hash = @{} #setup merger object, you need matching keys and you can make those keys if needed
Write-Host “$($p)” -ForegroundColor Yellow
pause
#region Object 1
#Go to object 1, git yo stuff and git out
$fieldsIneed | ?{$.vendorid -ne ‘’ -and $.vendorid -ne $null -and $(if($.ADRSCODE.gettype() -like “string”) {$.ADRSCODE.trim()}) -eq ‘PRIMARY’} | %{ #assume data cleaning is always needed
$vid = $_.vendorid.trim() #ideally no trimming or formatting needed
#Write-verbose “Found $($p) and $($vid)” -Verbose
#pause
if( -not $hash.ContainsKey($vid)){$hash.Add($vid, $_.$p)}
$hash
#pause
#Note improvement - if the entire property to be merged is null then skip next iteration
#end object 1 data gathering loop
}
#endregion object 1
#region object 2
write-warning “Begin Second Object - Data Write”
$xyzvend | ?{$.vendorid -ne ‘’ -and $.vendorid -ne $null} | %{
$vid = $.vendorid.trim()
write-verbose “$($vid)” -verbose
<#$.“$($p.tostring())”
$.$p
$test = '$.'+$p
& $test.tostring()
$.psobject.properties.$($p.tostring())
[string]$omfg = $p
[string]$killmenow = $p.tostring()
$.psobject.properties.$omfg
$.$omfg
#$.psobject.properties.add($omfg)
#>
$_
#$xyzvend.$p = $crmhash[$($vid)]
write-host “$($p)” -ForegroundColor Green
pause
}
#endregion object 2
}[/pre]