我如何编写脚本" 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"
}
我错过了一些在我鼻子底下的东西吗?
答案 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")))