2017-06-01 123 views
0

是否可以在java應用程序中運行整個大型powershell腳本,而無需通過使用-file參數啓動powershell進程從外部調用它? (由於命令行長度限制,通過encodedcommand參數傳遞它將不起作用)。在java應用程序中啓動powershellscript

I.e.有沒有一個Java庫,使您可以將powershellscript粘貼到您的Java應用程序中並運行它?

我目前將powershellscript嵌入到java應用程序中並將其寫入磁盤,但我正在尋找無文件方法。

+0

我真的不認爲在單個exec上發送多個命令將從JAVA起作用。在這種情況下,你必須用新行和分號分隔每一行,可能你可以試試小腳本(2-3行) –

+1

使用'powershell -Command {echo yo; $ A = GET-日期; $ A |克; $ a.date}'按預期工作。請記住,有一個最大的命令行長度(我認爲是1024)。您可以通過環境變量傳遞額外的PowerShell代碼,您可以通過腳本動態執行'iex $ env:pscode'。剛注意到你說「大」。另一種方法是通過命令行執行一小部分PS代碼,然後將大部分代碼從Java傳遞到PS。再次,你會動態執行管道代碼。 –

回答

1

由於您想傳遞一個大型程序,因此從Java程序到PS腳本的配管比使用命令行或環境變量更合適。由於我不知道太多的Java並且沒有安裝它,我將在下面的代碼片段中的PS命令行中模擬它。您的Java程序會從列表或其他合適的數據結構中讀取程序的行(而這個例子是從文件系統讀取的)。我確實在谷歌上看到了從Java到外部執行命令的管道匹配。

cat my.ps1| 
    powershell -command {$scr="";foreach ($line in $input){$scr+=$line+"`n"} echo bxb $s cxc} 

你的PS存根已收到該程序,而不是附和它之後,它會執行它:iex $scr

如果需要從Java參數傳遞給PS,你既可以管他們用程序(例如代碼行是設置全局變量)沿或他們可能是在存根代碼設置全局變量。其他更復雜的變化也是可能的。