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

如何在文件已存在时递增文件名?PowerShell脚本咨询

实现PowerShell导出Excel时的文件名递增

直接修改原脚本,添加文件名递增逻辑的同时优化AD查询效率,最终代码如下:

$Users = @"
SamAccountName;
FloydS
AdamS
SvacouM
FloydS
"@ | Convertfrom-csv -Delimiter ";"

$FilePath = "C:\TEMP\"
$date = Get-Date -Format yyyy-MM-dd

# 确保输出目录存在,避免因目录缺失报错
if (-not (Test-Path -Path $FilePath)) {
    New-Item -ItemType Directory -Path $FilePath | Out-Null
}

Foreach ($User in $Users) {
    # 一次性获取用户所需属性,减少重复AD查询
    $userObj = Get-ADUser $User.SamAccountName –Properties MemberOf, Name
    $userName = $userObj.Name

    # 生成基础文件名并拼接完整路径
    $baseFileName = "$userName ($date).xlsx"
    $fullPath = Join-Path -Path $FilePath -ChildPath $baseFileName

    # 文件名递增逻辑:如果文件已存在,添加数字后缀直至找到可用路径
    $counter = 1
    while (Test-Path -Path $fullPath) {
        $newFileName = "$userName ($date)-$counter.xlsx"
        $fullPath = Join-Path -Path $FilePath -ChildPath $newFileName
        $counter++
    }

    # 导出用户所属安全组到目标Excel文件
    $userObj.MemberOf | Get-ADGroup | Select-Object name | 
        Export-Excel -Path $fullPath -WorksheetName $date -AutoSize -AutoFilter -TableStyle Medium2
}

Write-Host "Done!"

关键逻辑说明

  • AD查询优化:将原脚本中两次Get-ADUser调用合并为一次,减少对域控制器的重复请求,提升执行效率。
  • 目录检查:自动创建不存在的输出目录,避免导出时因路径无效失败。
  • 递增文件名生成:
    1. 先按原格式生成基础文件名并检查是否存在;
    2. 若文件已存在,在文件名末尾追加-1、-2这类递增数字,循环检查直到找到未被占用的路径;
    3. 使用Join-Path处理路径拼接,避免手动拼接时的分隔符错误。

修改后,重复导出同一用户的报告时,会自动生成类似Floyd Smith (2024-05-20).xlsx、Floyd Smith (2024-05-20)-1.xlsx的递增文件名,不会覆盖原有文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:43