在Kotlin中运行Powershell脚本而不创建文件

时间:2018-10-17 21:15:43

标签: powershell kotlin runtime.exec

因此,我从kotlin here学习了如何运行ps1文件,但是该文件的唯一用途是运行命令,然后删除自身。有什么方法可以消除创建文件的麻烦,以后再将其删除?

我有一行命令,每行之间用分号分隔。

编辑

有人要求输入Powershell代码,如下所示:
(我把它分成几行,但实际上只是一行)

前面没有反斜杠的美元符号是指kotlin中的变量。

"\$ComObj = New-Object -ComObject WScript.Shell; " +
"\$ShortCut = \$ComObj.CreateShortcut(\"\$Env:${shortcut.absolutePath}\"); " +
"\$ShortCut.TargetPath = \"%windir%\\system32\\cmd.exe\"; " +
"\$ShortCut.Description = \"${f.nameWithoutExtension}\"; " +
"\$ShortCut.Arguments = \"/c \"\"start $url\"\"\"; " +
"\$ShortCut.FullName; \$ShortCut.WindowStyle = 7; " +
"\$ShortCut.IconLocation = \"$iconpath\"; " +
"\$ShortCut.Save(); " +
"Remove-Item \"${createPs.absolutePath}\"; "

(代码在运行之前已写入文件,这是我不想要的)

1 个答案:

答案 0 :(得分:0)

如果您可以将脚本放入变量中,并且该变量将在调用PowerShell时扩展,则可以通过这种方式进行

Runtime.getRuntime().exec("powershell.exe -command '\$yourvariable'")

当然,您需要尝试使用正确的转义字符以获取要运行的命令的引号。

通过在CMD.exe中首先运行它并弄清楚正确的语法,我在此类事情上获得了最大的成功。然后将其带入您的程序。这样,您将知道首先正确地将PowerShell语法降低了。据我了解,PowerShell解析是在引擎启动后完成的。因此,当您以这种方式调用PowerShell时,必须正确使用语法。