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

时间:2019-04-26 00:00:29

标签: powershell sybase sybase-ase

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

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

2)此时,它正在等待您运行此命令“ sp_password'oldPassword','newPassword'“ [键盘Enter]

3)转到[键盘输入]

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

我是PowerShell的新手,但是我尝试在步骤2中使用Write-Output,Write-Host,Invoke-Expression,Invoke-Command,但它不起作用

$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

3 个答案:

答案 0 :(得分:2)

出了什么问题: 通过输入第一个命令,您输入了“ inside” 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 :(得分: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.!"

答案 2 :(得分:0)

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

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

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