遇到一些字符串问题,我可以使用$env:computerName
获取计算机名称,并返回类似ABC1211
的内容。我猜测ABC1211
是一个对象,我想进行搜索。我想在这里搜索字符ABC
,然后我需要用证书做一些其他的事情。我在搜索ABC
时遇到问题。
我试过了:
[string[]]$test = $env:computerName
将其转换为字符串,然后在$test
内进行搜索:
if ($test.contains(("DEF")) {
Write-Host "Yeah"
}
else {
Write-Host "NO"
}
但它不起作用。我错过了什么吗?我猜这很简单,但我只是没有得到它。
答案 0 :(得分:3)
$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
已经是一个字符串。
答案 1 :(得分:0)
好的,我想出来......比我想象的要简单得多。这是答案:-match
我只需要使用它而不是.contains或-like,我也不需要将对象更改为字符串。