如何在 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=] }')"
我在 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=] }')"