根据x个字符搜索计算机名称

时间:2017-11-09 14:32:52

标签: powershell

我正在尝试搜索计算机名称并根据比较名称的6-8个字符搜索名称,然后将其移动到相应的OU。我认为需要包括正则表达式,但我需要帮助。请指教

Set-ExecutionPolicy Bypass -Force
Import-Module ActiveDirectory
#$computername = gc env:computername
$computername = "vststsystest01"
#if ($env:computerName.contains("APP")) {Write-Host $env:computerName}
if ($computername.contains(" ") | Get-ADComputer $computername | Move-
ADObject -Targetpath "ou=ou_name,dc=DC,dc=cient,dc=com"

需要查看名称vststsystest01中的字符 - 应搜索6-8个字符。例如,如果它包含SYS,则将其移动到相应的OU。

2 个答案:

答案 0 :(得分:3)

编辑:我误认为OP包含了一个数组集合的语句。他实际上是在looks for the specified string and returns $True if it is indeed a substring

的单个字符串上使用它

我相信您正在寻找-like comparison operator

If ($ComputerName -like '*vs2016*')
{
    Get-ADComputer $ComputerName | Move-ADObject -TargetPath $Path
}

更新

如果您正在尝试搜索主机名中不变的特定字符,则可以使用.Substring()访问它们以及正则表达式OR |运算符。或者,我认为您应该使用switch声明。

## Substring(5,3) captures 3 characters starting at position 5 (6th character)
Switch ($ComputerName.Substring(5,3))
{
    'SYS' { <# logic #> }
    'TIT' { <# logic #> }
    'TAT' { <# logic #> }
    Default { <# catch-all if it doesn't match #> }
}

答案 1 :(得分:1)

关于您的上一次修改:

$computername = "vststsystest01"

if($computername.substring(5,3) -match "Sys|Sec|App"){
    Get-ADComputer $computername | Move-ADObject -Targetpath "ou=ou_name,dc=DC,dc=cient,dc=com"
}