我遇到了一个挑战,但未能按照我希望的方式解决。
我有一个包含 powershell 脚本的文件,但该文件没有分配给 powershell 的扩展名。问题是:如何在具有错误文件扩展名(或无)的脚本文件中执行 powershell? Invoke-Expression
似乎不起作用,因为它总是执行分配给文件类型的默认操作。如果我给那个 cmdlet 一个 *.txt
文件编辑器弹出打开。
我知道我可以通过重命名脚本文件或首先正确命名来解决这个问题。这就是我最终要做的。
我仍然想知道是否可以在不修改、重命名或处理文件的情况下将文件作为具有错误文件扩展名的脚本执行。如果它不起作用......为什么会这样?
最佳答案
Powershell 的设计使得执行或点源文件需要 .ps1
扩展名,Powershell.exe 将拒绝运行任何没有该扩展名的文件。
从非 ps1 文件调用 Powershell 代码的一种方法是使用 STDIN 启动 Powershell.exe,并将您的脚本通过管道传递给它。这需要一个新的 shell,因此不太适合从现有脚本环境中启动脚本。
Powershell.exe - < thescript.txt
另一种方法是创建一个临时
.ps1
文件并执行它。这具有使用当前脚本环境的优点,但需要一个临时文件。Copy-Item -Path '.\thescript.txt' -Dest '.\temp.ps1'
. .\temp.ps1
del .\temp.ps1
在我看来,文件扩展名限制很愚蠢,但这就是它的设计方式。杜撰,这是出于安全原因,但我找不到任何引文来支持它。
关于powershell - 将任何文件作为 powershell 脚本执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30613629/