$ Hostname.contains |其中{$ _。name -Match(“ test”)})

时间:2019-04-22 18:44:56

标签: powershell

您好,我已经在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")})

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

有关-Match的更多信息,请参见About Comparison Operators,其中包含有关正则表达式的链接。

答案 1 :(得分:0)

这种方式...

$Hostname = 'Lab01'
$Hostname = 'LabTest01'
$Hostname = 'NewLabTest'
$Hostname = 'Test05'

if ($Hostname -Match 'test|test01|test02|test03|test04|test05')
{ "$Hostname matches criteria" }
Else {Write-Warning -Message "$Hostname does not match criteria"}


# Results

WARNING: Lab01 does not match criteria
LabTest01 matches criteria
NewLabTest matches criteria
Test05 matches criteria