You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本运行提示Missing statement block错误如何解决?

PowerShell脚本报错解决方案

直接报错原因

你遇到的Missing Statement Block错误核心是if语句语法不符合PowerShell规范:
PowerShell要求if的所有判断逻辑必须整体包裹在一对圆括号内,你的首行if语句将-or逻辑运算符放在了条件括号外,同时末尾多了一个冗余的右括号,直接触发语法报错。

其他存在的问题

  • 脚本中单独的Delete不是合法PowerShell命令,PowerShell删除操作需使用Remove-Item并指定删除目标
  • 变量$ExecutionPolicyStatus、$Logbestand均未定义
  • 脚本当前逻辑完全没有读取ExecutionPolicy配置的代码,和你要实现的「ExecutionPolicy状态为Bypass时写入文件」的需求不匹配
  • 缺少I盘路径不存在时的自动创建逻辑

修正后的可运行脚本示例

# 定义日志路径变量
$Logbestand = "I:\APPDATA\Powershell\ExecutionPolicy\Log\execution_policy.log"
# 读取当前ExecutionPolicy配置
$ExecutionPolicyStatus = Get-ExecutionPolicy -Scope CurrentUser

# 外层判断DA或VPN是否连通(整个条件包裹在同一对圆括号内)
If ( ((Get-DAConnectionStatus).Status -eq 'ConnectedRemote') -or ((Get-VpnConnection -AllUserConnection | Where {$_.Name -eq 'Always On VPN Device Tunnel versie 1.0'}).connectionStatus -eq 'Connected') )
{
    If ((Get-DAConnectionStatus).Status -eq 'ConnectedRemote')
    {
        # 判断日志目录是否存在,不存在则自动创建
        $logDir = Split-Path $Logbestand -Parent
        If (-not (Test-Path $logDir))
        {
            New-Item -Path $logDir -ItemType Directory -Force | Out-Null
        }
        # 判断ExecutionPolicy是否为Bypass,是则写入日志
        If ($ExecutionPolicyStatus -eq 'Bypass')
        {
            $ExecutionPolicyStatus | Out-File -FilePath $Logbestand -Append
            # 如果你需要删除旧日志可以用下面的命令,示例为删除当前日志文件
            # Remove-Item -Path $Logbestand -Force -ErrorAction SilentlyContinue
        }
        Else {
            Write-Output "ExecutionPolicy状态不是Bypass"
        }
    } Else {
        Write-Output "Directacces verbinding niet gevonden"
    }
} Else {
    Write-Output "VPN/DA未连接"
}

调试提示

你可以在PowerShell ISE或者VS Code的PowerShell插件中运行脚本,语法检查功能会直接标红括号不匹配、命令不存在这类基础错误,方便快速定位问题。

内容的提问来源于stack exchange,提问作者Jeroen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:27:03