如何用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
相关产品推荐
相关产品推荐

