【问题标题】:Execute commands to output window using powershell使用powershell执行命令以输出窗口
【发布时间】:2019-04-26 00:00:28
【问题描述】:

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

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

2) 此时它正在等待你运行这个命令 "sp_password 'oldPassword', 'newPassword'" [keyboard Enter]

3) GO [键盘输入]

使用我构建的以下脚本,我可以登录,但无法执行步骤 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"

【问题讨论】:

    标签: powershell sybase sap-ase


    【解决方案1】:

    出了什么问题: 通过输入第一个命令,您输入了“内部”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 命令文件的说明。

    【讨论】:

    • @lftime Tudor 感谢您的评论。我会尝试你的两个选项并检查它是否有效......
    【解决方案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
    $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.!"
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        相关资源
        最近更新 更多