From e755d14a77af77093d1ada473159010451b457f6 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 29 九月 2026 11:03:35 +0800
Subject: [PATCH] 修 22 所取数程序在参数默认值里取脚本目录失败的问题

---
 scripts/j22-collector.ps1 |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/scripts/j22-collector.ps1 b/scripts/j22-collector.ps1
index 50fc189..9b912d2 100644
--- a/scripts/j22-collector.ps1
+++ b/scripts/j22-collector.ps1
@@ -50,13 +50,22 @@
     [int]$ConnectTimeoutSec = 10,
     [int]$CommandTimeoutSec = 15,
     [int]$HttpTimeoutSec = 30,
-    [string]$StateFile = (Join-Path $PSScriptRoot 'j22-collector-state.json'),
-    [string]$LogFile = (Join-Path $PSScriptRoot 'j22-collector.log'),
+    # 下面两个留空即在正文里解析成"脚本同目录";不要写成 param 默认值:
+    # Windows PowerShell 的参数默认值不在脚本作用域里求值,$PSScriptRoot 在那里是空的(现场实测踩到)。
+    [string]$StateFile,
+    [string]$LogFile,
     [switch]$Once
 )
 
 $ErrorActionPreference = 'Continue'
 
+# 脚本所在目录:$PSScriptRoot 为主,取不到时退回命令路径、再退回当前目录。
+$ScriptDirectory = $PSScriptRoot
+if ([string]::IsNullOrEmpty($ScriptDirectory)) { $ScriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path }
+if ([string]::IsNullOrEmpty($ScriptDirectory)) { $ScriptDirectory = (Get-Location).Path }
+if ([string]::IsNullOrEmpty($StateFile)) { $StateFile = Join-Path $ScriptDirectory 'j22-collector-state.json' }
+if ([string]::IsNullOrEmpty($LogFile)) { $LogFile = Join-Path $ScriptDirectory 'j22-collector.log' }
+
 # ---------------------------------------------------------------- 日志
 function Write-Log([string]$message) {
     $line = (Get-Date -Format 'yyyy-MM-dd HH:mm:ss') + ' ' + $message

--
Gitblit v1.7.1