Powershell 如何通过管道传递交互式命令
Powershell how to pipe an interactive command
我通过交互式 SQL-Command-Line-Utility 连接到数据库,当我执行 SQL 命令时,我想将输出传输到另一个电源 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 的管道正在运行。尽管如此,我还是可以通过 > 将输出重定向到一个文件,但我认为它已在 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()
但我不想在脚本中以明文形式存储我的密码。我想登录到一个会话,然后执行命令,然后通过管道传输我的信息。
您不能在控制台应用程序内使用 cmdlet。控制台应用程序 return 文本,而 cmdlet 使用对象。您需要使用类似第二个样本或 运行 a "script" in 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()
你可以代替
go | out-gridview
with
go > out-gridview
In this way, U just redirected the output to out_gridview.
我通过交互式 SQL-Command-Line-Utility 连接到数据库,当我执行 SQL 命令时,我想将输出传输到另一个电源 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 的管道正在运行。尽管如此,我还是可以通过 > 将输出重定向到一个文件,但我认为它已在 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()
但我不想在脚本中以明文形式存储我的密码。我想登录到一个会话,然后执行命令,然后通过管道传输我的信息。
您不能在控制台应用程序内使用 cmdlet。控制台应用程序 return 文本,而 cmdlet 使用对象。您需要使用类似第二个样本或 运行 a "script" in 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()
你可以代替
go | out-gridview with go > out-gridview In this way, U just redirected the output to out_gridview.