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

如何终止远程服务器特定目录下跨会话运行的进程?

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

原脚本失效原因

  • 未针对远程服务器执行,默认仅查询本地进程
  • 普通权限下,Get-Process的Path属性无法获取其他用户会话中进程的启动路径,导致过滤逻辑失效
  • 遍历目录所有文件再匹配进程路径的方式效率低下,且容易遗漏实际未运行的文件

解决方案(远程服务器)

需以管理员身份运行PowerShell,且目标服务器已开启WinRM(可通过Enable-PSRemoting命令配置)。以下脚本可跨用户会话终止指定目录启动的所有进程:

# 替换为你的远程服务器名称/IP
$remoteServer = "RemoteServer01"
# 替换为目标目录路径
$targetDir = "C:\CSV\X"

Invoke-Command -ComputerName $remoteServer -ScriptBlock {
    param($targetDir)
    # 标准化目录路径,避免斜杠、大小写匹配问题
    $standardizedDir = [System.IO.Path]::GetFullPath($targetDir).TrimEnd('\') + '\'
    # 通过CIM获取所有进程,过滤启动路径属于目标目录的进程
    Get-CimInstance Win32_Process | 
        Where-Object { $_.ExecutablePath -like "$standardizedDir*" } | 
        ForEach-Object {
            Stop-Process -Id $_.ProcessId -Force -Verbose
        }
} -ArgumentList $targetDir

本地跨会话终止脚本

如果仅需在本地服务器操作,去掉远程执行部分即可:

$targetDir = "C:\CSV\X"
$standardizedDir = [System.IO.Path]::GetFullPath($targetDir).TrimEnd('\') + '\'

Get-CimInstance Win32_Process | 
    Where-Object { $_.ExecutablePath -like "$standardizedDir*" } | 
    ForEach-Object {
        Stop-Process -Id $_.ProcessId -Force -Verbose
    }

关键说明

  • 使用Get-CimInstance Win32_Process而非Get-Process:前者能在管理员权限下获取所有用户会话进程的ExecutablePath,解决跨会话进程路径不可见的问题
  • 标准化目录路径:避免因斜杠格式、大小写差异导致的匹配失败
  • 必须以管理员身份运行:否则无法终止其他用户会话的进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:15:30