Okay. Here's what I'm trying to do. I'm basically trying to make a 2D array in powershell by importing stuff from AD and a SQL database. I'm going to use the array to write, update, and delete rows in the database later in the script. What I'm having a problem with, is getting everything into one variable.
When I run my code, it adds the same user over and over again into the desired array. The very last item in the created to the $Table variable gets written over every single instance inside the $ToWrite.
I tried pausing after inputting all the variables into $Table, writing $Table to console, then writing $ToWrite to console. The $Table changes correctly in every loop, but again, once it writes to $ToWrite it overwrites each instance. I've tried multiple ways like .add(), PsCustomObject[], etc. I'm just stuck now.
Here's my semi-functioning code:
$AllPOCs = Get-ADGroupMember 'ALL POC'
$POCs = @()
$Counter = 0
$AllPOCs | ForEach-Object {
$Name = $AllPOCs[$Counter].SamAccountName
$TestPOC = Invoke-Sqlcmd -Query "SELECT * FROM TABLE WHERE CLIENT = '$Name'" -ServerInstance "SERVER\INSTANCE"
if ($TestPOC -eq $null) {
$POCs += Get-ADUser $Name -Properties * |
select -Property SamAccountName, GivenName, Surname, SID, EmailAddress
}
$Counter += 1
}
$ToWrite = @()
$Counter = 0
$SEQUENCE = Invoke-Sqlcmd -Query "Select TABLEFIELD FROM DATABASE WHERE NAME = 'FIELDID'" -ServerInstance "SERVER\INSTANCE"
$SEQUENCE = $SEQUENCE.RECNUM + 1
$Table = "" | select SEQUENCE, LASTUSER, GROUP, CLIENT, FNAME, NAME, EMAILID, USEDEPT, USELOCATION, CREATEDFROMSSD, DISPLAYCLIENTCOMMENTS, _INACTIVE_, WINUSERID, SELFSERVICEACCESS, SELFSERVICELICENSE, WIAENABLED, SID
#everything works correctly up to here
$POCs | ForEach-Object {
$Table.SEQUENCE = $SEQUENCE
$Table.LASTUSER = 'SYSTEMACCOUNT'
$Table.GROUP = 1
$Table.CLIENT = $POCs[$Counter].SamAccountName.ToUpper()
$Table.FNAME = $POCs[$Counter].GivenName.ToString()
$Table.Name = $POCs[$Counter].surname.ToString()
$Table.EmailID = 'SMTP:{' + $POCs[$Counter].EmailAddress.ToString() + '}' +
$POCs[$Counter].EmailAddress.ToString()
$Table.USEDEPT = 0
$Table.USELOCATION = 0
$Table.CREATEDFROMSSD = 0
$Table.DISPLAYCLIENTCOMMENTS = 0
$Table._INACTIVE_ = 0
$Table.WINUSERID = '\DOMAIN' + $POCs[$Counter].SamAccountName.ToString()
$Table.SELFSERVICEACCESS = 'TYPE'
$Table.SELFSERVICELICENSE = 1
$Table.WIAENABLED = 1
$Table.SID = $POCs[$Counter].SID.ToString()
$ToWrite += $Table #THIS DOESN'T WORK PROPERLY.
$SEQUENCE += 1
$Counter += 1
}
Output example:
SEQUENCE : 1206 LASTUSER : SYSTEMACCOUNT GROUP : 1 CLIENT : USERNAME FNAME : FIRSTNAME NAME : LASTNAME EMAILID : SMTP:{EMAIL}EMAIL USEDEPT : 0 USELOCATION : 0 CREATEDFROMSSD : 0 DISPLAYCLIENTCOMMENTS : 0 _INACTIVE_ : 0 WINUSERID : DOMAIN\USERNAME SELFSERVICEACCESS : TYPE SELFSERVICELICENSE : 1 WIAENABLED : 1 SID : S-1-Z-XX-CCCCCCCCCC-YYYYYYYYY-VVVVVVVVVV-125121 SEQUENCE : 1206 LASTUSER : SYSTEMACCOUNT GROUP : 1 CLIENT : USERNAME FNAME : FIRSTNAME NAME : LASTNAME EMAILID : SMTP:{EMAIL}EMAIL USEDEPT : 0 USELOCATION : 0 CREATEDFROMSSD : 0 DISPLAYCLIENTCOMMENTS : 0 _INACTIVE_ : 0 WINUSERID : DOMAIN\USERNAME SELFSERVICEACCESS : TYPE SELFSERVICELICENSE : 1 WIAENABLED : 1 SID : S-1-Z-XX-CCCCCCCCCC-YYYYYYYYY-VVVVVVVVVV-125121 SEQUENCE : 1206 LASTUSER : SYSTEMACCOUNT GROUP : 1 CLIENT : USERNAME FNAME : FIRSTNAME NAME : LASTNAME EMAILID : SMTP:{EMAIL}EMAIL USEDEPT : 0 USELOCATION : 0 CREATEDFROMSSD : 0 DISPLAYCLIENTCOMMENTS : 0 _INACTIVE_ : 0 WINUSERID : DOMAIN\USERNAME SELFSERVICEACCESS : TYPE SELFSERVICELICENSE : 1 WIAENABLED : 1 SID : S-1-Z-XX-CCCCCCCCCC-YYYYYYYYY-VVVVVVVVVV-125121
Any ideas?