使用 Powershell 查找 SSIS 包中的存储过程

Use Powershell to Find Stored Procedures in SSIS Packages

我正在尝试使用 PowerShell 搜索目录中的所有 SSIS 包,并且 return 以下内容:

我想用于搜索的条件只是 "exec",或者如果可能的话 "exec or execute",我想要以下字符串末尾的 space exec 是 returned.

的分隔符

我试过:

Get-ChildItem -recurse | Select-String -pattern "exec" | group path | select name

然而,这只是 return 文件名,而不是所需的附加文本。

如果有比 PowerShell 更好的方法来做到这一点,我愿意接受,但根据我目前的发现,这似乎是正确的方法。提前致谢!

编辑: 继续研究后,我发现这个命令

Get-ChildItem -recurse | Select-String -pattern exec,execute | Select filename,linenumber

似乎为我要查找的命令提供了正确的文件和行号。有什么方法可以打印 linenumber 引用的行而不是数字?我查看了 ForEach 和 Get-Content,但语法似乎不太正确。

下面是一个应该对您有用的函数:

function Get-StoredProcedure {
    [CmdletBinding()]
    [OutputType('System.Management.Automation.PSObject')]
    param(
        [Parameter(Position = 0, ValueFromPipeline)]
        [System.IO.FileInfo[]] $Path = (Get-ChildItem -Recurse -File)
    )

    process {
        foreach ($item in $Path) {
            [pscustomobject]@{
                'Path'    = Split-Path -Parent -Path $item.FullName
                'Name'    = $item.Name
                'Command' = ($item | Select-String -Pattern 'exec(ute)?\s[^\s]+').Matches.Value
            }
        }
    }
}

这将遍历您传递给它的任何 FileInfo 对象(请注意将 -FileGet-ChildItem 一起使用或过滤掉 PSIsContainer 属性 ).它 returns 一个对象,其路径、文件名和命令以 exec(ute) <contiguous non-spaces>

形式的字符串形式出现