having trouble capturing java keytool output within powershell

Welcome Forums General PowerShell Q&A having trouble capturing java keytool output within powershell

Viewing 2 reply threads
  • Author
    • #203625
      Topics: 1
      Replies: 0
      Points: 12
      Rank: Member

      my team and I have been working on script in powershell that will find old versions of Java jre\jdk and update them to the latest version. We have been able to get the script to to complete 98% of all that we want to accomplish but seem to be having trouble with one section of the script. A small portion of the script calls the java keytool excecutable to find and old keystore and update new keystore. We have the commands to complete the task and can successfully import the new keystore when we know the keystore password, but if we don’t know the password we want to be able to capture output on the failed pasword and store it in our running log file but allow the script to continue.

      $tempstore = "C:\Program Files\Java\Tempstore"
           $newcertpath = "C:\Program Files\Java\jre1.8.0_231"
           $oldcertpath = "C:\Program Files\Java\jre1.8.0_201"
           $JavaKeyTool = "C:\Program Files\Java\jre1.8.0_231\bin\keytool.exe"
           # copy cert from old path and store in temp location
           Get-ChildItem -Path $oldcertpath -Filter "cacerts" -File |
           Copy-Item  -Destination $tempstore -Recurse -Force -ErrorAction Stop
           Write-Output "Copied old x64 certs to temp file"  
           Write-Output $oldcertPath
              #import keytool from new to old
              & $JavaKeyTool -importkeystore -srckeystore "$oldcertpath\lib\security\cacerts" -srcstorepass badpassword   -destkeystore "C:\Program Files\Java\Tempstore" -deststorepass badpassword -noprompt 
              # import from updated old to new cert path Keystore
              & $JavaKeyTool -importkeystore -srckeystore "C:\Program Files\Java\Tempstore" -srcstorepass badpassword  -destkeystore "$oldcertpath\lib\security\cacerts" -deststorepass badpassword -noprompt 

      If the password is incorrect we get the following output: “keytool error: java.io.IOException: Keystore was tampered with, or the password was incorrect”

      This is expected but we cannot figure out how to get that output and store it in the logfile that capture all of the progress of the script. We have tried to leverage Try/Catch but can’y seem to get the syntax correct.

      It is not really a java keytool issue, it is a matter of capturing the output and getting into the logfile.

      Can anyone provide insight?

      • This topic was modified 1 month, 1 week ago by kvprasoon. Reason: code formatting
    • #203628
      Topics: 28
      Replies: 772
      Points: 2,220
      Helping Hand
      Rank: Community Hero

      You need to redirect standard error to standard output. It would be the same in cmd.

      dir foo
      Get-ChildItem: Cannot find path '/Users/js/foo/foo' because it does not exist.
      dir foo 2>&1 > log
      • This reply was modified 1 month, 2 weeks ago by js.
      • This reply was modified 1 month, 2 weeks ago by js.
    • #203871
      Topics: 5
      Replies: 70
      Points: 326
      Helping Hand
      Rank: Contributor

      And if you are in a loop use >> to append.

      I also ran into a similar issue running a JAR file from PS. The method I chose was to use Start-Process with -RedirectStandardOutput and -RedirectStandardError to run the JAR file. Maybe overkill but it works for me.

Viewing 2 reply threads
  • You must be logged in to reply to this topic.