windows - 如何获取 Windows 中的每个磁盘并过滤 DeviceType,然后在其旁边添加磁盘的大小,以逗号分隔?

标签 windows powershell foreach

我正在编写一个 PowerShell 脚本来收集计算机的一些数据。我快完成了,但我不知道如何获取计算机上所有磁盘的大小。我知道如何用几个 If 语句来完成它,但我希望它自动检测驱动器,而不是如果连接了新磁盘我必须编写一个新的 If 语句。我想要的输出如下:“A:,250GB”。 “A:”位有效,但磁盘大小位无效。

这是我使用和调整过的代码,但无济于事:

$Drives = Get-WmiObject Win32_logicaldisk| ?{$_.DriveType -eq 3} | ForEach-Object {$_.name}
ForEach ($Drivename in $Drives) {
    $Drivenames = Get-WMIObject -Query "Select * From win32_logicaldisk Where DriveType = '3'" -computer localhost | Select-Object DeviceID               
    $Drive = [Math]::Round($Drivenames.Size / 1GB)
    "$Drivenames,", $Drive | Out-File "C:\HDS\HDS_DRIVES.csv" -Append
}

此外,[Math]::Round($Drivenames.Size/1GB) 抛出一个错误:

Method invocation failed because [System.Object[]] does not contain a method named 'op_Division'"

最佳答案

您可以将 Calculated Property 与 Select-Object 一起使用以使其变得更加简单:

Get-WmiObject Win32_logicaldisk| ? {$_.DriveType -eq 3} | 
Select-Object @{N="DeviceId";E={$_.DeviceId}},`
@{N="VolumeName";E={$_.VolumeName}},`
@{N="Size";E={[Math]::Round($_.Size / 1GB)}} | 
Out-File "C:\HDS\HDS_DRIVES.csv" -Append

请注意,您不需要像示例中那样调用 Get-WmiObject 两次。

关于windows - 如何获取 Windows 中的每个磁盘并过滤 DeviceType,然后在其旁边添加磁盘的大小,以逗号分隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51653682/

相关文章:

c - 当 Web 服务器创建新的 TCP 连接时,Web 浏览器缓存如何工作?

windows - 如何使用 `nasm` 和 `alink` 的组合链接 kernel32.lib 和 user32.lib ?

powershell - PowerShell函数未按预期运行

sql-server - 如何在 PowerShell 中返回对象的第二列/属性?

java - 为什么在 foreach 循环中分配给迭代变量不会更改基础数据?

java - 为什么 String 列表没有 forEach 方法?

php - 我在将输入和 foreach 循环中的所有数据插入 mysql 时遇到问题(只有一个数据进入 mysql)

windows - 使用命令行禁用以太网连接?

mfc - "Nobody should be using MFC any more"为什么?

string - 在 PowerShell 字符串中保留换行符