我有一台安装了 Oracle 10G 的 RHEL 服务器。我需要编写一个 powershell 脚本来查询我的数据库并获取输出。我已经导入了 Posh-SSH 模块,能够连接到我的 RHEL 服务器并使用执行命令,Invoke-SSHCommand
但是,我需要帮助使用我的执行 sqlplus 命令Invoke-SSHCommand
。通常,我们可以使用 EOF 在 perl 中实现这一点,但我找不到任何使用 powershell 完成此操作的方法。
使用 EOF 的 Perl 代码:
$command="export ORACLE_SID=database
sqlplus -S user/password<< EOF
set feedback off
select username from dba_users;
EOF"
我的 Powershell 代码:
$command="export ORACLE_SID=database
sqlplus -S user/password<< EOF
set feedback off
select username from dba_users;
EOF"
$result = Invoke-SSHCommand -Index 0 -Command $command
Write-Output $result
我的 Powershell 输出:
Host : XX.XX.XXX.XXX
Output :
ExitStatus : 127
我猜想,Powershell 可以理解 EOF 字符。
有人能帮我把这个转换成 powershell 吗?我试过很多方法,但都徒劳无功。每次执行此代码时,我都会得到退出代码:127。
答案1
您在 Linux 上使用的“EOF”字符串不是字符。您使用的是“此处文档”。EOF 只是一个字符串,用于让 perl 知道您的此处文档在何处结束。我总是使用一些不太可能在此处文档中找到的东西,例如 fInI。
Powershell。是的。对于我们这些 *nix 用户来说简直就是噩梦。
答案2
我对 Linux 命令不太了解。你可以尝试
$UserName = "username"
$Password = "password"
$tnsalias = "tnsalias"
$SqlQuery =
@'
set feedback off
select username from dba_users;
exit
'@
Invoke-SSHCommand -Command "$SqlQuery |
sqlplus $username/$password@$tnsalias"