Powershell 中的 Push-Location 与 bat 中的 PUSHD 工作方式不同

Powershell 中的 Push-Location 与 bat 中的 PUSHD 工作方式不同

编辑:替代标题: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与程序的批处理版本相同的命令。

相关内容