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

如何用PowerShell筛选含/以xyz开头的SQL Server数据库?

搞定SQL Server数据库筛选问题:匹配含"xyz"或以"xyz"开头的库

嘿,我来帮你解决这个筛选问题!你之前用-contains没生效,是因为这个PowerShell运算符的作用和你预期的不一样——它是用来检查集合中是否存在完全匹配的元素,而不是判断单个字符串是否包含某个子串。要筛选数据库名称符合要求的,咱们得针对数据库的Name属性用字符串匹配的运算符,比如-like或者-match。

下面是修改后的完整脚本片段,给你两种筛选逻辑,按需选就行:

1. 筛选名称**包含"xyz"**的数据库

ForEach ($instance in Get-Content "D:\SQL_Servers.txt") {
    # 加载SMO程序集
    [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
    # 连接到目标SQL实例
    $s = New-Object Microsoft.SqlServer.Management.Smo.Server($instance)
    
    # 遍历实例下的所有数据库,筛选符合条件的
    foreach ($db in $s.Databases) {
        # 用 -like 做模糊匹配,*代表任意长度的字符
        if ($db.Name -like "*xyz*") {
            # 这里放你要执行的任务,比如输出数据库信息
            Write-Host "数据库名称: $($db.Name)"
            Write-Host "数据库大小(MB): $([math]::Round($db.Size, 2))"
            Write-Host "----------------------------------------"
        }
    }
}

2. 筛选名称以"xyz"开头的数据库

只需要把判断条件改成-like "xyz*"就可以了,示例:

if ($db.Name -like "xyz*") {
    # 在这里执行你的任务,比如获取详细大小信息
}

额外小提示

  • 如果需要区分大小写的匹配,可以用-clike(对应-like的大小写敏感版)或者-cmatch(正则的大小写敏感版);默认的-like是不区分大小写的。
  • 要是你有更复杂的匹配需求,比如正则规则,可以用-match:包含xyz用$db.Name -match "xyz",以xyz开头用$db.Name -match "^xyz"。
  • 不想包含系统数据库的话,可以再加个判断条件:if ($db.Name -like "*xyz*" -and $db.IsSystemObject -eq $false)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:05