You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell遍历目录读取SSH公钥生成CSV导入AD问题咨询

解决方案

以下是同时满足两个需求的完整可运行PowerShell脚本,以及对应逻辑说明:


完整实现脚本

# 定义SSH公钥根存储目录
$sshRootPath = "C:\SSH"
# 定义最终输出的CSV文件路径
$outputCsvPath = "C:\Script\SSH Keys\users.csv"

# 遍历处理所有公钥文件
$userSshMapping = Get-ChildItem -Path $sshRootPath -Filter "*.pub" -Recurse -File | ForEach-Object {
    # 提取公钥所在上层目录名作为SamAccountName
    $account = $_.Directory.Name
    # 读取公钥完整内容,去除首尾多余换行、空格
    $publicKey = (Get-Content -Path $_.FullName -Raw).Trim()
    # 构造符合CSV字段要求的对象
    [PSCustomObject]@{
        SamAccountName = $account
        altSecurityIdentities = $publicKey
    }
}

# 导出为标准格式CSV
$userSshMapping | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8

对应问题逻辑说明

1. 批量遍历读取所有子目录.pub文件实现

  • 核心调用Get-ChildItem命令完成递归检索:
    • -Filter "*.pub"限定只匹配公钥后缀的文件
    • -Recurse开启根目录下所有层级子目录的自动遍历
    • -File过滤掉目录对象,只返回文件结果
  • 读取公钥时添加-Raw参数一次性读取完整文件内容,避免逐行读取导致的公钥格式断裂,搭配.Trim()方法去除首尾冗余的换行、空白字符。

2. 自动生成符合要求的CSV文件实现

  • 每个公钥文件的上层目录名通过$_.Directory.Name直接获取,直接作为SamAccountName字段值
  • 构造PSCustomObject对象时的属性名和要求的CSV列名完全对应,无需额外转换
  • 调用Export-Csv导出时:
    • -NoTypeInformation参数去掉PowerShell默认生成的类型说明头行,保证CSV格式和你现有AD写入脚本的要求完全匹配
    • -Encoding UTF8避免账号名或公钥含特殊字符时出现乱码

注意:如果单个用户目录下存在多个.pub文件,脚本会生成多条同账号的记录,可根据实际需求添加去重或多公钥合并逻辑。

生成的CSV文件可直接对接你现有写入AD属性的脚本,无需额外调整格式。


内容的提问来源于stack exchange,提问作者joni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:45:03