使用 Powershell 查找 SSIS 包中的存储过程
Use Powershell to Find Stored Procedures in SSIS Packages
我正在尝试使用 PowerShell 搜索目录中的所有 SSIS 包,并且 return 以下内容:
- 文件的路径和名称
- 包含存储过程名称的行,即"exec mystoredproc"
我想用于搜索的条件只是 "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
对象(请注意将 -File
与 Get-ChildItem
一起使用或过滤掉 PSIsContainer
属性 ).它 returns 一个对象,其路径、文件名和命令以 exec(ute) <contiguous non-spaces>
形式的字符串形式出现
我正在尝试使用 PowerShell 搜索目录中的所有 SSIS 包,并且 return 以下内容:
- 文件的路径和名称
- 包含存储过程名称的行,即"exec mystoredproc"
我想用于搜索的条件只是 "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
对象(请注意将 -File
与 Get-ChildItem
一起使用或过滤掉 PSIsContainer
属性 ).它 returns 一个对象,其路径、文件名和命令以 exec(ute) <contiguous non-spaces>