2015-02-13 4 views
0

Имея некоторые проблемы с строкой, я могу получить имя компьютера, используя $env:computerName, и он возвращает что-то вроде ABC1211. Я предполагаю, что ABC1211 является объектом, и я хочу выполнить поиск. Я хочу найти это для символов ABC, а затем мне нужно сделать некоторые другие действия с сертификатами. У меня проблема с поиском ABC.Вычислитель и строковый поиск

Я пробовал:

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

, чтобы превратить его в строку, а затем выполнить поиск в $test по:

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

но не работает. Я что-то упускаю? Я предполагаю, что это действительно просто, но я просто не понимаю.

ответ

0

Хорошо, я понял, было намного проще, чем я думал. Вот ответ: -match

Мне просто пришлось использовать это вместо .contains или -like, также мне не нужно менять объект в строку.

+1

'-match' использует Regex для поиска шаблона. Однако вы пытаетесь искать только статический текст, что означает, что это необязательно (и несколько неэффективно). '.contains' должен работать нормально, если вы используете его, как я продемонстрировал в своем ответе. – iCodez

2

$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 уже строка.

Смежные вопросы