2016-09-29 62 views
0

我该如何编写脚本“Does String -contains -not _”/“字符串是否包含除_之外的任何内容?如何做一个-Contain -Not:字符串包含“以外的任何东西”

我没有被卡住,因为我发现了足够好的解决方法。比别的更好奇。

例子:

$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

相关问题