【发布时间】:2016-11-08 21:44:05
【问题描述】:
我正在尝试创建一个 .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 脚本?
-
这可能是个坏主意。你说它必须是可移植的,但 PowerShell 在 .Net 框架上运行。如果您的目标机器没有 .Net,它就无法工作。如果它确实有 .Net,则不需要 .exe 包装器。自 Win 7/2008R2 以来的每个 Windows 版本都默认至少附带 PowerShell 2.0。您想通过将脚本打包成 .exe 来解决什么问题?
-
@briantist:好点,但我认为在这种情况下,OP 的“可移植”意味着仅仅能够将可执行文件放在 任何目录 中并让它工作正确。此工具生成的
*.exe包装器允许调用嵌入式 PowerShell 脚本,而不管有效的 PS 安全策略如何,因此提供一种更简单的方法来运行脚本可能是动机。 -
@mklement0 是的,但同样可以通过调用
powershell.exe -ExecutionPolicy的一行批处理文件来实现。 -
@AdilZia 实际上你可以查看mklement0's answer 中发布的示例包装器命令。这是对包装器在做什么的推测(调用
powershell.exe)。相反,如果您在批处理文件中添加一行这样的行来调用您的.ps1,那么您可以在脚本中使用$PSScriptRoot。在批处理文件中,您可以使用%~f0\myScript.ps1来引用与批处理文件相同路径的文件。
标签: windows powershell exe filepath