Передача свойств пользовательских переменных в оператор foreach - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь передать несколько переменных в один оператор foreach с помощью пользовательских свойств, но пользовательское свойство не передается внутри оператора foreach

$input = "one two three"

$tests = "true false true"

Add-Member -InputObject $tests -MemberType NoteProperty -Name "Name" -Value $input



foreach ($test in $tests) {

    Write-Host $test.Name
    Write-Host $test

}

ожидаемый результат:

one
true
two
false
three
true

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Так что есть много вещей, к которым можно обратиться. Прежде всего цикл foreach работает с массивом. Так что ваша декларация переменной неверна. Он должен быть разделен запятыми или в формате массива.

как это

$input = "one", "two", "three"

$tests = "true", "false", "true"

OR

$input = @("one", "two", "three")

$tests = @("true", "false", "true")

Foreach цикл не может работать одновременно с несколькими массивами; в вашем случае вы должны использовать For цикл как

$input = "one", "two", "three"

$tests = "true", "false", "true"


foreach ($test in $tests) ## For looping through single array
{
    Write-Host $test
}

If($input.Length -match $tests.Length)  ## Forlooping through multiple arrays
{
    For($i=0;$i -lt $input.Length; $i++) 
    {
        "$($input[$i]) :: $($tests[$i])"
    }
}

и для вашего ожидаемого формата , оно должно быть:

$input = "one", "two", "three"

$tests = @("true", "false", "true")

If($input.Length -match $tests.Length) 
{
    For($i=0;$i -lt $input.Length; $i++) 
    {
        "$($input[$i])"
        "$($tests[$i])"
    }
}

ВЫВОД:

one 
true 
two 
false 
three 
true

PS: теперь вы можете легко включить Add-Member -InputObject $tests -MemberType NoteProperty -Name "Name" -Value $input на основе этой логики.

Надеюсь, это поможет.

1 голос
/ 06 июня 2019

Как уже упоминалось в ответе Рандипса , у вас есть некоторые проблемы с настройкой / использованием вашего «массива», который он решает.

Что касается добавления пользовательских свойств, я думаю, что выработают в неизменности строк в .NET .После создания они не могут быть изменены, поэтому вы не можете добавлять новых участников.Другие типы работают нормально.Например, вы можете сделать это с помощью объекта процесса:

$propValue= "one two three"

$proc= (Get-Process)[33]

Add-Member -InputObject $proc -MemberType NoteProperty -Name "MyProperty" -Value $propValue

Write-Host $proc.MyProperty
Write-Host $proc

, который выдает следующий результат:

one two three
System.Diagnostics.Process (devenv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...