当前位置:首页 > Windows技术

PS1 文件怎么运行?PowerShell 脚本执行方法与常见报错解决

邓鹏7小时前Windows技术18

经常有人拿着一个 .ps1 文件来问:双击为什么弹出记事本?右键运行为什么闪一下就没了?命令行一敲就报"禁止运行脚本"?这三个问题其实都不是脚本本身的问题——是运行方式不对。

这篇不讲原理,只给实际能用的命令:先把执行策略这个拦路虎解决掉,再给五种运行方式和定时运行配置,最后附一张常见报错速查表。照着敲就能跑通。

一、先解决"禁止运行脚本":执行策略(ExecutionPolicy)

Windows 默认策略是 Restricted,任何 .ps1 都不让跑,报错长这样:

无法加载文件 C:\scripts\test.ps1,因为在此系统上禁止运行脚本。有关详细信息。

按需三选一(推荐第 2 种):

# 1. 只对当前这一个窗口生效,关掉就恢复,最安全
   Set-ExecutionPolicy Bypass -Scope Process -Force
   
   # 2. 只给当前用户放开"本地脚本随便跑、下载的要签名",一次设置长期有效
   Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
   
   # 3. 不改策略,运行时临时绕过(跑别人的脚本最常用)
   powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\test.ps1"

各策略的含义,一张表说清:

策略本地脚本网络下载脚本适用场景
Restricted(默认)禁止禁止只跑单条命令的环境
RemoteSigned允许需数字签名个人电脑 / 服务器日常,推荐
AllSigned需签名需签名安全要求严格的企业环境
Bypass允许允许仅建议单次运行时用(-Scope Process)

查看当前策略用 Get-ExecutionPolicy -List,生效优先级从高到低:MachinePolicy > UserPolicy > Process > CurrentUser > LocalMachine。如果 MachinePolicy / UserPolicy 是 AllSigned 或 Restricted,那是组策略下发的,Set-ExecutionPolicy 改不动,得找域管理员。

image.png

二、五种实际可用的运行方式

方式 1:命令行 -File 运行(最推荐)

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\scripts\backup.ps1" -Days 7

三个参数值得记住:-NoProfile 跳过个人配置文件(启动更快、环境更干净);-ExecutionPolicy Bypass 不受本机策略限制;脚本自己的参数(如 -Days 7)直接跟在后面空格传。写进计划任务、批处理、文档教程,都用这一种。

方式 2:右键"使用 PowerShell 运行"

.ps1 文件右键就有这个菜单,适合无参数的小脚本。两个先天缺陷:不能传参数;跑完窗口立即关闭,出错都来不及看。想看结果,在脚本最后一行加 Read-Host "按回车退出",或者改用方式 1。

方式 3:在 PowerShell 会话里用 & 调用

# 路径带空格必须加 & 调用符
   & "C:\My Scripts\test.ps1"
   
   # 当前目录下的脚本要带 .\ 前缀
   .\test.ps1
   
   # 点源(dot-source):脚本里的变量和函数留在当前会话,写工具库时用
   . .\common-functions.ps1

方式 4:PowerShell 7 运行(pwsh)

pwsh -NoProfile -File "C:\scripts\test.ps1"

Windows 自带的 powershell.exe 是 5.1,装了 PowerShell 7 后命令是 pwsh。同一脚本两边行为可能不同——脚本针对哪个版本写的,就用哪个解释器跑,文件开头加上 #Requires -Version 7 可以强制版本检查。

方式 5:不落地直接跑一段命令

powershell.exe -NoProfile -Command "Get-Service | Where-Object {$_.Status -eq 'Stopped'}"

适合批处理里嵌一行 PowerShell、或远程执行的场景。多行逻辑建议还是落成 .ps1 文件,可读性和可维护性完全不是一个量级。

三、网上下载的脚本跑不了:先解锁(Unblock-File)

从浏览器、IM 下载的 .ps1 会带"网络标记"(Zone.Identifier),策略是 RemoteSigned 时照样被拦。先解锁再运行:

# 查看文件是否带标记
   Get-Item .\test.ps1 -Stream Zone.Identifier
   
   # 解锁单个文件(确认过内容之后)
   Unblock-File .\test.ps1
   
   # 解锁整个目录
   Get-ChildItem C:\scripts -Recurse | Unblock-File

四、需要管理员权限时怎么跑

# 从当前窗口弹一个管理员窗口运行
   Start-Process powershell -Verb RunAs -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\admin-task.ps1"'

也可以在脚本开头加一行 #Requires -RunAsAdministrator,权限不够时直接拒绝执行,比脚本跑到一半失败强得多。批处理里需要弹 UAC 时,用上面的 Start-Process -Verb RunAs。

五、定时自动运行:挂进计划任务

计划任务里不要直接填 .ps1 文件路径(默认动作不是用 PowerShell 解释它),正确填法:

字段填写内容
程序或脚本powershell.exe
添加参数-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\scripts\daily.ps1"
起始于C:\scripts\

三个要点:策略已经在参数里绕过了,本机策略不用动;-WindowStyle Hidden 不弹黑窗;排查任务为什么没跑时,先看任务历史记录,再手动执行同样的命令行验证。

六、常见报错速查表

现象原因处理
在此系统上禁止运行脚本执行策略拦截见第一节,推荐 -Scope CurrentUser RemoteSigned
无法将"test.ps1"识别为 cmdlet当前目录脚本没带 .\,或路径不对用 .\test.ps1 或绝对路径 + & 调用
项无法识别…因为名称包含无效字符路径带空格没加调用符& "C:\My Scripts\a.ps1"
脚本里的中文显示乱码文件编码不对另存为 UTF-8 with BOM(VS Code 右下角可改)
某模块加载不到 / 驱动行为异常32 位解释器跑的确认用的是 System32\WindowsPowerShell 下的 64 位版本
双击 / 右键运行窗口一闪而过跑完立即退出命令行加 -NoExit,或脚本末尾加 Read-Host
策略改了仍然报禁止组策略优先级更高用 Get-ExecutionPolicy -List 看顶层来源,联系域管理员

七、两条安全提醒

  1. Bypass 只做单次使用,别写进全局策略或长期留在计划任务参数里"图省事";日常环境设 RemoteSigned -Scope CurrentUser 就够了。

  2. 运行别人的脚本之前,先打开看一遍内容——notepad .\test.ps1 三十秒能看完的检查,省掉的是整个环境被清空的代价。来源不明的脚本,再急也不要 Bypass 硬跑。

PowerShell 中文社区团队承接企业底层 IT 基础设施技术服务:AD 域控建设迁移与故障处置、Exchange 邮件系统运维、VMware / Citrix 虚拟化、国产分布式存储故障定位、NVIDIA B300 / H100 / H200 算力服务器整机验收与压力测试,以及 PowerShell 自动化脚本定制(批量巡检、日志分析、报表生成、跨系统联动)与运维实战培训。

创始人:邓鹏|PowerShell 中文社区创始人,51CTO 认证讲师(2021 年度十大新锐讲师),西安交通大学计算机专业。长期从事企业级身份管理、虚拟化与自动化运维交付。

报价:脚本定制与培训按需求范围评估,价格另议;技术服务不含硬件设备采购。
   联系方式:邮箱 dengpeng@powershell.com.cn | 官网 www.powershell.com.cn
   服务流程:需求沟通 → 可行性评估 → 方案确认 → 报价确认 → 开发实施 → 验收交付。生产环境变更类脚本,一律先在测试环境验证、确认回滚方案后上线。

本文示例均在 Windows PowerShell 5.1 与 PowerShell 7 环境验证;执行策略以企业安全基线为准,本文方法不应绕过合规要求。

扫描二维码推送至手机访问

版权声明:本文由 PowerShell 中文社区发布,如需转载请注明出处。

联系咨询:邮箱 dengpeng@powershell.com.cn | 电话/微信 176-6506-6665 

本文链接:https://www.powershell.com.cn/post/204.html

“PS1 文件怎么运行?PowerShell 脚本执行方法与常见报错解决” 的相关文章

windows系统以管理员权限运行powershell脚本方法

windows系统以管理员权限运行powershell脚本方法

在 Windows 系统中,PowerShell 脚本默认情况下可能无法直接以管理员权限执行。这是为了确保系统的安全性和防止恶意脚本运行而采取的一种安全措施。然而,你可以使用以下几种方式来实现以管理员权限执行 PowerShell 脚本。手动以管理员身份运行 PowerShell:右键点击 Powe…

powersehll对windows注册表的增删改查

powersehll对windows注册表的增删改查

当使用 PowerShell 进行注册表操作时,以下是常用的注册表简称及其含义的详细解释:HKCU:代表 HKEY_CURRENT_USER,即当前用户的注册表项。它包含了当前登录用户的个人设置和配置信息。HKLM:代表 HKEY_LOCAL_MACHINE,即本地机器的注册表项。它包含了计算机的全…

Windows Server服务器重置RDS宽限期

Windows Server服务器重置RDS宽限期

前言:Windows server RDS默认宽限期是120天,激活需要购买授权才行。此方法仅用于测试使用,请勿在商业用途上使用。首先使用管理员权限运行CMD命令regedit,打开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Term…

Windows AD域控服务器时间不准问题解决

Windows AD域控服务器时间不准问题解决

大家都知道NTP服务器很重要,一般企业内网环境的服务器是不允许上互联网的。运行一定时间后,windwos系统本地时间肯定会跟互联网北京时间产生误差,那这个问题该怎么解决呢。解决方案有如下几种方法。1 企业内部搭建一台NTP服务器,NTP服务器同步源指向公网NTP服务器。然后把AD的NTP服务器指向企…

windows Server系统模板推荐设置操作

windows Server系统模板推荐设置操作

如下操作都旨在提高Windows Server系统的安全性、稳定性和性能。通过更新最新的补丁和启用远程桌面服务,可以及时修复已知漏洞,简化管理员的管理操作。关闭不必要的服务和功能,禁用IPv6以及关闭防火墙,可以减少系统资源消耗,提升网络通信效率,并降低潜在的安全风险。安装基本的安全软件和配置定期备…

Windows Server 系统完整安装实战教程

Windows Server 系统完整安装实战教程

摘要:本文为Windows Server2019/2022系统标准化安装实战教程,适配物理服务器与VMware虚拟机环境,包含启动U盘制作、BIOS引导设置、RAID驱动加载、磁盘分区安装、管理员配置、装机后安全初始化全套步骤,同时解决安装找不到硬盘、无法启动、密码报错等高频问题,是运维人员服务器部…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。