我正在创建一个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"
出了什么问题:通过输入第一个命令,您输入了“内部”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命令文件的说明。
在尝试了很多组合之后,最终我能够让它发挥作用。发布我的脚本,以便它可以对其他人有所帮助。
$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.!"
使用isql.exe登录Sybase后,需要通过调用sp_password进入isql.exe会话来更改密码。在您的代码中,您只是执行login命令。我不认为你进入了isql.exe的会话
看看下面的链接,我想这可能是有用的,可能更好的方法来更改数据库帐户密码。