powershell 包含不工作

标签 powershell if-statement filtering contains

我正在尝试使用 $Share.Name 按每个共享的名称进行过滤.但是,当我尝试使用 -contains 时在 if下面的语句,我没有得到任何结果。

我想要的结果应该是ADMIN$ - C:\ADMIN$
我正在努力获得一个变量,例如:$ExcludeShares = "ADMIN$"并根据 $String.Name 进行过滤在 $ExcludeShares
我对其他过滤方法的想法持开放态度。

提前致谢!

function GetAllUsedShares{
    [psobject]$Shares = Get-WmiObject -Class win32_share
    Foreach($Share in $Shares){
        $name = [string]$Share.Name
        if ($name -contains 'admin'){
            Write-Host $Share.Name - $Share.Path
        }

    }   
}

最佳答案

包含旨在针对数组工作。考虑以下示例

PS C:\Users\Cameron> 1,2,3 -contains 1
True

PS C:\Users\Cameron> "123" -contains 1
False

PS C:\Users\Cameron> "123" -contains 123
True

如果您想查看字符串是否包含文本模式,那么您有几个选择。前 2 个将是 -match运算符或 .Contains()字符串方法
  • -match将是在和 If 语句中使用的更简单的示例之一。注:-Match支持 .Net 正则表达式,因此请确保不要输入任何特殊字符,因为您可能无法获得预期的结果。
    PS C:\Users\Cameron> "Matt" -match "m"
    True
    
    PS C:\Users\Cameron> "Matt" -match "."
    True
    
    -match默认情况下不区分大小写,因此上面的第一个示例返回 True。第二个示例希望匹配任何字符,即 .用正则表达式表示,这就是它也返回 True 的原因。
  • .Contains() :-match很棒,但是对于简单的字符串,您可以......
    "123".Contains("2")
    True
    
    "123".Contains(".")
    False
    

    请注意 .Contains()区分大小写
    "asdf".Contains('F')
    False
    
    "asdf".Contains('f')
    True
    
  • 关于powershell 包含不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436764/

    相关文章:

    javascript - 过滤不包含来自其他数组的字符串的字符串?

    image - 如何以编程方式识别色情图片?

    asp.net - 有什么方法可以过滤 IIS 提供的页面中的某些内容吗?

    object - 在 PowerShell 中使用多个参数实现自己的方法

    Azure DevOps : while using Release Pipeline in classic mode, 我无法将变量的值传递给其他任务

    windows - 使用 powershell Invoke-AddCertToKeyVault 命令创建 Azure 自签名证书

    c++ - 在嵌套的 if 语句中使用函数来触发 Action

    mysql 检查一行的最后更新时间

    powershell - 从 Powershell 打包 Visual Studio 项目

    c++ - if 语句中非常奇怪的未处理异常错误