2016-09-29 1 views
0

Как скрипт «Does String -contains -not _»/«Не содержит ли строка ничего, кроме _»?Как сделать -Contain -Not: String содержит «Anything other than»

Я не застреваю, так как нашел хорошую работу. Больше любопытства, чем что-либо еще.

Пример:

$String = 1,1,1,2,5 
$String -contains !(1) 

Это всегда приходит Ложные

Мое решение в моменты, чтобы удалить 1 и посмотреть, если это нуль, как так:

$String2 = $String -ne 1 
if ([String]::IsNullOrEmpty($String2)) { 
    Write-Host "True" 
} else { 
    Write-Host "False" 
} 

Реальный пример :

Мой скрипт предназначен, чтобы попробовать определенное действие, пока оно не сработает. В этом случае get-msoluser. В конце моего сценария я хочу посчитать любые ошибки (и перечислить их позже), но всегда будет ошибка, указанная для «get-msoluser», поскольку она терпит неудачу, пока она не сработает. Поэтому я стараюсь не включать эту ошибку в счет.

$Errors = $Error.InvocationInfo.MyCommand.Name 
if ($Errors -contains !("get-msoluser")) { 
    Write-Host "There was an error I actually care about" 
} 

ВМЕСТО Я должен сделать это:

$Errors = $Error.InvocationInfo.MyCommand.Name 
$ErrorsICareAbout = $Errors -ne "get-msoluser" 
if ([String]::IsNullOrEmpty($ErrorsICareAbout)) { 
    Write-Host "$ErrorsICareAbout.Count" 
} else { 
    Write-Host "There were errors you actually cared about" 
} 

Я пропускаю что-нибудь прямо у меня под носом?

+0

Вы пробовали 'Если (! ($ Ошибки -contains ("Get-msoluser")))' –

+0

Да. Прямо под носом. Благодаря! – kgs499

+0

'-notcontains' является оператором, который вы ищете. – wOxxOm

ответ

0

Вам просто нужно использовать -notcontains или добавить не оператор вокруг тогда все -contains сравнения как это:

If ($Errors -notcontains ("get-msoluser")) 

или

If (!($Errors -contains ("get-msoluser"))) 
0

Вместо того, чтобы отфильтровывать ошибку, попробуйте не производить ошибку в первую очередь. Чтобы подавить ошибки из определенной команды, вы можете установить действие с ошибкой в ​​SilentlyContinue.

Write-Error 'fail' -ErrorAction SilentlyContinue 

Таким образом, в случае повтора до Get-MsOlUser не работает, вы можете использовать что-то вроде

while($msolUser -eq $null) { 
    $msolUser = Get-MsOlUser ... -ErrorAction SilentlyContinue 

    #Wait a second before retrying. 
    Start-Sleep -Seconds 1 
} 

#Now work with $msolUser 

(вероятно, вы также хотите, чтобы положить верхний предел числа повторных попыток)

+0

В настоящее время я использую это, чтобы подавить ошибку на экране powershell, но она все еще появляется в переменной $ error. Повторите попытку после второго раза вручную человеком, запускающим его, с кнопкой «отменить» отменить всплывающее окно. – kgs499

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