好的!我們可以創(chuàng)建一個(gè) 自動(dòng)檢測(cè)并修復(fù) rdpclip.exe 的計(jì)劃任務(wù),在它未運(yùn)行或卡死時(shí)自動(dòng)重啟,從而保持遠(yuǎn)程桌面剪貼板功能可用。
? 整體方案
-
編寫 PowerShell 腳本:檢測(cè)
rdpclip.exe是否運(yùn)行,若未運(yùn)行則啟動(dòng)。 - 配置 Windows 計(jì)劃任務(wù):定期(如每5分鐘)以當(dāng)前用戶身份運(yùn)行該腳本。
- 無(wú)需管理員權(quán)限(除非你希望對(duì)所有用戶生效)。
?? 第一步:創(chuàng)建 PowerShell 檢測(cè)腳本
將以下內(nèi)容保存為 Check-RdpClip.ps1(例如保存到 C:\Scripts\Check-RdpClip.ps1):
# Check-RdpClip.ps1
# 自動(dòng)檢測(cè)并重啟 rdpclip.exe(僅限當(dāng)前用戶會(huì)話)
$ProcessName = "rdpclip"
$LogPath = "$env:USERPROFILE\Logs\RdpClipFix.log"
# 創(chuàng)建日志目錄
$LogDir = Split-Path $LogPath -Parent
if (!(Test-Path $LogDir)) { New-Item -ItemType Directory -Path $LogDir -Force | Out-Null }
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# 檢查進(jìn)程是否存在
$Process = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
if ($Process) {
# 進(jìn)程存在,可選:檢查是否無(wú)響應(yīng)(高級(jí))
# 此處簡(jiǎn)化處理:只要存在就不操作
Add-Content -Path $LogPath -Value "[$Timestamp] $ProcessName 正在運(yùn)行。"
} else {
Add-Content -Path $LogPath -Value "[$Timestamp] $ProcessName 未運(yùn)行,正在啟動(dòng)..."
try {
Start-Process "$env:windir\system32\rdpclip.exe"
Add-Content -Path $LogPath -Value "[$Timestamp] $ProcessName 已成功啟動(dòng)。"
} catch {
Add-Content -Path $LogPath -Value "[$Timestamp] 啟動(dòng)失敗: $_"
}
}
?? 說(shuō)明:
- 該腳本只檢查當(dāng)前用戶的
rdpclip.exe(RDP 剪貼板進(jìn)程是每個(gè)用戶獨(dú)立的)。- 日志保存在
%USERPROFILE%\Logs\RdpClipFix.log,便于排查。
?? 第二步:設(shè)置執(zhí)行策略(僅首次需要)
PowerShell 默認(rèn)可能禁止腳本運(yùn)行。以當(dāng)前用戶身份運(yùn)行以下命令(無(wú)需管理員):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
輸入
Y確認(rèn)即可。這僅影響當(dāng)前用戶,安全且必要。
?? 第三步:創(chuàng)建計(jì)劃任務(wù)(自動(dòng)每5分鐘運(yùn)行)
方法 A:使用 PowerShell 創(chuàng)建任務(wù)(推薦)
以當(dāng)前用戶身份運(yùn)行以下 PowerShell 腳本(復(fù)制粘貼執(zhí)行一次即可):
$TaskName = "AutoFix-RdpClip"
$ScriptPath = "C:\Scripts\Check-RdpClip.ps1"
# 確保腳本路徑存在
if (!(Test-Path (Split-Path $ScriptPath))) {
New-Item -ItemType Directory -Path (Split-Path $ScriptPath) -Force
}
# 創(chuàng)建計(jì)劃任務(wù)動(dòng)作:運(yùn)行 PowerShell 腳本
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -WindowStyle Hidden -File `"$ScriptPath`""
# 觸發(fā)器:每5分鐘運(yùn)行一次(從現(xiàn)在開始)
$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5)
# 設(shè)置:僅在用戶登錄時(shí)運(yùn)行,不喚醒計(jì)算機(jī),允許按需啟動(dòng)
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit (New-TimeSpan -Hours 1)
# 注冊(cè)任務(wù)(僅當(dāng)前用戶)
Register-ScheduledTask -TaskName $TaskName -Action $Action -Trigger $Trigger -Settings $Settings -Description "自動(dòng)檢測(cè)并修復(fù) RDP 剪貼板進(jìn)程" -RunLevel Limited
? 該任務(wù):
- 僅在你登錄到桌面時(shí)運(yùn)行(符合 RDP 使用場(chǎng)景)。
- 隱藏窗口(
-WindowStyle Hidden),不影響操作。- 每 5 分鐘檢查一次(可修改
-Minutes 5調(diào)整頻率)。- 不需要管理員權(quán)限。
方法 B:手動(dòng)通過(guò)“任務(wù)計(jì)劃程序”創(chuàng)建(圖形界面)
- 打開 任務(wù)計(jì)劃程序(Win + R →
taskschd.msc)。 - 右側(cè)點(diǎn)擊 “創(chuàng)建基本任務(wù)”。
- 名稱:
AutoFix-RdpClip - 觸發(fā)器:選擇 “每天” → 下一步 → 設(shè)置開始時(shí)間 → 勾選 “重復(fù)任務(wù)間隔” → 選 5 分鐘,持續(xù) 無(wú)限期。
- 操作:“啟動(dòng)程序” → 程序填:
參數(shù)填:PowerShell.exe-NoProfile -WindowStyle Hidden -File "C:\Scripts\Check-RdpClip.ps1" - 完成前勾選 “當(dāng)點(diǎn)擊‘完成’時(shí),打開此任務(wù)屬性”。
- 在“常規(guī)”選項(xiàng)卡中:
- 選擇 “只在用戶登錄時(shí)運(yùn)行”
- 勾選 “不存儲(chǔ)密碼”(如果不需要跨會(huì)話)
- 點(diǎn)擊確定。
?? 驗(yàn)證是否生效
- 手動(dòng)結(jié)束
rdpclip.exe(任務(wù)管理器)。 - 等待最多 5 分鐘(或立即右鍵任務(wù) → “運(yùn)行” 測(cè)試)。
- 檢查日志文件:
%USERPROFILE%\Logs\RdpClipFix.log - 查看任務(wù)管理器是否重新出現(xiàn)
rdpclip.exe。
?? 停用或刪除任務(wù)
如需停用,打開任務(wù)計(jì)劃程序 → 找到 AutoFix-RdpClip → 右鍵禁用或刪除。
或 PowerShell 刪除:
Unregister-ScheduledTask -TaskName "AutoFix-RdpClip" -Confirm:$false
? 總結(jié)
| 組件 | 說(shuō)明 |
|---|---|
| 腳本 |
Check-RdpClip.ps1:智能檢測(cè)+啟動(dòng) |
| 日志 | %USERPROFILE%\Logs\RdpClipFix.log |
| 計(jì)劃任務(wù) | 每5分鐘運(yùn)行一次,僅當(dāng)前用戶登錄時(shí)有效 |
| 權(quán)限 | 無(wú)需管理員,安全可靠 |
如果你希望這個(gè)任務(wù)在所有 RDP 用戶登錄時(shí)都生效(多用戶服務(wù)器環(huán)境),也可以配置為“在用戶登錄時(shí)觸發(fā)”,我可以提供多用戶版本。需要嗎?