将自定义变量属性传递到foreach语句

时间:2019-06-06 08:13:09

标签: powershell

我正在尝试使用自定义属性将多个变量传递到一个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 个答案:

答案 0 :(得分:3)

因此,有很多事情要解决。首先,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 :(得分:1)

Randips's answer中所述,您在设置/使用“阵列”时遇到了一些问题,他解决了这个问题。

就添加自定义属性而言,我认为您遇到了immutability of strings in .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)