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

Windows 22H2更新后PowerShell的InvokeVerb("delete")命令冻结排查求助

解决PowerShell调用Shell.Application的InvokeVerb("delete")冻结问题(Windows 22H2后)

一、基础调试排查步骤

  • 直接在PowerShell控制台执行脚本:跳过第三方应用间接调用,手动打开PowerShell(普通/管理员权限都测试),逐行运行原代码。如果控制台运行正常,问题出在第三方应用的调用环境/权限差异;如果控制台也冻结,说明是系统层面的问题。
  • 验证目标路径状态:
    • 确认C:\New folder\test存在,且当前用户拥有该路径的修改/删除权限(右键属性→安全选项卡检查)。
    • 更换简单测试路径(如C:\test.txt),排除路径含特殊字符、文件被占用的可能。
  • 检查系统事件日志:打开事件查看器,查看Windows日志→应用程序/系统日志,排查执行脚本时是否有COM组件注册失败、Shell服务异常等相关错误。
  • 重新注册Shell组件:执行命令修复可能因更新损坏的COM注册:
    regsvr32.exe shell32.dll
    

二、替代解决方案(绕过InvokeVerb冻结)

如果调试后仍无法解决,可换用更稳定的实现方式:

方案1:使用PowerShell原生Remove-Item命令(PowerShell 5.1+支持)

无需依赖COM组件,直接调用原生命令移入回收站:

Remove-Item -Path "C:\New folder\test" -RecycleBin -Force
  • -Force参数用于处理只读文件/文件夹,无只读属性可省略。

方案2:调用Windows原生API实现

通过Add-Type封装系统API,稳定性更高,还可获取操作结果:

Add-Type @"
using System;
using System.Runtime.InteropServices;

public class RecycleBin {
    [DllImport("shell32.dll", CharSet = CharSet.Unicode)]
    public static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct SHFILEOPSTRUCT {
        public IntPtr hwnd;
        public uint wFunc;
        public string pFrom;
        public string pTo;
        public ushort fFlags;
        public bool fAnyOperationsAborted;
        public IntPtr hNameMappings;
        public string lpszProgressTitle;
    }

    public const uint FO_DELETE = 0x0003;
    public const ushort FOF_ALLOWUNDO = 0x0040;
    public const ushort FOF_NOCONFIRMATION = 0x0010;
    public const ushort FOF_SILENT = 0x0004;
}
"@

$fileOp = New-Object RecycleBin+SHFILEOPSTRUCT
$fileOp.wFunc = [RecycleBin]::FO_DELETE
$fileOp.pFrom = "C:\New folder\test`0"  # 路径必须以空字符结尾
$fileOp.fFlags = [RecycleBin]::FOF_ALLOWUNDO -bor [RecycleBin]::FOF_NOCONFIRMATION -bor [RecycleBin]::FOF_SILENT

$result = [RecycleBin]::SHFileOperation([ref]$fileOp)
if ($result -eq 0) {
    Write-Host "已成功移入回收站"
} else {
    Write-Host "操作失败,错误码: $result"
}

三、排查22H2更新的潜在影响

  • 检查组策略设置:打开本地组策略编辑器(gpedit.msc),查看用户配置→管理模板→Windows组件→文件资源管理器中,是否有“删除文件时显示确认对话框”等选项被修改——如果调用环境无交互界面,这类设置会导致InvokeVerb等待用户确认而冻结。
  • 临时禁用安全软件:部分杀毒软件在22H2更新后可能拦截Shell组件操作,尝试临时关闭Windows Defender或第三方安全软件测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:47:47