使用powershell执行命令以输出窗口

问题描述 投票:1回答:3

我正在创建一个powershell脚本来更改sybase数据库帐户密码。我使用isql.exe来更改密码。以下是我尝试自动化的步骤:

1)isql.exe -SServerName -UUserAccount -PPassword [运行此命令,它应该使用用户帐户登录]

2)此时它正在等待你运行这个命令“sp_password'oldPassword','newPassword'”[键盘输入]

3)GO [键盘输入]

使用我构建的以下脚本我能够登录,但无法执行步骤2和3.我看到屏幕正在等待输入步骤2和步骤3,但我应该如何写入?

我是powershell的新手,但我尝试使用Write-Output,Write-Host,Invoke-Expression,Invoke-Command进行第2步,但它不起作用

$exe=$args[0] #argument which contains the path to isql.exe
$server=$args[1] #argument which contains server name
$user=$args[2]  #argument which contains user account
$oldPassword=$args[3] #argument which contains current password
$newPassword=$args[4] #argument which contains new password

$severPrefix= '-S'
$userPrefix= '-U'
$passwordPrefix='-P'
$scriptPrefix='-E'

$spPasswordCmd= 'sp_password'+' '+ $oldPassword +','+ $newPassword

$serverArg = $severPrefix + $server
$userArg= $userPrefix + $user
$passwordArg= $passwordPrefix + $oldPassword

#Step 1- isql.exe -SserverName -UuserAcount -PoldPassword
&$exe $serverArg $userArg $passwordArg 

#Step 2 - After login, execute "sp_password 'oldPassword', 'newPassword'"
#&$spPasswordCmd

#Step 3- Go

Read-Host -Prompt "Press Enter to continue"

enter image description here

powershell sybase sybase-ase
3个回答
2
投票

出了什么问题:通过输入第一个命令,您输入了“内部”ISQL提示符。 powershell脚本不会向该会话发送ISQL特定命令(步骤2和3)。在我看来,你有两个选择:

1.您需要打开ISQL会话并向该会话发送一个命令块。 This是一个关于Sysbase连接的链接,但我无法测试那里的东西。

2.通过阅读ISQL docs,您似乎可以将带有命令的文件传递给步骤1:

读入包含isql: isql -U alma -Ppassword < input_file执行查询的操作系统文件。该文件必须包含命令终止符。结果显示在您的终端上。读入包含查询的操作系统文件,并将结果定向到另一个文件:isql -U alma -Ppassword < input_file > output_file

我先把时间花在这里。在那里你可以找到一个链接,其中包含有关如何编写sysbase命令文件的说明。


1
投票

在尝试了很多组合之后,最终我能够让它发挥作用。发布我的脚本,以便它可以对其他人有所帮助。

$exe=$args[0] #argument which contains the path to isql.exe
$server=$args[1] #argument which contains server name
$user=$args[2]  #argument which contains user account
$currentPassword=$args[3] #argument which contains current password
$newPassword=$args[4] #argument which contains new password
$outputFilePath=$args[5] #argument which containes spPassword file script path

$spPasswordCmd = "sp_password `'$currentPassword`',`'$newPassword`'"

# Create file:

$spPasswordCmd | Set-Content "$outputFilePath"

# Append to file:

"GO" | Add-Content "$outputFilePath"

 isql -S"$server" -U"$user" -P"$currentPassword"  -i"$outputFilePath"

 write-host "****  Password Change Complete  *****"
 Read-Host -Prompt "Press Enter to exit.!"

0
投票

使用isql.exe登录Sybase后,需要通过调用sp_password进入isql.exe会话来更改密码。在您的代码中,您只是执行login命令。我不认为你进入了isql.exe的会话

看看下面的链接,我想这可能是有用的,可能更好的方法来更改数据库帐户密码。

https://www.cdata.com/drivers/sybase/powershell/

© www.soinside.com 2019 - 2024. All rights reserved.