Arrays 如果foreach内的其他组件不';I don’我认为应该归还的就不要归还

Arrays 如果foreach内的其他组件不';I don’我认为应该归还的就不要归还,arrays,powershell,if-statement,foreach,Arrays,Powershell,If Statement,Foreach,我有一个需要循环使用的服务器阵列,并且只有一个属性分配给特定的服务器(这将在脚本后面发生) 以下是阵列: $test = @('test_dc','test_fp','test_ts','test_ap') 在阵列中,我有一个域控制器、文件/打印、终端服务器和应用程序服务器(按顺序排列) 应该获得该属性的服务器只有fp、ts和ap服务器 以下是我迄今为止所尝试的: foreach ($item in $test) { Write-Host $item "`n" Write-Host "

我有一个需要循环使用的服务器阵列,并且只有一个属性分配给特定的服务器(这将在脚本后面发生)

以下是阵列:

$test = @('test_dc','test_fp','test_ts','test_ap')
在阵列中,我有一个域控制器、文件/打印、终端服务器和应用程序服务器(按顺序排列)

应该获得该属性的服务器只有fp、ts和ap服务器

以下是我迄今为止所尝试的:

foreach ($item in $test) {
  Write-Host $item "`n"
  Write-Host "Start IF here `n"
  if ($item.Name -like '*fp*') {
    Write-Host "Found $item"
  } else {
    Write-Host "ELSE `n"
    Write-Host '-=-=-=-=-'
  }
}
这是它的输出:

PS C:\Users\me\Desktop> .\scratch.ps1 test_dc Start IF here ELSE -=-=-=-=- test_fp Start IF here ELSE -=-=-=-=- test_ts Start IF here ELSE -=-=-=-=- test_ap Start IF here ELSE -=-=-=-=- PS C:\Users\me\Desktop>
我只得到了一个空行。

您将看到额外的信息被写入主机,因为您对每个项目都有不确定的写入,不管它是否匹配。由于您还包含了
else
语句,因此您将看到为不匹配项编写的额外内容。您的
foreach
循环还指定对象的
name
属性,而
$test
数组仅包含字符串

以下是我对其进行的更新,将其限制为仅在循环中写入主机名(如果它与
*fp*
匹配),否则写入分隔符:

$test = @('test_dc','test_fp','test_ts','test_ap')
foreach ($item in $test) {
  if ($item -like '*fp*') {
    Write-Host "Found $item"
  } else {
    Write-Host '-=-=-=-=-'
  }
}
正在运行将输出以下内容的:

-=-=-=-=-
Found test_fp
-=-=-=-=-
-=-=-=-=-

您会看到额外的信息被写入主机,因为您对每个项目都有无限次的写入,不管它是否匹配。由于您还包含了
else
语句,因此您将看到为不匹配项编写的额外内容。您的
foreach
循环还指定对象的
name
属性,而
$test
数组仅包含字符串

以下是我对其进行的更新,将其限制为仅在循环中写入主机名(如果它与
*fp*
匹配),否则写入分隔符:

$test = @('test_dc','test_fp','test_ts','test_ap')
foreach ($item in $test) {
  if ($item -like '*fp*') {
    Write-Host "Found $item"
  } else {
    Write-Host '-=-=-=-=-'
  }
}
正在运行将输出以下内容的:

-=-=-=-=-
Found test_fp
-=-=-=-=-
-=-=-=-=-

在powershell中使用字符串的星号部分,就好像将其视为通配符不起作用一样,请删除星号并重试。或者在这种情况下使用正则表达式模式。
$item
只是一个普通字符串,它没有
name
属性。将
$item.name-like'*fp*'
更改为
$item-like'*fp*'
是在屏幕上看到它的唯一目标吗?因为,这就是写主机所能做的。无法重定向。@t0mm13b:PowerShell的类
运算符的整个要点是支持包含元字符的通配符模式,如
*
(星号)。这里唯一的问题是输入由字符串组成,并且字符串没有
.Name
属性。@如果可以重定向,它在PSv5中已更改-使用字符串的星号部分,就好像将其视为通配符在powershell中不起作用一样,请删除星号并重试。或者在这种情况下使用正则表达式模式。
$item
只是一个普通字符串,它没有
name
属性。将
$item.name-like'*fp*'
更改为
$item-like'*fp*'
是在屏幕上看到它的唯一目标吗?因为,这就是写主机所能做的。无法重定向。@t0mm13b:PowerShell的类
运算符的整个要点是支持包含元字符的通配符模式,如
*
(星号)。这里唯一的问题是,输入由字符串组成,字符串没有
.Name
属性。@如果可以重定向,它在PSv5中已更改-谢谢!我想是那样的,但我不确定。出于好奇,我将第二个示例中的
-contains
更改为
-like
,脚本返回了我所期望的“find”,但为什么它没有返回找到的文本或任何由
$表示的内容呢?谢谢!我想是那样的,但我不确定。出于好奇,我将第二个示例中的
-contains
更改为
-like
,脚本按照我的预期返回了“find”,但为什么它不返回找到的文本或任何由
$表示的内容呢?