【发布时间】:2014-09-04 18:58:50
【问题描述】:
我正在尝试将实际运行 java 语句的 .bat 文件转换为 PowerShell 脚本,主要是因为 .bat 文件具有硬编码的用户/密码和
set /p password="Enter password: " %=%
没有在命令提示符下隐藏密码。
当我从 .bat 文件或直接从 dos 提示符运行该 java 命令以及从 .bat 文件运行该命令时,该 java 命令运行良好。
我确保所有环境变量都在批处理文件中设置。
我的问题在于以下几点:
当我从命令行或直接从命令提示符运行它时,java 工作正常,
当我尝试使用 cmd.exe /c 直接运行该行时,它不起作用,如果我从 powershell 调用 .bat 文件,它不起作用并给出以下错误。
cmd : java.lang.NoClassDefFoundError
我不明白...为什么我可以手动运行并且通过 PowerShell 脚本它不起作用?
这是我的 .BAT 文件,可以正常工作:
@rem ###################################
set IIQPATH=C:\IIQ\IIQ
set exportpath=C:\EXPORT
set /p userid="Enter ID: " %=%
set /p password="Enter password: " %=%
@rem ##################################
echo %exportpath%
set CLASSPATH=%CLASSPATH%;%IIQPATH%\WEB-INF\classes
set CLASSPATH=%CLASSPATH%;%IIQPATH%\WEB-INF\lib\identityiq.jar
set CLASSPATH=%CLASSPATH%;%IIQPATH%\WEB-INF\lib\sqljdbc4.jar
set CLASSPATH=%CLASSPATH%;./split
@rem Export the objects
java sailpoint.launch.Launcher console iiqBeans -u %userid% -p %password% -c "export -clean %exportpath%\Application.xml Application"
这是我的 PowerShell 代码
$iiquser = Read-Host 'Provide User for'$target2' environment'
$iiqpass = Read-Host 'Provide Password?' -AsSecureString
$actualdate=Get-Date -format MM_dd_yyyy
$iiquser
$iiqpass
Push-Location C:\EXPORT
$env:IIQPATH="C:\IIQ\IIQ"
$env:exportpath="C:\EXPORT"
Remove-Item env:CLASSPATH
$env:CLASSPATH="$env:CLASSPATH;$env:IIQPATH\WEB-INF\classes"
$env:CLASSPATH="$env:CLASSPATH;$env:IIQPATH\WEB-INF\lib\identityiq.jar`$time"
$env:CLASSPATH="$env:CLASSPATH;$env:IIQPATH\WEB-INF\lib\sqljdbc4.jar"
$env:CLASSPATH="$env:CLASSPATH;./split"
$commandline="java sailpoint.launch.Launcher console iiqBeans -u $iiquser -p $iiqpass -c "+[char]34+"export -clean $env:exportpath\Application.xml Application"+[char]34
$commandline
cmd /c $commandline
有什么提示吗?
======================== 快速更新...
我在 cmd windows 提示和 PS Cmd 提示中手动设置变量。
当我运行不带参数的 java 命令时,我得到以下结果
C:\>java sailpoint.launch.Launcher
Usage: sailpoint.launch.Launcher [ -d ] [<application> | <class>] <arguments>...
Applications:
setup Bootstrap configuration utility
schema Schema file generator
upgrade Perform data upgrades between releases
patch Perform data upgrades post release
console Administrative console
encrypt Administrative console
integration Integration console
oim OIM Integration console
exportschema Data Export console
exportviews View Export console
keystore Key Store console
parse XML file parser
但是当我尝试在 PS 命令行中运行它时,我得到了以下信息:
PS C:\> java sailpoint.launch.Launcher
Exception in thread "main" java.lang.NoClassDefFoundError: sailpoint/launch/Launcher
Caused by: java.lang.ClassNotFoundException: sailpoint.launch.Launcher
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: sailpoint.launch.Launcher. Program will exit.
【问题讨论】:
-
您是否尝试在调用命令之前显示 CLASSPATH 以确保其设置符合您的预期?
-
Hey Jim.. 是的.. 我做到了... PS 会话中的 CLASHPATH 与 DOS 提示符中的 CLASSPATH 值完全相同。
标签: java batch-file powershell cmd