使用Powershell过滤大型数据

col17t5w  于 2023-03-18  发布在  Shell
关注(0)|答案(2)|浏览(137)

我开始使用Powershell,并试图过滤出大的信息,只有几行,我想。不知道确切的语法来做到这一点。我有一个大的SSIS包(dtsx),并试图获得行以“openrowset”开始,以显示哪个表正在加载或“SQLTASK:SslStatementSource”,以了解什么样的额外的逻辑正在运行。这是可能的过滤下来。目前数千行正在打印。我目前的代码是

get-content Z:\Database\SSIS\TestStg.dtsx

样品

lyfkaqu1

lyfkaqu11#

正如前面所指出的,DTSX是一种XML格式,因此应该使用XPath将其解析为XML,而不是尝试使用字符串解析。
这个Powershell脚本应该演示如何返回OpenRowset属性的值。
注意:我不是一个真正的PowershellMaven,所以这可以用一种更好的方式来完成。

[xml]$dtsx = Get-Content "my-dtsx-file.dtsx"

# Add the namespace.
$ns = new-object Xml.XmlNamespaceManager $dtsx.NameTable
$ns.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts")

# The XPath in question is
# /DTS:Executable/DTS:Executables/DTS:Executable[1]/DTS:ObjectData/pipeline/components/component[x]/properties/property[y]/@name
$properties = $dtsx.SelectNodes("//property", $ns) 

foreach ($node in $properties)
{
    if ($node.name -eq "OpenRowset")
    {
        Write-Host $node.InnerXml
    }
}
iezvtpos

iezvtpos2#

使用Select-String正则表达式命令:

Select-String -LiteralPath Z:\Database\SSIS\TestStg.dtsx -Pattern '^\s*openrowset'

正则表达式模式^\s*openrowset描述:

^           # start of string/line
\s*         # zero or more whitespace characters
openrowset  # the literal word "openrowset"

相关问题