我正在尝试使用自定义属性将多个变量传递到一个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
任何帮助将不胜感激。
答案 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)