编辑:替代标题:Powershell 中的 New-PSDrive 与 bat 中的 NET USE 工作方式不同
我正在尝试从 UNC 路径加载 WinPython 中的 Python 脚本,因此我需要将其映射到驱动器。我已将所有这些操作都放在 bat 文件中,但无法在 Powershell 中运行。
蝙蝠(作品):
NET USE P: "\\networkPath\WinPython\WinPython-32bit-3.6.1.0Zero"
PUSHD P:\
"P:\python-3.6.1\python.exe" "P:\loadRemix3D.pyw"
Powershell(失败):
New-PSDrive -Name P -PSProvider FileSystem -Root \\networkPath\WinPython\WinPython-32bit-3.6.1.0Zero
Push-Location -Path P:\
Start-Process -FilePath P:\python-3.6.1\python.exe -WorkingDirectory P:\python-3.6.1 -ArgumentList P:\loadRemix3D.pyw
路径是正确的,因为 Powershell 正确执行 Python 并加载 Python 脚本,但是 Python 脚本的路径行为就像我直接从 UNC 加载它一样。
如何让Powershell和bat一样工作?
编辑: 根据 Jeff 的回答,以下是 Powershell 脚本的工作版本:
NET USE P: "\\networkPath\WinPython\WinPython-32bit-3.6.1.0Zero"
Push-Location -Path P:\
Start-Process -Wait -FilePath "P:\python-3.6.1\pythonw.exe" -WorkingDirectory "P:\python-3.6.1" -ArgumentList "P:\loadRemix3D.pyw"
NET USE P: /delete /y
我需要添加的唯一其他事情是明确删除映射,因为看起来 NET USE 映射在全局 PowerShell 上下文中仍然存在(?)。
答案1
使用 Powershell 的 FileSystem 提供程序(即New-PSDrive -PSProvider FileSystem
)创建的驱动器对“外部”进程不可见,并且在传递给此类外部进程时会“扩展”到其根目录。相反,请使用NET USE
与程序的批处理版本相同的命令。