如何在 WSL2 中以 root 身份从 bash 运行 PowerShell.exe 命令

How to run PowerShell.exe command from bash as root in WSL2

我在 Windows 10 上使用 Ubuntu 20.04 的 WSL2。我有一个磁盘在启动时不会自动连接到 WSL2。在 Windows 上注册磁盘的字母可以更改,我只知道卷的名称。我写了一个 bash 脚本来找到磁盘盘符,然后将它挂载到 WSL2

#!/bin/bash

BACKUP_FOLDER=/mnt/autobackup
mkdir -p $BACKUP_FOLDER
VOLUME_LETTER="$(powershell.exe -Command '(Get-Volume -FriendlyName AUTOBACKUP | Select-Object -Index 0).DriveLetter' | awk -v RS='\r\n' '{ print [=13=] }')"
VOLUME_LETTER=$(echo "${VOLUME_LETTER}:\")
sudo mount -t drvfs $(echo $VOLUME_LETTER) $(echo $BACKUP_FOLDER)

当我 运行 作为普通用户询问我的密码时,脚本工作正常。但是,当尝试以 root 身份 运行 时它会引发错误(这是我想要的,因为我想在启动时将脚本放入 /etc/init.d 到 运行)

./wsl_startup.sh: line 5: powershell.exe: command not found
mount: /mnt/autobackup: special device :\ does not exist.
<3>init: (1058) ERROR: UtilCreateProcessAndWait:501: /bin/mount failed with status 0x2000
<3>init: (1058) ERROR: MountPlan9:493: mount cache=mmap,rw,trans=fd,rfdno=3,wfdno=3,msize=65536,aname=drvfs;path=:\;symlinkroot=/mnt/ failed 2
No such file or directory

如何让root看到powershell.exe命令?还是我应该换一种方式?

当 运行 为 root 时,$PATH 仅包含一组最小的条目,不包括 Windows file-system 目录,例如powershell.exe 所在的位置。

因此,您必须通过其完整路径调用powershell.exe

VOLUME_LETTER="$(/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe -Command '(Get-Volume -FriendlyName AUTOBACKUP | Select-Object -Index 0).DriveLetter' | awk -v RS='\r\n' '{ print [=10=] }')"