I made a Powershell script that does a foreach on a strings array and collects only some info of them. This is the code:
begin {
$IMAGELIST = @(
"IMAGE Srv01 something something something Srv01_999888777 something"
"FRAG 1 something something"
"FRAG 2 something something"
)
}
process {
foreach ($LINE in $IMAGELIST) {
if ($LINE.StartsWith("IMAGE")) {
$IMAGELINE = $LINE.split()
$BKP_OBJ = [pscustomobject]@{
Server=$IMAGELINE[1]
Id=$IMAGELINE[5]
}
}
elseif ($LINE.StartsWith("FRAG")) {
$FRAGLINE = $LINE.split()
$BKP_OBJ | Add-Member -Force @{
CopyNumber = $FRAGLINE[1]
}
Write-Output -InputObject $BKP_OBJ
}
}
}
When I run the script I have an output with two objects with different CopyNumber values (expected result):
PS C:\Users\db> .\BkpScript.ps1
Server : Srv01
Id : Srv01_999888777
CopyNumber : 1
Server : Srv01
Id : Srv01_999888777
CopyNumber : 2
If I try to store the output in a variable, I have the same CopyNumber (not expected result):
PS C:\Users\db> $myvar = .\BkpScript.ps1
PS C:\Users\db> $myvar
Server : Srv01
Id : Srv01_999888777
CopyNumber : 2
Server : Srv01
Id : Srv01_999888777
CopyNumber : 2
What am I doing wrong?
This code will create a new object whenever it shall be output/piped:
begin {
$IMAGELIST = @(
"IMAGE Srv01 something something something Srv01_999888777 something"
"FRAG 1 something something"
"FRAG 2 something something"
)
}
process {
$Server = ""
$Id = ""
$CopyNumber = 0
foreach ($LINE in $IMAGELIST) {
if ($LINE.StartsWith("IMAGE")) {
$IMAGELINE = $LINE.split()
$Server=$IMAGELINE[1]
$Id=$IMAGELINE[5]
} elseif ($LINE.StartsWith("FRAG")) {
$FRAGLINE = $LINE.split()
$CopyNumber = $FRAGLINE[1]
Select-Object @{n='Server'; e={$Server}}, @{n='Id'; e={$Id}}, @{n='CopyNumber'; e={$CopyNumber}} -InputObject ''
}
}
}
The output looks like you expect in your question:
PS C:\Users\db\Desktop> .\test.ps1 Server Id CopyNumber ------ -- ---------- Srv01 Srv01_999888777 1 Srv01 Srv01_999888777 2 PS C:\Users\db\Desktop> $myvar = .\test.ps1 PS C:\Users\db\Desktop> $myvar Server Id CopyNumber ------ -- ---------- Srv01 Srv01_999888777 1 Srv01 Srv01_999888777 2