如何读取PowerShell脚本中每个不同路径的磁盘驱动器空间?

wribegjk  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(159)

我有我的第一个小项目,我刚刚开始了一个PowerShell(完全是初学者)。
我们有三个不同的共享C:\驱动器,我需要使用PowerShell脚本输出每个磁盘存储信息(例如总空间和可用空间)。
这是我制作的脚本,但这三个结果都是相同的,尽管它们有不同的空闲空间和总空间。
有没有人能告诉我我的PS脚本出了什么问题?
另外,在结果中,我不想显示任何其他驱动器(例如D和E),而只显示C驱动器。如何做到这一点呢?

[脚本]

Set-Location -Path \\vm1\c$
Get-WmiObject -Class win32_logicaldisk | Format-Table DeviceId, @{n='Size'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="FreeSpace"; e={[math]::Round($_.FreeSpace/1GB, 2)}}

Set-Location -Path \\vm2\c$
Get-WmiObject -Class win32_logicaldisk | Format-Table DeviceId, @{n='Size'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="FreeSpace"; e={[math]::Round($_.FreeSpace/1GB, 2)}}

Set-Location -Path \\vm3\c$
Get-WmiObject -Class win32_logicaldisk | Format-Table DeviceId, @{n='Size'; e={[math]::Round($_.Size/1GB, 2)}}, @{n="FreeSpace"; e={[math]::Round($_.FreeSpace/1GB, 2)}}

[结果]

DeviceId   Size FreeSpace
--------   ---- ---------
C:       473.95    114.22
D:            0         0
E:            0         0

DeviceId   Size FreeSpace
--------   ---- ---------
C:       473.95    114.22
D:            0         0
E:            0         0

DeviceId   Size FreeSpace
--------   ---- ---------
C:       473.95    114.22
D:            0         0
E:            0         0
lxkprmvk

lxkprmvk1#

将位置设置为UNC路径并不意味着您实际上正在查询该远程主机的win32_logicaldisk,您需要使用-ComputerName参数来查询远程主机信息。同样值得注意的是,您应该开始使用Get-CimInstance而不是Get-WmiObject(在较新版本的PowerShell中不再提供)。
至于只显示C驱动器,您可以使用-Filter。我还将PSComputerName添加到您的Format-Table返回的属性中,这样您就可以知道输出属于哪个主机。

$vms = 'vm1', 'vm2', 'vm3'
Get-CimInstance -Class win32_logicaldisk -Filter "DeviceID='C:'" -ComputerName $vms |
    Format-Table @(
        'PSComputerName'
        'DeviceId'
        @{ N='Size'; E={ [math]::Round($_.Size/1GB, 2) }}
        @{ N='FreeSpace'; E={ [math]::Round($_.FreeSpace/1GB, 2) }}
    )
6pp0gazn

6pp0gazn2#

Set-Location-PATH\VM1\c$不是这样工作的。它为当前PowerShell会话设置文件系统上的默认位置,但不影响Get-wmiObject。要查询远程计算机,必须使用参数-computername
您应该使用cim cmdlet,因为它们取代了WMI对象cmdlet。参数-computername支持将数组作为输入,因此您只需调用Get-wmiObject/Get-cimInstance一次,如果您只想了解C:\驱动器,可以查询它:

$computers = @('vmName1','vmName2','nmName3')
Get-CimInstance -ComputerName $computers -Query "select freeSpace from win32_loogicaldoisk where deviceId='C:'" | select-object pscomputername,deviceid,freeSpace

相关问题