簡體   English   中英

Powershell 如何通過管道傳輸交互式命令

[英]Powershell how to pipe an interactive command

我通過交互式 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 都在工作。 我可以通過 > 將輸出重定向到一個文件,但我認為它是在 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。 控制台應用程序返回文本,而 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()

你可以更換

| out-gridviewgo > out-gridview這樣,U 只是將輸出重定向到 out_gridview。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM