gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:16:30 31 4
gpt4 key购买 nike

我正在尝试创建一个 .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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com