diff --git a/src/main/java/dev/jbang/Settings.java b/src/main/java/dev/jbang/Settings.java index ae0b14be7..eca590bb6 100644 --- a/src/main/java/dev/jbang/Settings.java +++ b/src/main/java/dev/jbang/Settings.java @@ -56,7 +56,12 @@ public static Path getConfigDir(boolean init) { if (jd != null) { dir = Paths.get(jd); } else { - dir = Paths.get(System.getProperty("user.home")).resolve(".jbang"); + // On Windows, USERPROFILE is more reliable than user.home for non-ASCII + // usernames + String home = Util.isWindows() + ? System.getenv().getOrDefault("USERPROFILE", System.getProperty("user.home")) + : System.getProperty("user.home"); + dir = Paths.get(home).resolve(".jbang"); } if (init) diff --git a/src/main/java/dev/jbang/cli/App.java b/src/main/java/dev/jbang/cli/App.java index a9d2774b6..8899442c1 100644 --- a/src/main/java/dev/jbang/cli/App.java +++ b/src/main/java/dev/jbang/cli/App.java @@ -3,6 +3,7 @@ import static dev.jbang.util.JavaUtil.defaultJdkManager; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -480,7 +481,18 @@ public static int setup(boolean withJava, boolean force, boolean chatty) { } } if (!cmd.isEmpty()) { - System.out.println(cmd); + if (Util.isWindows() && Util.getShell() == Util.Shell.powershell) { + try { + Path tmpFile = Files.createTempFile("jbang-setup-", ".ps1"); + tmpFile.toFile().deleteOnExit(); + Files.write(tmpFile, cmd.getBytes(StandardCharsets.UTF_8)); + System.out.println(tmpFile.toAbsolutePath().toString()); + } catch (IOException e) { + System.out.println(cmd); + } + } else { + System.out.println(cmd); + } return EXIT_EXECUTE; } else { return EXIT_OK;