在我的Windows目录下
C:\Users\jholmes\pichak\analytics
我已经运行了run1.ps1代码。 我运行了wsl.exe,现在我的pwd是
/mnt/c/WINDOWS/system32
如何指向第一个路径并执行脚本?
在我的Windows目录下
C:\Users\jholmes\pichak\analytics
我已经运行了run1.ps1代码。 我运行了wsl.exe,现在我的pwd是
/mnt/c/WINDOWS/system32
-File
选项起作用:powershell.exe -File path/to/script.ps1
powershell.exe -F ~/win/common/utils/fix_wsl.ps1
命令时,出现错误提示:参数 '/home/user/win/common/utils/fix_wsl.ps1' 无法传递给 -File 参数,因为该文件不存在,请提供一个已存在的 '.ps1' 文件路径作为 -File 参数的参数。
- Krishna在 PowerShell 中运行 wsl
(或 wsl.exe
)时,它应该以与 PowerShell 下相同的目录启动,只是使用 Linux 版本。例如,如果你在 PowerShell 中的路径为 C:\Users\jholmes\pichak\analytics
,并且运行了 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
cd /mnt/c/
。D:\Ubuntu
。为了避免每次打开WSL时都要更改工作目录,您可以修改shell配置文件(bashrc,zshrc等)以在末尾加载相关目录。~/.zshrc
文件的末尾添加cd /mnt/d/Ubuntu/
,如果您使用zsh,则在其他相关配置文件中添加。cd
”的黑客技巧。我看到太多人因为这样做而遇到问题,最终导致混乱。 - NotTheDr01ds对我来说,这个答案几乎是正确的,但是例如运行:
powershell.exe -File /mnt/c/path/to/script/script.ps1
The argument '/mnt/c/path/to/script/script.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.
然后我必须:
cd /mnt/c/path/to/script
powershell.exe -File script.ps1
cd
命令... 此外,当我们想要保持在同一个文件夹中时,我们必须使用 cd -
命令(或者如果我们不想要新路径被回显,可以使用 cd - > /dev/null
命令)。 - gluttonypowershell.exe -File C:\\Users\\jason\\Documents\\WindowsPowerShell\\Scripts\\Write-EventLog-1777.ps1
这里有证据表明,使用WSL2,我们的软件可以使Powershell脚本加密和保护: 请看这张图片:
它还可以检测和终止使用fanotify的进程,因为我们认为攻击者可能会利用它来隐藏关键文件更改(它还可以查找和终止dtrace/strace/stap/bpftrace/debuggers以及打开/dev/kmem、/dev/mem、/proc/kcore和受保护进程的/proc/pid/mem等进程): 这张图片展示了加密的PowerShell脚本现在可以检测和终止可能的攻击者进程。