怎么办-Contain -Not:String包含"除"以外的任何东西。

时间:2016-09-29 20:53:52

标签: powershell

我如何编写脚本" String -contains-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"
}

INSTEAD我必须这样做:

$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"
}

我错过了一些在我鼻子底下的东西吗?

2 个答案:

答案 0 :(得分: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

(您可能还希望对重试次数设置上限)

答案 1 :(得分:0)

您只需使用-notcontains或在整个-contains比较中添加not运算符,如下所示:

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

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