如何无需键入powershell即可临时绕开执行策略直接运行ps1脚本
实现方案:单文件兼容CMD/PowerShell脚本
你可以通过编写多语兼容脚本实现单文件分发、用户无感知运行的需求,不需要修改系统全局执行策略,也不用同时维护两份脚本文件:
- 脚本后缀使用
.cmd,用户直接输入脚本名即可运行,和普通CMD脚本使用逻辑完全一致 - 脚本开头加CMD兼容的引导代码,自动调用PowerShell并临时启用
Bypass执行策略,仅对本次进程生效,不会修改系统全局配置 - 引导代码后直接写纯PowerShell逻辑即可,CMD会自动跳过这部分内容
代码示例(实现取当前目录第一个文件的需求)
<# : @powershell -NoProfile -ExecutionPolicy Bypass -Command "Invoke-Expression (Get-Content '%~f0' -Raw)" @goto :EOF #> # 此处开始编写任意PowerShell代码 Get-ChildItem -File | Select-Object -First 1 -ExpandProperty Name
实现原理
- 在CMD解析逻辑中,
<# :是无效标签,会直接执行后续的PowerShell调用命令,执行完成后通过goto :EOF直接退出,不会解析后面的PowerShell代码 - 在PowerShell解析逻辑中,
<#是多行注释起始标记,前面的CMD引导代码会被整体识别为注释,仅执行注释结束后的PowerShell逻辑
如果你坚持要使用.ps1后缀的文件,受Windows默认的文件关联规则限制,无法直接在CMD中输入脚本名运行,必须手动调用powershell命令或者修改系统级的文件关联配置,普通用户使用门槛较高,不推荐这种方案。
内容的提问来源于stack exchange,提问作者smalers
相关产品推荐
相关产品推荐

