【问题标题】:Computername and string search计算机名和字符串搜索
【发布时间】:2015-04-14 19:41:34
【问题描述】:

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

我试过了:

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

将其转换为字符串,然后在$test 中进行搜索:

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

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

【问题讨论】:

    标签: string powershell search


    【解决方案1】:

    $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 已经是一个字符串。

    【讨论】:

      【解决方案2】:

      好吧,我想通了……比我想象的要简单得多。这是答案:-匹配

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

      【讨论】:

      • -match 使用正则表达式搜索模式。但是,您只是尝试搜索静态文本,这意味着它没有必要(而且效率有些低)。 .contains 如果您按照我在回答中演示的那样使用它,它应该可以正常工作。
      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多