# Halo CLI 高级用法 本文件包含 Halo CLI 的高级用法和示例场景。 ## 内容目录 1. [批量操作](#批量操作) 2. [自动化脚本](#自动化脚本) 3. [内容迁移](#内容迁移) 4. [SEO 优化](#seo-优化) --- ## 批量操作 ### 批量导出文章 ```powershell # 导出所有文章为 JSON halo post list --page 1 --size 100 --json > all_posts.json # 批量导出为 Markdown $posts = halo post list --page 1 --size 100 --json | ConvertFrom-Json foreach ($post in $posts.items) { halo post export-markdown $post.name --output "./export/$($post.name).md" } ``` ### 批量更新标签 ```powershell # 给多篇文章添加标签 $posts = halo post list --page 1 --size 20 --json | ConvertFrom-Json foreach ($post in $posts.items) { halo post update $post.name --tags "Python,教程,技术分享" } ``` ### 批量发布 ```powershell # 将所有草稿发布 $posts = halo post list --page 1 --size 100 --json | ConvertFrom-Json foreach ($post in $posts.items) { if ($post.status -eq "draft") { halo post update $post.name --publish true Write-Host "已发布: $($post.title)" } } ``` --- ## 自动化脚本 ### 文章备份脚本 ```powershell # backup-halo-posts.ps1 param( [int]$PageSize = 50 ) $backupDir = ".\halo-backup\$(Get-Date -Format 'yyyy-MM-dd')" New-Item -ItemType Directory -Path $backupDir -Force | Out-Null $page = 1 $totalExported = 0 do { Write-Host "正在导出第 $page 页..." $result = halo post list --page $page --size $PageSize --json | ConvertFrom-Json foreach ($post in $result.items) { $filename = "$backupDir\$($post.name).md" halo post export-markdown $post.name --output $filename $totalExported++ } $page++ } while ($result.hasNext) Write-Host "备份完成!共导出 $totalExported 篇文章到 $backupDir" ``` ### 定时发布脚本 ```powershell # scheduled-publish.ps1 param( [string]$FilePath ) if (-not (Test-Path $FilePath)) { Write-Error "文件不存在: $FilePath" exit 1 } $content = Get-Content $FilePath -Raw $title = [System.IO.Path]::GetFileNameWithoutExtension($FilePath) Write-Host "正在发布: $title" halo post create --title $title --content $content --publish true if ($LASTEXITCODE -eq 0) { Write-Host "发布成功!" } else { Write-Error "发布失败" exit 1 } ``` --- ## 内容迁移 ### 从其他平台导入 ```powershell # 从 WordPress 导出文件导入 halo post import-markdown --file .\wordpress-export\post-1.md halo post import-markdown --file .\wordpress-export\post-2.md # 批量导入 Get-ChildItem .\wordpress-export\*.md | ForEach-Object { halo post import-markdown --file $_.FullName Write-Host "已导入: $($_.Name)" } ``` ### 迁移到其他平台 ```powershell # 导出为标准格式 halo post list --page 1 --size 100 --json > migration.json # 转换为其他 CMS 格式(如 Hugo、Jekyll) # 需要额外的转换脚本处理 JSON 到目标格式 ``` --- ## SEO 优化 ### 检查文章 SEO ```powershell # 获取最近 10 篇文章的 SEO 信息 $posts = halo post list --page 1 --size 10 --json | ConvertFrom-Json foreach ($post in $posts.items) { $detail = halo post get $post.name --json | ConvertFrom-Json Write-Host "文章: $($detail.title)" Write-Host " - 字数: $($detail.wordCount)" Write-Host " - 标签: $($detail.tags -join ', ')" Write-Host " - URL: $($detail.slug)" Write-Host "" } ``` ### 批量更新 SEO 描述 ```powershell # 为所有文章添加 SEO 描述 $posts = halo post list --page 1 --size 50 --json | ConvertFrom-Json foreach ($post in $posts.items) { $detail = halo post get $post.name --json | ConvertFrom-Json # 生成描述(前 160 个字符) $excerpt = $detail.content -replace '<[^>]+>', '' # 去除 HTML 标签 $excerpt = $excerpt.Substring(0, [Math]::Min(160, $excerpt.Length)) halo post update $post.name --description $excerpt } ``` --- ## 高级配置 ### 使用不同 Profile ```powershell # 列出所有配置 halo auth profile list # 使用指定配置 halo post list --profile production # 创建新配置 halo auth login --profile aliyun --url http://101.133.128.193:8091 --auth-type bearer --token ``` ### 环境变量配置 ```powershell # 临时修改配置目录 $env:HALO_CLI_CONFIG_DIR = "d:\halo-config" # 使用代理 $env:HTTPS_PROXY = "http://proxy:8080" # 禁用 SSL 验证(不推荐) $env:HALO_CLI_INSECURE_SSL = "true" ``` ### 调试模式 ```powershell # 显示详细输出 halo post list --page 1 --size 20 --verbose # 查看配置 halo auth current --verbose # 查看请求/响应 halo post get --debug ``` --- ## 常见问题解决 ### Token 过期 ```powershell # 刷新 Token halo auth login --profile local --url http://192.168.5.8:8091 --auth-type bearer --token ``` ### 网络问题 ```powershell # 使用超时设置 halo post list --timeout 30 # 重试机制 $maxRetries = 3 for ($i = 1; $i -le $maxRetries; $i++) { halo post list --page 1 --size 20 if ($LASTEXITCODE -eq 0) { break } Start-Sleep -Seconds 5 } ``` ### 并发限制 Halo API 有请求限制,高并发操作可能导致失败。建议: - 使用 `--rate-limit 10`(如果支持) - 添加延迟:`Start-Sleep -Milliseconds 100` - 批量操作使用 `--batch` 标志(如果支持)