daninthemix
daninthemix

Reputation: 2570

How to iterate through an array of objects in Powershell

I'm doing some basic validation on form fields. What's the correct way to iterate through an array of objects to validate them? When I try the below I get

The property 'BackColor' cannot be found on this object. Verify that the property exists and can be set.

I guess what I'm missing is a way of telling Powershell these are references to other variables, rather than variables themselves.

$MandatoryFields = @(
    'txtUsername',
    'txtFirst',
    'txtLast',
    'txtEmail',
    'ComboLicense'
)

ForEach ($Field in $MandatoryFields) {
    If ([string]::IsNullOrWhitespace($Field.text)) {
        $Validation = "failed"
        $Field.BackColor = "red"
    }
}

EDIT: Okay, what I needed was the actual variables in the array, like so:

$MandatoryFields = @(
    $txtUsername,
    $txtFirst,
    $txtLast,
    $txtEmail,
    $ComboLicense
)

Upvotes: 2

Views: 15501

Answers (2)

TheGameiswar
TheGameiswar

Reputation: 28900

Try adding your objects to an array like below

$objects = [System.Collections.ArrayList]@()

$myObject = [PSCustomObject]@{
    Name     = 'Kevin'
    Language = 'PowerShell'
    State    = 'Texas'
}


$objects.add($myObject)

$myObject1= [PSCustomObject]@{
    Name     = 'Kevin'
    Language = 'PowerShell'
    State    = 'Texas'
}


  $objects.add($myObject1)

foreach($obj in $objects){

$obj.firstname

}

Upvotes: 2

Bee_Riii
Bee_Riii

Reputation: 1039

I'm assuming your using System.Windows.Forms to create your form. If that's the case when adding controls you should assign a name to the control. Then you can loop through your controls and check if the control name matches your list of mandatory controls and then execute your check.

$MandatoryFields = @(
    'txtUsername',
    'txtFirst',
    'txtLast',
    'txtEmail',
    'ComboLicense'
)

$Controls = MyForm.controls

ForEach ($c in $Controls) {
    ForEach ($Field in $MandatoryFields) {
        if ($c.Name -eq $Field) {
            If ([string]::IsNullOrWhitespace($c.text)) {
                $Validation = "failed"
                $c.BackColor = "red"
            }
        }
    }
}

Upvotes: 0

Related Questions