计算机名和字符串搜索

Computername and string search

遇到一些字符串问题,我可以使用 $env:computerName 获取计算机名称,它 returns 类似于 ABC1211。我猜 ABC1211 是一个对象,我想进行搜索。我想在其中搜索字符 ABC,然后我需要用证书做一些其他事情。我在搜索 ABC.

时遇到问题

我试过了:

[string[]]$test = $env:computerName 

将其转换为字符串,然后通过以下方式在 $test 中进行搜索:

if ($test.contains(("DEF")) {
    Write-Host "Yeah" 
}
else {
    Write-Host "NO"
} 

但它不起作用。我错过了什么吗?我猜这很简单,但我就是不明白。

$env:computerName 已经是一个字符串。无需将其强制转换为 [string[]]。直接在变量上调用.contains方法即可:

if ($env:computerName.contains("ABC")) {
    Write-Host "Yeah" 
}
else {
    Write-Host "NO"
}

顺便说一句,将变量转换为 [string[]] 会生成一个字符串数组,而不是单个字符串:

PS > [string[]]$test = $env:computerName     
PS > $test.GetType()

IsPublic IsSerial Name                                     BaseType                 
-------- -------- ----                                     --------                 
True     True     String[]                                 System.Array             


PS >

因此,$test 实际上是 ($env:computerName,) 的形式,而您使用的是 Array.Contains 而不是 String.Contains

要转换为字符串,您只需使用 [string]:

[string]$test = $env:computerName

但正如我上面所说,这是不必要的,因为 $env:computerName 已经是一个字符串。

好的,我想通了...比我想象的要简单得多。这是答案:-match

我只需要使用它而不是 .contains 或 -like 我也不需要将对象更改为字符串。