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

求助:远程服务器跨会话终止指定目录来源进程的方法

解决远程服务器指定目录进程终止问题

问题分析

你之前的脚本无效,大概率是这几个原因:

  • 远程执行时没有足够权限访问其他用户会话的进程完整路径
  • Get-Process在远程会话中无法获取所有用户进程的路径信息
  • 遍历文件精确匹配的方式太死板,容易因为子目录、路径大小写问题遗漏进程

可行解决方案

方案1:用CIM远程查询并终止进程

通过CIM会话连接远程服务器,直接筛选路径包含目标目录的进程,能跨用户会话获取进程信息,权限足够时可以直接终止:

# 配置目标服务器和需要处理的目录
$targetServer = "你的远程服务器名"
$targetDirs = @("C:\CSV\X", "C:\MyItem")

# 创建远程CIM会话(需要管理员权限,且远程服务器开启WinRM服务)
$cimSession = New-CimSession -ComputerName $targetServer

# 遍历目标目录,查询并终止对应进程
foreach ($dir in $targetDirs) {
    $matchingProcesses = Get-CimInstance -CimSession $cimSession -ClassName Win32_Process | 
                         Where-Object { $_.ExecutablePath -like "$dir\*" }
    
    if ($matchingProcesses) {
        $matchingProcesses | Invoke-CimMethod -MethodName Terminate -Verbose
    }
}

# 结束后关闭CIM会话
Remove-CimSession -CimSession $cimSession

方案2:结合fsmgmt.msc的会话信息处理

既然你能通过fsmgmt.msc看到锁定文件的进程,就可以直接针对查到的进程ID操作:

  1. 远程打开fsmgmt.msc,找到目标目录下文件对应的**进程ID(PID)**和会话信息
  2. 用以下命令远程终止这些进程:
$targetServer = "你的远程服务器名"
# 替换为fsmgmt.msc中查到的进程ID列表
$targetPids = @(1234, 5678)

Invoke-Command -ComputerName $targetServer -ScriptBlock {
    param($pids)
    Stop-Process -Id $pids -Force -Verbose
} -ArgumentList $targetPids

方案3:用PsTools工具(无需WinRM)

如果远程服务器没开WinRM,可以用PsExec工具远程执行命令:

# 替换为实际服务器名和目录路径
psexec \\你的远程服务器名 taskkill /f /fi "MODULES eq C:\CSV\X\*"
psexec \\你的远程服务器名 taskkill /f /fi "MODULES eq C:\MyItem\*"

注意事项

  • 所有操作必须拥有远程服务器的管理员权限,同时确保远程服务器允许对应的访问方式(WinRM或文件共享)
  • 终止进程前建议先单独执行查询命令确认目标进程,避免误杀业务进程
  • 如果目录路径包含空格,需要用双引号包裹,比如"C:\Program Files\MyItem"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:53