Запуск скриптов powershell в Kotlin без создания файла - PullRequest
0 голосов
/ 18 октября 2018

Итак, я научился запускать файл ps1 из kotlin здесь , но единственная цель, которую я имею для этого файла, - запустить команды, а затем удалить себя.Есть ли какой-нибудь способ избавиться от хлопот, связанных с созданием файла, который позже будет просто удален?

У меня есть одна строка команд, каждая из которых разделена точкой с запятой.

Редактировать

Некоторые люди спрашивали код 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 голосов
/ 18 октября 2018

Если вы можете поместить свой скрипт в переменную, и эта переменная будет расширяться после вызова PowerShell, вы можете сделать это следующим образом

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

Конечно, вам нужно поэкспериментировать справильные экранирующие символы, чтобы получить кавычки вокруг команды, которую вы хотите запустить.

Я добился наибольшего успеха с такими вещами, сначала запустив их в CMD.exe и выяснив правильный синтаксис.Затем возьмите это в свою программу.Таким образом, вы узнаете, что сначала вы правильно отключили синтаксис PowerShell.Из того, что я понимаю, разбор для PowerShell все делается после запуска двигателя.Поэтому, когда вы вызываете PowerShell таким образом, вы должны получить правильный синтаксис.

...