release: v1.0.3 统一个人 DWS 通知与简化初始化配置
This commit is contained in:
1 parent
a08cfd6a3b
commit
20c0de9b38
17 files changed
+670
-693
No files matched your search
@@ -0,0 +1,50 @@
|
||||
# Shared Windows launcher. Also supports: ./scripts/dingtalk-python.ps1 check --at '姓名'
|
||||
$ErrorActionPreference = 'Stop'
|
||||
if ($PSVersionTable.PSVersion -lt [version]'7.3') { throw '请使用 PowerShell 7.3+ 或独立 Python 入口。' }
|
||||
$PSNativeCommandArgumentPassing = 'Standard'
|
||||
|
||||
function Resolve-NoticePython {
|
||||
$candidates = @()
|
||||
if ($env:DINGTALK_PYTHON) {
|
||||
# An explicit choice must work; never silently substitute another runtime.
|
||||
$candidates = @($env:DINGTALK_PYTHON)
|
||||
} else {
|
||||
if ($env:USERPROFILE) {
|
||||
$bundled = Join-Path $env:USERPROFILE '.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe'
|
||||
if (Test-Path -LiteralPath $bundled -PathType Leaf) { $candidates += $bundled }
|
||||
}
|
||||
$candidates += @(Get-Command python, python3 -All -CommandType Application -ErrorAction SilentlyContinue |
|
||||
Select-Object -ExpandProperty Source)
|
||||
# py is probed, not trusted: it can also resolve to Store Python.
|
||||
$candidates += @(Get-Command py -All -CommandType Application -ErrorAction SilentlyContinue |
|
||||
Select-Object -ExpandProperty Source)
|
||||
}
|
||||
foreach ($candidate in ($candidates | Select-Object -Unique)) {
|
||||
if ($candidate -match '(?i)[\\/]WindowsApps[\\/]|PythonSoftwareFoundation\.Python\.') { continue }
|
||||
$prefix = if ([IO.Path]::GetFileName($candidate) -eq 'py.exe') { @('-3') } else { @() }
|
||||
try {
|
||||
$probe = & $candidate @prefix -I -c 'import json,sys; print(json.dumps({"exe":sys.executable,"supported":sys.version_info >= (3,9)}))' 2>$null
|
||||
if ($LASTEXITCODE -ne 0) { continue }
|
||||
$info = ($probe -join "`n") | ConvertFrom-Json
|
||||
if ($info.supported -and $info.exe -and
|
||||
$info.exe -notmatch '(?i)[\\/]WindowsApps[\\/]|PythonSoftwareFoundation\.Python\.' -and
|
||||
(Test-Path -LiteralPath $info.exe -PathType Leaf)) { return $info.exe }
|
||||
} catch { continue }
|
||||
}
|
||||
throw '未找到独立 Python 3.9+。请安装 python.org 版本或将 DINGTALK_PYTHON 设为独立 python.exe 的路径;不使用商店版,也不自动安装。'
|
||||
}
|
||||
|
||||
$pythonExe = Resolve-NoticePython
|
||||
$previousArgs = [Environment]::GetEnvironmentVariable('DINGTALK_PROGRESS_ARGV_B64', 'Process')
|
||||
$previousEncoding = [Environment]::GetEnvironmentVariable('PYTHONIOENCODING', 'Process')
|
||||
try {
|
||||
$encodedArgs = ConvertTo-Json -InputObject @($args) -Compress
|
||||
$env:DINGTALK_PROGRESS_ARGV_B64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($encodedArgs))
|
||||
$env:PYTHONIOENCODING = 'utf-8'
|
||||
& $pythonExe "$PSScriptRoot/dingtalk_notify.py"
|
||||
$exitCode = $LASTEXITCODE
|
||||
} finally {
|
||||
[Environment]::SetEnvironmentVariable('DINGTALK_PROGRESS_ARGV_B64', $previousArgs, 'Process')
|
||||
[Environment]::SetEnvironmentVariable('PYTHONIOENCODING', $previousEncoding, 'Process')
|
||||
}
|
||||
exit $exitCode
|
||||
Reference in new issue
Block a user