You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell筛选不含指定通配符字符的SAM_ACCOUNT_NAME值问题

解决PowerShell筛选不含指定通配符字符的SAM_ACCOUNT_NAME问题

你的核心问题是用错了运算符:-notcontains是用来判断集合是否包含某个单一值的,不是用来检查字符串里有没有特定字符的。要筛选不包含指定通配符的字符串,应该用正则表达式配合-notmatch运算符。

正确实现步骤

  • 定义需要排除的字符集合,转义正则里的特殊字符([、]、*在正则里是特殊符号,需要用反斜杠转义)
  • 用-notmatch匹配SAM_ACCOUNT_NAME字段,排除包含任意禁止字符的条目
  • 可与你的日期筛选条件合并,用-and连接多条件

完整代码示例

# 定义需要排除的通配符字符,注意正则转义规则
$forbiddenCharsRegex = '[*"\[\]]'

# 读取Excel并同时筛选日期和不含禁止字符的SAM账号
$SAMAccounts = Import-Excel -Path "$PSScriptRoot\PulledData.xlsx" | 
    Where-Object {
        # 日期筛选:匹配当天0点的格式化日期
        $_.DT -eq (Get-Date -Hour 0 -Minute 0 -Second 0 -Format 'G') -and
        # 筛选不包含任何禁止字符的SAM_ACCOUNT_NAME
        $_.SAM_ACCOUNT_NAME -notmatch $forbiddenCharsRegex
    }

代码说明

  • [*"\[\]]:正则字符集,匹配*、"、[、]中的任意一个字符
  • -notmatch:当字符串不匹配正则表达式(即不含任何禁止字符)时,保留该条目
  • 使用脚本块形式的Where-Object,更灵活地同时处理日期和字符筛选两个条件

测试验证

针对你提供的示例数据:

SAM_ACCOUNT_NAME     DT
!@$#*                1/11/2024
User1                1/11/2024

运行代码后,只会保留User1这条符合要求的记录。

内容的提问来源于stack exchange,提问作者Robert Stolle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:16:00