Powershell - 从SQLPlus查询

时间:2016-02-06 14:58:36

标签: regex powershell sqlplus

我正在使用PowerShell脚本,该脚本利用SQLPlus查询oracle数据库。

查询是:select count(*) from table

powershell查询输出:

SQL*Plus: Release 11.2.0.1.0 Production on Sat Feb 6 09:50:52 2016

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options


  COUNT(*)
----------
    50

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

我目前正在使用下面的语句来检索Count,虽然它似乎没有捕获结果。

if($file -match 'count (?<count>\d+)'){$count=[int32]$matches['count']}

非常感谢任何帮助/指导。 谢谢!

1 个答案:

答案 0 :(得分:1)

我看到一个问题和一个潜在的问题。后者是我怀疑$file是一个字符串数组。这对您不利,因为您正在寻找基于上面几行文本的数字。

问题是你的正则表达式不是多行的,在你的样本中,这个数字与count不在同一行。你的正则表达式只匹配Count 50。这不是它在您显示的文本中的显示方式。

两个确保两个点都允许$file一个字符串,然后运行与“COUNT”之后遇到的第一个数字相匹配的多行正则表达式。保持你拥有的命名匹配逻辑,因为它很好。

# This can most likely be moved to where this is read in.
$file = $file | Out-String

# try and match the regex. 
if($file -match "(?s)Count.*?(?<count>\d+)"){
    [int32]$Matches.Count
}