You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

PowerShell脚本整合磁盘容量代码及单条输出需求求助

解决思路与代码修改方案

首先咱们得明确:要实现单台机器一行数据,通常有两种常见需求,你可以根据实际场景选择:

  • 只抓取**系统盘(C:)**的容量数据
  • 汇总所有本地固定磁盘的总容量、总可用容量

下面针对这两种情况,一步步告诉你怎么把磁盘代码插入现有脚本,同时保证每行对应一台机器:


第一步:找到脚本中创建自定义对象的位置

你的现有脚本应该是在收集完各类基础信息后,会创建一个自定义对象(比如用[PSCustomObject]),再把这个对象导出到CSV。磁盘容量的代码就插在这个自定义对象的属性定义环节。

先补全你未贴完的脚本核心结构做参考:

# 输出文件位置可按需修改
$file="C:\scripts\reports\InentoryTest_$((Get-Date).ToString('MM-dd-yyyy')).csv"
$txt="c:\scripts\reports\InentoryTest-error_$((Get-Date).ToString('MM-dd-yyyy')).txt"

# 收集计算机基础信息
$computerName = $env:COMPUTERNAME
$osInfo = Get-CimInstance Win32_OperatingSystem
$cpuInfo = Get-CimInstance Win32_Processor

# 这里就是要插入磁盘代码的核心位置!

第二步:添加磁盘容量代码(两种方案选其一)

方案1:只获取系统盘(C:)的容量数据

这种方案最简单,适合只关注系统盘使用情况的场景:

# 获取系统盘(C:)的容量信息
$systemDrive = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'"
$totalSizeGB = [math]::Round($systemDrive.Size / 1GB, 2)
$freeSpaceGB = [math]::Round($systemDrive.FreeSpace / 1GB, 2)

方案2:汇总所有本地固定磁盘的总容量/可用容量

如果需要统计所有本地硬盘的总和,用这个:

# 汇总所有本地固定磁盘的容量(DriveType=3代表本地固定磁盘)
$localDisks = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"
$totalSizeGB = [math]::Round(($localDisks | Measure-Object -Property Size -Sum).Sum / 1GB, 2)
$freeSpaceGB = [math]::Round(($localDisks | Measure-Object -Property FreeSpace -Sum).Sum / 1GB, 2)

第三步:把磁盘数据加入导出对象

接下来,在创建自定义对象时,把刚才的磁盘属性加进去——这样每台机器只会生成一个对象,对应CSV里的一行数据:

# 创建包含磁盘信息的自定义对象
$inventoryObject = [PSCustomObject]@{
    ComputerName    = $computerName
    OSName          = $osInfo.Caption
    CPUModel        = $cpuInfo.Name
    TotalDiskSizeGB = $totalSizeGB  # 新增磁盘总容量属性
    FreeDiskSpaceGB = $freeSpaceGB  # 新增磁盘可用容量属性
    # 其他你原本要收集的属性...
}

# 导出到CSV(-Append适合多机器批量执行时追加数据)
$inventoryObject | Export-Csv -Path $file -Append -NoTypeInformation -Encoding UTF8

第四步:可选但建议的错误处理

如果怕磁盘信息获取失败(比如权限问题),可以加个简单的错误捕获,把异常写到你的错误日志里:

try {
    # 把上面的磁盘获取代码放在try块里
    $systemDrive = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'" -ErrorAction Stop
    $totalSizeGB = [math]::Round($systemDrive.Size / 1GB, 2)
    $freeSpaceGB = [math]::Round($systemDrive.FreeSpace / 1GB, 2)
} catch {
    $errorMsg = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $computerName : 磁盘信息获取失败:$_"
    Add-Content -Path $txt -Value $errorMsg
    # 失败时给属性赋值默认值,避免CSV列缺失
    $totalSizeGB = "获取失败"
    $freeSpaceGB = "获取失败"
}

这样修改后,不管是单硬盘还是多硬盘系统,每台计算机都会在CSV里只输出一行,包含你需要的磁盘容量信息啦!

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

火山引擎 最新活动