在 Windows 中,每当我单击.bat
、.cmd
或.vbs
脚本(批处理和 VBScript)文件时,它们都会由其各自的引擎(命令提示符和 Windows 脚本宿主)执行。
那么,为什么 powershell 扩展.ps1
默认与记事本关联,而不是与 Powershell 关联?
答案1
显然,微软试图将 PowerShell 设计为默认安全。尽管微软似乎没有在任何地方明确说明这一点,但这一限制可能是为了防止用户被诱骗执行和传播恶意脚本。
有一个很好的描述为什么这可能是危险的这里:
PowerShell 实际上是命令 shell 和脚本语言,旨在取代 Windows 系统上的 CMD 和批处理脚本。因此,PowerShell 脚本几乎可以配置为执行您从命令行手动执行的任何操作。这相当于在您的系统上进行几乎任何可能的更改,直到您的用户帐户受到限制。因此,如果您只需双击 PowerShell 脚本并以完全管理员权限运行它,那么像这样的简单一行代码就真的会毁了你的一天:
Get-ChildItem "$env:SystemDrive\" -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
不要运行上述命令!...
更糟糕的是,你的朋友不但不会得到一个只会破坏其文件系统的脚本,反而可能会被诱骗运行一个会下载并安装键盘记录器或远程访问服务的脚本。
但实际上,.bat
只需将代码作为命令行参数传递给 powershell,即可通过文件执行 powershell 代码。因此,PowerShell 现在依赖于澳大利亚及新西兰(反恶意软件扫描接口)来阻止恶意脚本。由于某些无法解释的原因,原来的限制仍然保留。