-Match

时间:2019-12-10 20:25:19

标签: powershell

我正在搜索SQL脚本(通过PowerShell)以确保它们未使用表变量。这是我的简单支票:

$Script = $Script.ToLower()

if ($Script -Match "declare @* table"){
    #do stuff
}

因此,如果脚本包含:

declare @mytable table(
blah blah
)

它会识别并执行操作。

我在中间尝试了@*和其他一些通配符选项,因为我不知道表名。我可以在要搜索的字符串中间使用通配符吗?

3 个答案:

答案 0 :(得分:1)

您可以使用-like代替-match,以使通配符表现出所需的效果。

$script = @"
declare @mytable table(
blah blah
)
"@

if ($script -like "declare @* table*"){
    $true
} else {
    $false
}

答案 1 :(得分:0)

-match运算符使用regular expressions (regex)评估事物。匹配字符串中的@*将匹配0个或更多@个字符,而不是@及其后面的任何字符。

-like运算符使用您习惯的更简单的通配符表达式。尝试切换到该位置。

这是matching operators上的官方文档,以获取更多信息。

答案 2 :(得分:0)

在-match的正则表达式中,您会说.*而不是*

"declare @mytable table(" -match "declare @.* table"

True