PowerShell 腳本怎麼寫提示詞(Windows 批量處理文件與日誌:先預覽再執行、帶日誌和錯誤處理)

在 Windows 上要批量重命名、整理歸檔文件、統計日誌、導出報表,想寫一個能重複使用的 PowerShell 腳本時用:描述任務,得到帶參數、預覽模式、錯誤處理和日誌的 .ps1 腳本,附運行方法和常見報錯的處理。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名熟悉 Windows 運維和 PowerShell 的工程師。請幫我寫一個 PowerShell 腳本。

- 要完成的任務(按步驟寫):[任務描述]
- 處理的對象與位置:[處理的對象與位置](例:D 盤某目錄下的所有 Excel 文件、IIS 日誌)
- PowerShell 版本:[PowerShell 版本](可選:Windows 自帶 5.1/PowerShell 7/不確定)
- 運行方式:[運行方式](可選:雙擊運行/手動在終端運行/任務計劃程序定時運行)
- 輸出要求:[輸出要求](例:生成 CSV 彙總、在原地改名、移動到歸檔目錄)

腳本要求:
1. 使用參數塊定義輸入參數,必填參數和預設值寫清楚;腳本開頭有註釋形式的幫助說明(用途、參數、示例),可以用 Get-Help 查看。
2. 支持預覽:會修改、移動、刪除文件的操作,支持 -WhatIf 預覽將要執行的動作;預設先預覽,確認後再正式執行。
3. 錯誤處理:使用 try / catch,關鍵操作出錯時記錄是哪個文件、什麼原因,並繼續處理下一個還是立即停止要說明理由。
4. 日誌:把處理結果(成功、跳過、失敗)寫入帶時間戳的日誌文件,結束時輸出彙總數量。
5. 兼容性:
   - 說明腳本在 5.1 和 7 中是否都能運行,有差異的地方標出;
   - 處理中文路徑和中文內容時的編碼問題(讀寫 CSV、文本文件時顯式指定編碼);
   - 路徑中有空格、特殊字符時的處理。
6. 安全:只操作指定目錄內的文件;不修改系統設定、註冊表和安全策略;刪除操作改為移動到回收目錄,由我確認後再手動清理。
7. 運行說明:如何打開終端運行;如果遇到「禁止運行腳本」的提示,說明這是執行策略的限制,告訴我查看當前策略的命令,並建議我自行決定、只為當前會話臨時放開,不要修改全局設定。

輸出:完整腳本(中文註釋)、運行示例、常見報錯與解決方法。

高亮處換成你自己的內容:[任務描述]、[處理的對象與位置]、[PowerShell 版本]、[運行方式]、[輸出要求]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[PowerShell 版本] 不確定時,在終端運行 $PSVersionTable.PSVersion 查看。Windows 自帶的是 5.1,它和 PowerShell 7 在預設編碼等細節上有差別,處理中文時尤其要注意。

常見坑:

  • Windows PowerShell 5.1 導出 CSV 的預設編碼,用 Excel 打開中文可能亂碼。腳本中要顯式指定編碼(例如帶 BOM 的 UTF-8),並說明 5.1 與 7 的差異。
  • 一上來就執行刪除或移動,路徑寫錯就無法挽回。先用 -WhatIf 預覽,確認無誤再正式運行。
  • 遇到執行策略提示時,網上常見的做法是永久放寬系統策略。更穩妥的是隻對當前會話臨時放開,由你自己決定。

追問技巧:腳本運行報錯時,把完整的紅色錯誤訊息貼回去(包括行號),問「這個錯誤的原因和修改方法」;需要定時運行時,追問「用任務計劃程序定時運行這個腳本的設定步驟」。

示例輸出

示例,僅供參考(按修改日期把文件歸檔到「年-月」子目錄,節選)
powershell
<#
.SYNOPSIS
  按文件修改日期把文件移動到「年-月」子目錄。
.EXAMPLE
  .\Archive-Files.ps1 -Source 'D:\報表' -WhatIf
#>
[CmdletBinding(SupportsShouldProcess)]
param(
  [Parameter(Mandatory)][string]$Source,
  [string]$LogFile = (Join-Path $PSScriptRoot "archive-$(Get-Date -Format yyyyMMdd).log")
)

$ok = 0; $fail = 0
Get-ChildItem -LiteralPath $Source -File | ForEach-Object {
  $target = Join-Path $Source $_.LastWriteTime.ToString('yyyy-MM')
  try {
    if ($PSCmdlet.ShouldProcess($_.FullName, "移動到 $target")) {
      New-Item -ItemType Directory -Path $target -Force | Out-Null
      Move-Item -LiteralPath $_.FullName -Destination $target -ErrorAction Stop
      Add-Content -Path $LogFile -Value "$(Get-Date -Format s) 成功 $($_.Name)" -Encoding utf8
      $ok++
    }
  } catch {
    Add-Content -Path $LogFile -Value "$(Get-Date -Format s) 失敗 $($_.Name):$($_.Exception.Message)" -Encoding utf8
    $fail++
  }
}
Write-Host "完成:成功 $ok,失敗 $fail,日誌 $LogFile"

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~