启用 .ps1 文件的直接/本机运行——警告/注意事项

启用 .ps1 文件的直接/本机运行——警告/注意事项

❔ 启用 .ps1 脚本的本机/直接执行 - 警告/注意事项

介绍:最近,我编写了很多脚本,既有使用 PowerShell (.ps1) 编写的,也有使用 Console/Shell (.cmd/.bat) 编写的。我认识到 PowerShell 可以说是一种功能更强大/用途更广的脚本语言,但我总是发现能够直接运行 .cmd/.bat 文件(即C:> MyCmd)非常有吸引力(相比于相对繁琐的 )C:> powershell.exe -NoLogo -NoProfile -File "C:\Specify_the_full_path_to_my_powershell_folder\MyScript.ps1"。今天我偶然注意到了%PATHEXT%系统变量,心想:“难道就这么简单吗!?”(只需将 .ps1 添加到扩展名列表中?)—— 确实如此!(有关如何执行此操作的更多信息,请参阅链接问题下方,或点击如何启用 .ps1 文件的直接/本机运行)。

然而,实现这一点相对容易,这让我停下来并感到疑惑……

  • 微软制造 Windows
  • 微软制作了 PowerShell(并且正在积极推动跨多个平台的 pwsh 开发)
  • 微软已经启用了 10 多个可直接运行的扩展:.com .exe .bat .cmd .vbs .vbe .js .jse .wsf .wsh .msc(其中有几个我从未听说过!)

(主要问题)这迫使我问......

  • 为什么微软从 PATHEXT 中排除 .ps1 文件(即阻止它们直接运行)!?(这似乎是微软显然想要做的事情)
  • 人们有什么理由不应该这样做吗?
  • 这样做还有其他缺点或不利之处吗?

我觉得我肯定忽略了一些明显/主要的缺点,但想不出那是什么。是的,您可以说将 PowerShell 脚本加载到 PowerShell ISE 中并从那里运行它更危险/更安全,但您可以对 .bat 文件做出同样的陈述 - 因此建议还有其他一些不建议运行 .ps1 脚本的原因。

如有任何建议我将不胜感激,提前谢谢!

答案1

为什么微软从 PATHEXT 中排除 .ps1 文件(即阻止它们直接运行)?

正如评论中指出的那样,可能是出于安全考虑。PowerShell 是一种功能相对强大的自动化工具,具有许多内置的 Cmdlet,其中包括可以影响 Windows 或用于从互联网下载文件的 Cmdlet。

默认禁用 PowerShell 有助于防止它在可能不希望它运行脚本的 PC 上运行(例如普通桌面用户或可能不希望它从随机 URL 下载恶意软件的某些安全管理员。)

由于用户不了解情况而运行恶意脚本是一种非常常见的攻击媒介。欺骗某人这样做通常比实际破坏设备或程序的安全性(或使用其他漏洞)要容易得多。如果您必须手动启用 PowerShell,则至少可以确保你知道它有可能在您的系统上运行脚本(理想情况下允许您选择自己的风险级别)。

有什么理由让人们不这样做?这样做还有什么其他的坏处或缺点吗?

任何缺点可能主要都与安全有关。


其他的东西

但是,我始终发现直接运行 .cmd/.bat 文件(即)的能力C:> MyCmd非常有吸引力。

您可以(潜在地)缩短示例 PowerShell 命令相当长一段距离:

  1. 创建一些您选择的文件夹(例如C:\CLI)并将其放在您的系统 PATH 变量中。

  2. 在该文件夹中创建一个名为 eg 的批处理文件ps.bat,内容如下:

    powershell.exe -NoLogo -NoProfile -File %*
    
  3. 使用此批处理文件和“当前目录”简写运行您的 PowerShell 脚本,假设您在命令行中.\与脚本位于同一目录中:.ps1

    ps .\MyScript.ps1
    

相关内容