Pentaho Kettle does not provide possibility to obfuscate password in batch files (though the connection passwords are obfuscated in XML files).
You can write:
kitchen.bat /rep repos /job test /user admin /pass admin
but this will not work:
kitchen.bat /rep repos /job test /user admin /pass "Encrypted 2be98afc86aa7f2e4cb79ce71da9fa6d4"
Here “Encrypted 2be98afc86aa7f2e4cb79ce71da9fa6d4” is encrypted version of “admin”. You can get such string using kettle tool encr.bat.
This post describes a workaround.
Solution
A solution is to create a java wrapper for Kitchen.
1. Create java file Kettle1.java in the Kettle root with the following code:
import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.kitchen.Kitchen; import org.pentaho.di.core.encryption.Encr; public class Kitchen1 { public static void main(String[] args) throws KettleException { // find argument /pass int i = 0; for (; i < args.length; ++i) if (args[i].equals("/pass") || args[i].equals("/password")) break; // decrypt password if necessary if (++i < args.length) args[i] = Encr.decryptPasswordOptionallyEncrypted(args[i]); // run Kitchen Kitchen.main(args); } }
2. Open command line. Run kitchen.bat without any parameters. This will initialize the necessary environment variable CLASSPATH.
3. Compile the java file with the following command:
javac Kitchen1.java
4. Copy Kitchen.bat to Kitchen1.bat and correct the last line. Replace
java %OPT% org.pentaho.di.kitchen.Kitchen %_cmdline%
with
java %OPT% Kitchen1 %_cmdline%
Now you can use Kitchen1.bat instead of Kitchen.bat. Both commands will work:
kitchen1.bat /rep repos /job test /user admin /pass admin kitchen1.bat /rep repos /job test /user admin /pass "Encrypted 2be98afc86aa7f2e4cb79ce71da9fa6d4"
5. Remove source file Kitchen1.java. Close command line.
Have fun 🙂