Powershell如何管道交互式命令

时间:2016-02-11 16:17:10

标签: windows powershell pipe sybase ase

我通过交互式SQL-Command-Line-Utility连接到数据库,当我执行SQL命令时,我想将输出传递给另一个power shell cmdlet,例如out-gridview。

让我们说例如我连接到Sybase ASE数据库,然后使用

登录
C:\users\user>isql -U<user> -S<SI>
[password]:
1>use master
2>go
1>SELECT * FROM sysusers
2>go | out-gridview

out-gridview的管道,也没有任何其他cmdlet正在运行。我可以通过&gt;将输出重定向到文件尽管如此,但我认为它是在isql-command-line-utility中预先实现的。

有谁知道如何管这些东西?我很清楚有这样的脚本

$query="select * from syslogins"
$conn=New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString= "driver={Adaptive Server Enterprise};
dsn=SERVER_NAME;db=master;na=IP,PORT;uid=SOMEUSER;pwd=******;"
$conn.open()
$cmd=new-object System.Data.Odbc.OdbcCommand($query,$conn)
$cmd.CommandTimeout=30
write-host $query
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.odbc.odbcDataAdapter($cmd)
write-host $ds
$da.fill($ds)
$ds.Tables[0] | out-gridview
$conn.close()

但我不想将密码以明文形式存储在脚本中。我想登录会话,然后执行命令,然后管道我的信息。

2 个答案:

答案 0 :(得分:0)

您无法在控制台应用程序中使用cmdlet。控制台应用程序返回文本,而cmdlet使用对象。您需要使用类似第二个示例的内容或在isql中运行“脚本”并将文本输出解析为对象。

由于您不想自动执行此操作,因此只需使用Read-Host即可在运行脚本时获取密码。

#Ask for password
$pass = Read-Host Password

$query="select * from syslogins"
$conn=New-Object System.Data.Odbc.OdbcConnection

#User password-variable in string
$conn.ConnectionString= "driver={Adaptive Server Enterprise};
dsn=SERVER_NAME;db=master;na=IP,PORT;uid=SOMEUSER;pwd=$pass;"
$pass = ""
$conn.open()
$cmd=new-object System.Data.Odbc.OdbcCommand($query,$conn)
$cmd.CommandTimeout=30
write-host $query
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.odbc.odbcDataAdapter($cmd)
write-host $ds
$da.fill($ds)
$ds.Tables[0] | out-gridview
$conn.close()

答案 1 :(得分:-1)

您可以替换

进入 | 外网格视图进入> 外网格视图 这样,U便将输出重定向到out_gridview。