我遇到了一个挑战,我没能按照我希望的方式解决。
我有一个包含powershell脚本的文件,但该文件没有分配给powershell的扩展名。问题是:如何在脚本文件中使用错误的文件扩展名(或者没有)执行powershell?
Invoke-Expression
似乎不起作用,因为它始终执行分配给文件类型的默认操作。如果我给该cmdlet一个*.txt
文件,则编辑器会弹出。
我知道我可以通过重命名脚本文件或首先正确命名它来解决这个问题。这就是我最终要做的事情。
我仍然想知道是否可以将文件作为具有错误文件扩展名的脚本执行而无需修改,重命名或处理文件。如果它不起作用......为什么会这样?
答案 0 :(得分:4)
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
在我看来,文件扩展名限制是愚蠢的,但这就是它的设计方式。这是出于安全考虑,但我没有引用它来支持它。
答案 1 :(得分:1)
或者您使用Get-Content
来阅读该文件,然后使用Invoke-Expression
或Invoke-Command -ScriptBlock
调用该文件。