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

PowerShell脚本问题:无法生成含系统名与路径的可用列表

解决PowerShell审计脚本的输出问题

我明白你现在的困扰——脚本跑出来的结果和预期对不上,核心问题出在你最后创建输出对象的方式上,咱们一步步拆解修复:

原脚本的问题所在

你最后创建$Output时,把整个$list(所有子文件夹路径数组)和$list2(所有系统名数组)直接塞给了单个PSObject的两个属性。这就导致输出表格里,Name列是一整串所有路径,Path列是一整串所有系统名,而不是每行对应一个系统名和它的路径。另外,分开的两次循环不仅冗余,还容易出现数组索引错位的风险。

修正后的脚本

咱们把逻辑简化,直接在遍历子文件夹时就创建对应对象,一步到位:

# Path to folder repository. Folder names must be the systems host name.
$list_paths = (Import-Csv 'C:\CVS\path\Paths.csv').path

# 初始化结果数组与计数器
$outputList = @()
$rootFolderCount = 0
$hostFolderCount = 0

# 遍历每个根路径,直接生成对应条目
foreach ($rootPath in $list_paths) {
    $rootFolderCount++
    # 获取当前根路径下的所有子文件夹(-Directory等价于筛选PSIsContainer=$true)
    $subFolders = Get-ChildItem -Path $rootPath -Directory
    foreach ($folder in $subFolders) {
        $hostFolderCount++
        # 逐个创建关联好Name和Path的对象
        $outputItem = [PSCustomObject]@{
            Name = $folder.Name
            Path = $folder.FullName
        }
        $outputList += $outputItem
    }
}

# 输出格式化后的结果表格
$outputList | Format-Table -AutoSize | Out-Host

# 输出统计信息
Write-Host "Number of root folders: $rootFolderCount"
Write-Host "Number of host folders: $hostFolderCount"

关键改进点

  1. 直接关联Name和Path:遍历子文件夹时立刻创建对应对象,确保系统名和路径一一绑定,从根源避免错位问题。
  2. 简化逻辑减少冗余:把两次循环合并成嵌套循环,省去额外的数组存储和二次遍历,代码更简洁高效。
  3. 使用[PSCustomObject]:这是PowerShell 3.0+推荐的自定义对象创建方式,比New-Object PSObject更直观简洁。
  4. 优化输出可读性:用Format-Table -AutoSize让表格自动适配列宽,Out-Host确保表格正确渲染。

这样运行后,你就能得到每行对应一个系统名和其完整路径的列表,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:55