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”,但为什么它不返回找到的文本或任何由$表示的内容呢?