windows - 调用 powershell.exe 时,PowerShell 工作目录的定义是什么?
问题描述
编辑:这似乎是我遇到的一个非常利基的场景,但问题本身的答案是powershell.exe
从调用进程继承工作目录。即PUSHD
确实更改了工作目录cmd
并传递给PWSH
.
顺便说一句,我遇到的问题是我没有权限和访问工作目录路径中的所有文件夹。特别是在下面,我缺少\Dev\
. 因此,如果我在本地映射\\<ComputerName>\<ShareName>\<NoAccessVolume>\<AccessVolume>
到像我这样的驱动器H:
,它可以正常工作,因为映射会跳过<NoAccessVolume>
。但是,我不能简单地让 PowerShell 将我的位置设置为,\\<ComputerName>\<ShareName>\<NoAccessVolume>\<AccessVolume>
因为即使 PowerShell 可以处理 UNC 路径,它也会引发与权限相关的错误。
在不了解我为什么使用批处理文件的情况下,我正在使用一个。如另一个答案所述,批处理文件(.cmd
, .bat
)可以直接启动,而.ps1
文件则不能。
所以这是场景:
- 将我的代码保存为 base64
- 创建了一个文件以使用参数
.bat
调用powershell.exe
和传递代码-EncodedCommand
- 一切正常,直到它没有
其中一位用户要么没有将其网络共享映射到本地驱动器,要么他们特意使用 UNC 路径访问网络共享。cmd.exe
不喜欢这样,它警告我们将使用 Windows 目录。根据此处关于 SO 的不同答案,%SystemRoot%
使用了。它很容易使用PUSHD
和POPD
更改目录(请参阅此处cmd.exe
的各种答案) - 但是,似乎并不关心临时驱动器号。所以在脚本中引用......不是一个好主意。powershell.exe
$PWD
我在about_PowerShell_exe上找不到任何关于工作目录的内容 - 但很容易说,如果cmd.exe
默认为 Windows 目录,那么powershell.exe
也将使用C:\Windows
. 但是,PUSHD
在调用之前使用会powershell.exe
导致 PowerShell 在C:\
. 所以我想我想知道powershell.exe
使用什么逻辑来确定生成的 PowerShell 工作目录,并且在我的具体情况下,是否有任何简单的选项可用于更改工作目录以匹配%~dp0
(即.bat
从哪里调用文件)。
我链接的第一个答案(也在这里)详细介绍了从批处理文件调用它时将参数传递给 PowerShell 的一些有用细节,所以我知道这是我可以走的一条路线 - 但是有什么隐藏的东西powershell.exe
我错过了?
编辑:这是我目前得到的。我正在使用 Windows 10。
我的批处理文件的内容:
@echo OFF
echo Batch File: %0
powershell.exe -NoProfile -NoExit -Command Write-Host PowerShell Working Directory w/o PUSHD: $PWD
PUSHD "%~dp0"
powershell.exe -NoProfile -NoExit -Command Write-Host PowerShell Working Directory w/ PUSHD: $PWD
POPD
PAUSE
从映射驱动器运行;$PWD 将按预期工作:
Batch File: "H:\_Team Members\immobile2\test.bat"
PowerShell Working Directory w/o PUSHD: H:\_Team Members\immobile2
PS H:\_Team Members\immobile2> exit
PowerShell Working Directory w/ PUSHD: H:\_Team Members\immobile2
PS H:\_Team Members\immobile2> exit
Press any key to continue . . .
从网络共享运行;$PWD 将无法按预期工作
'\\dep-files01\Departments$\Dev\Data\_Team Members\immobile2'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
Batch File: "\\dep-files01\Departments$\Dev\Data\_Team Members\immobile2\test.bat"
PowerShell Working Directory w/o PUSHD: C:\Windows
PS C:\Windows> exit
PowerShell Working Directory w/ PUSHD:
PS C:\> exit
Press any key to continue . . .
解决方案
推荐阅读
- python - LambdaType 与 FunctionType
- ios - 对事件做出反应(而不是陈述!)
- google-apps-script - 如何使用 Google Scripts UrlFetchApp.fetch 从外部 API 获取字段?
- python - 为什么烧瓶不接受 JWT Cookie?
- android - 使用 Expo 备份 Android 密钥库 - 我们需要保存关联的密码吗?
- python - 无法在 google collab 中导入另一个 python 文件
- .net - 当服务停止时,是否需要拆除?
- android - 添加数据不会出现在 Firebase Realtime 中
- c++ - C++ 为 void 指针分配一个字符串
- django - 我如何将数字和字符串添加到我的 django