首页 > 解决方案 > $Hostname.contains | 其中 {$_.name -Match ("test")})

问题描述

您好,我已经在 PowerShell 中完成了这个脚本

$hostname = get-content env:computername
$host = "Desk"
if ($hostname.contains | Where {$_.name -Match ("test")})
{
$chars = [char[]]"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
$name = [string](($chars[0..25]|Get-Random)+(($chars|Get-Random -Count 
10) -join ""))

Rename-Computer -NewName $host$nam
Write-Host -foregroundcolor Yellow "New Computername is $host$name"
}

else {
Write-Host -foregroundcolor Red  "This is not a test pc "
Start-Sleep -s 10
Exit
}

当我只寻找“测试”这个词时,这工作正常我想要做的是有更多的搜索条件,比如

if ($hostname.contains | Where {$_.name -Match ("test" -or "test01" -or 
"test02" -or "test03" -or "test04" -or "test05")})

谢谢你。

标签: powershell

解决方案


-Match运算符是不区分大小写的正则表达式匹配。这意味着模式"test"将匹配test01, Zerotest, test1323454,Anythingtestanything等。如果您对要测试的模式有更多了解,如果您想继续使用正则表达式,则可以定制您的正则表达式匹配。

例如,如果您知道所有主机名都将以test数字开头和结尾,则可以使用-Match "^test\d+$". -CMatch如果区分大小写很重要,您应该使用。

  • ^是字符串的开头。
  • \d+是一位或多位数字
  • $是字符串的结尾

请参阅关于比较运算符以查看有关 的更多信息-Match,它包含有关正则表达式的链接。


推荐阅读