【发布时间】:2017-05-09 20:38:16
【问题描述】:
我有一个需要循环的服务器数组,并且有一个仅分配给特定服务器的属性(这会在脚本后面发生)。
这是数组:
$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 从这里开始 别的 -=-=-=-=- test_fp 从这里开始 别的 -=-=-=-=- test_ts 从这里开始 别的 -=-=-=-=- test_ap 从这里开始 别的 -=-=-=-=- PS C:\用户\我\桌面>根据我认为它应该工作的方式,我应该看到这个:
... test_fp 找到 test_fp ...我也试过这个:
if ($test -contains '*fp') {
Write-Host "Found $_"
} else {
Write-Host 'end'
}
我只得到一个空行。
【问题讨论】:
-
将字符串的星号部分用作通配符在powershell中不起作用,删除星号并尝试。或者在这种情况下使用正则表达式模式。
-
$item只是一个普通字符串,它没有name属性。将$item.name -like '*fp*'更改为$item -like '*fp*' -
是在屏幕上看到它的唯一目标吗?因为,这就是 Write-Host 所能做的。无法重定向。
-
@t0mm13b:PowerShell 的
-like运算符的全部意义在于支持包含元字符的通配符模式,例如*(星号)。这里唯一的问题是输入由字符串组成,而字符串没有.Name属性。 -
@lit 可以重定向,在 PSv5 中已更改 - stackoverflow.com/questions/38523369/…
标签: arrays powershell if-statement foreach