【问题标题】:How to call PowerShell script from WSL?如何从 WSL 调用 PowerShell 脚本?
【发布时间】:2021-06-11 13:58:16
【问题描述】:

在我的 Windows 目录中

C:\Users\jholmes\pichak\analytics

我有 run1.ps1 代码。 我运行wsl.exe,现在我的密码是

   /mnt/c/WINDOWS/system32

如何指向第一个路径并执行脚本?

【问题讨论】:

  • 嘿,您尝试过回溯吗? cd .. 从您的 PWD 遍历到 \Users\jholmes\pichak\analytics ?另外你想如何在 linux 中执行 .ps1 脚本?
  • @AvidJoe Impossible,cd 后我还在 Linux 中..
  • 我不确定我是否理解您的问题。如果您已经在 Ubuntu 或任何子系统中,访问 windows 目录的挂载点是 mnt/,例如,您可以从 mnt/ 遍历任何 windows 卷。 /mnt/c/Users/jholmes/pichak/analytics 可以从您的 linux 子系统访问。当您说我运行 wsl.exe 时,我不确定您的意思。如果不是这种情况,我可能也会完全浪费您的时间。大声笑..对不起
  • 如果您希望从 Linux 运行 Windows 工具(如 powershell),请参阅:docs.microsoft.com/en-us/windows/wsl/…,如果您希望反之亦然,请参阅docs.microsoft.com/en-us/windows/wsl/…。在您的情况下,使用 cd 返回并使用 powershell . 运行

标签: windows windows-subsystem-for-linux


【解决方案1】:

在 WSL2 中,使用 -File 选项对我有用:

powershell.exe -File path/to/script.ps1

【讨论】:

    【解决方案2】:

    有两种方法可以解决这个问题:

    1. 您可以将工作目录更改为 shell 脚本的目录并正常执行。为此,请按以下步骤操作:
    • 安装相关驱动器cd /mnt/c/
    • 根据脚本路径更改目录。
    1. 为了方便起见,我使用这种方法更像是一种 hack。我在我的 Windows 存储中创建了一个文件夹,其中存储了所有 Ubuntu WSL 相关文件。说,D:\Ubuntu。为避免每次打开 WSL 时都更改工作目录,您可以修改 shell 配置文件(bashrc、zshrc 等)以在最后加载相关目录。
    • 即,如果您使用 zsh 或相关配置文件,请在您的 ~/.zshrc 文件末尾添加 cd /mnt/d/Ubuntu/

    【讨论】:

    • 真的建议新用户(至少)远离“在启动配置中添加cd”黑客。我看到太多人提出的问题已经这样做了,以后会弄乱他们。
    【解决方案3】:

    当从 PowerShell 运行 wsl(或 wsl.exe)时,它应该在您在 PowerShell 下的同一目录中启动,只是使用它的 Linux 版本。例如,如果您在 C:\Users\jholmes\pichak\analytics 中的 PowerShell 中运行 wsl,您应该/mnt/c/Users/jholmes/pichak/analytics 结束。

    如果没有,那么您的启动文件中可能已经有其他答案推荐的内容。您应该从您的.bashrc.zshrc.profile.bash_profile 或您可能编辑过的任何其他启动文件中删除所有cd 命令。

    wsl 命令提供了一些方便的参数来指定起始目录:

    • wsl ~ 将从您的 Linux 用户的主目录开始(例如 /home/jholmes
    • wsl --cd c:\ 将从 /mnt/c 开始(或任何与传入的 Windows 版本等效的 Linux 目录)。
    • wsl --cd \\wsl$\<distroname>\etc 将从您的 /etc 目录(或您传入的任何 WSL 路径)开始。请注意,您需要指定您的分发名称(从 wsl -l -v 获得)。

    假设您在/home/jholmes,并且您想要执行 PowerShell 脚本C:\Users\jholmes\pichak\analytics\run1.ps1。您首先需要将 Windows 路径翻译成 Linux 版本:

    /mnt/c/Users/jholmes/pichak/analytics/run1.ps

    然后您可以通过以下方式运行它:

    powershell.exe /mnt/c/Users/jholmes/pichak/analytics/run1.ps

    也可以设置一个带有“shebang”行的 PowerShell 脚本来直接执行它。如果在run1.ps1的第一行添加以下内容:

    #!/usr/bin/env -S powershell.exe -ExecutionPolicy Bypass
    

    然后通过chmod +x /mnt/c/Users/jholmes/pichak/analytics/run1.ps将其设置为可执行,然后它就变成了某种“命令”(技术上是“可执行脚本”),您只需在命令中输入脚本的完全限定名即可直接执行行:

    /mnt/c/Users/jholmes/pichak/analytics/run1.ps
    

    cd /mnt/c/Users/jholmes/pichak/analytics
    ./run1.ps
    

    【讨论】:

      【解决方案4】:

      以下证据表明,使用 WSL2,我们的软件可以对 Powershell 脚本进行加密和保护: See this picture:

      它可以检测并杀死使用 fanotify 的进程,因为我们认为攻击者可以使用它来隐藏关键文件更改(它还可以找到并杀死 dtrace/strace/stap/bpftrace/debuggers 和打开 /dev 的进程/kmem、/dev/mem、/proc/kcore 和受保护进程的 /proc/pid/mem 等): This picture shows the encrypted PowerShell script now can detect and kill possible attackers' processes

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2023-01-19
      • 1970-01-01
      • 2015-07-07
      • 2016-06-22
      • 2019-08-04
      • 2017-09-26
      • 2011-05-22
      • 1970-01-01
      • 2011-10-17
      相关资源
      最近更新 更多