windows - 查找从 EXE 包装器启动的 powershell 脚本的完整路径

标签 windows powershell exe filepath

我正在尝试创建一个 .exe 文件,它是一个打包的 powershell 脚本 (script.ps1),其中脚本的一部分是打印 .exe 文件的当前位置 而不是脚本.

部分要求是 .exe 需要可移植:

所以当我运行 File.exe 或双击 File.exe 时:

如果文件的位置是 C:\Hello\File.exe ,它应该打印 "C:\Hello\"

如果位置移动到 D:\Goodbye\File.exe ,它应该打印 "D:\Goodbye\"

如果文件被复制到 D:\HELLO\File.exe ,它应该只打印 "D:\HELLO\"


我试过 $PSScriptRoot 但它只链接到一个临时文件夹


在将 script.ps1 打包为 .exe 之前,我可以添加什么代码以使其查找 .exe 文件的特定位置?

谢谢

最佳答案

用于将 PowerShell 脚本包装在 *.exe 中的工具, Ps1 to Exe , 当 *.exe 时执行以下操作被调用:

  • 它将嵌入式脚本提取到子树中的一个临时文件 $env:TEMP .

  • 它调用 PowerShell 可执行文件,并通过 -File 将临时脚本文件的路径传递给它, 以及 -ExecutionPolicy Bypass .

包装器调用的示例命令行 *.exe :

"powershell" -ExecutionPolicy Bypass -File C:\Users\jdoe\AppData\Local\Temp\2409.tmp\240A.ps1

因此,您需要检查运行脚本的 PowerShell 实例的进程,以获取有关包装器 *.exe 的信息.

# Get the parent process.
# (`gps` is a built-in alias of `Get-Process`)
$pp = gps -Id (Get-CimInstance win32_process -Filter "ProcessId = $PID").ParentProcessId

# Output the parent process executable's directory path:
Split-Path $pp.Path

注意:如果您仍在使用 PSv2,请使用 Get-WmiObject而不是 Get-CimInstance .

关于windows - 查找从 EXE 包装器启动的 powershell 脚本的完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40496958/

相关文章:

excel - 执行脚本时隐藏powershell窗口

c - 如何在 C 中打开外部 EXE 文件?

python - 如何在没有安装 python 的系统上执行带有 python 代码的 C++ 代码

windows - 如何在我自己的窗口下捕获屏幕,不包括我自己的窗口

linux - 我可以将 swift 制作的 cocoa 应用程序移植到 Windows 和 Linux 吗?

regex - Perl one liner corrupts file in Windows (carriage-return related issue)

c# - 应用程序运行时替换exe文件

javascript - onsubmit不调用chrome中的js函数而是直接提交表单

powershell - VisualSVN Server PowerShell配置

c# - Task.Factory.FromAsync 的这个实现实际上运行异步吗