powershell - 将任何文件作为 powershell 脚本执行

标签 powershell

我遇到了一个挑战,但未能按照我希望的方式解决。

我有一个包含 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/

相关文章:

powershell - 我如何获取通过Mount-DiskImage挂载的ISO的驱动器号

azure - 在没有基本身份验证的情况下使用 Powershell 连接 Exchange Online

powershell - 使用 Start-Job 时本地函数调用不起作用

无需将文件写入磁盘的 PowerShell SFTP 下载

powershell - 构造一个自定义对象,其属性将按定义顺序枚举

function - 如何允许使用-erroraction调用函数

windows - 如何使用 cacert 文件在 Powershell (Invoke-WebRequest) 中执行等效的 cUrl?

azure - Powershell + Azure 应用服务 + Azure 容器注册表

image - 从网址/网络摄像头保存图像

powershell - 使用管道进行多个查询时的PowerShell错误处理: $Users | Get-ADUser