计算机名和字符串搜索
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 我也不需要将对象更改为字符串。
遇到一些字符串问题,我可以使用 $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 我也不需要将对象更改为字符串。