❔ 启用 .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 命令相当长一段距离:
创建一些您选择的文件夹(例如
C:\CLI
)并将其放在您的系统 PATH 变量中。在该文件夹中创建一个名为 eg 的批处理文件
ps.bat
,内容如下:powershell.exe -NoLogo -NoProfile -File %*
使用此批处理文件和“当前目录”简写运行您的 PowerShell 脚本,假设您在命令行中
.\
与脚本位于同一目录中:.ps1
ps .\MyScript.ps1