我有我的第一个小项目,我刚刚开始了一个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
2条答案
按热度按时间lxkprmvk1#
将位置设置为UNC路径并不意味着您实际上正在查询该远程主机的
win32_logicaldisk
,您需要使用-ComputerName
参数来查询远程主机信息。同样值得注意的是,您应该开始使用Get-CimInstance
而不是Get-WmiObject
(在较新版本的PowerShell中不再提供)。至于只显示
C
驱动器,您可以使用-Filter
。我还将PSComputerName
添加到您的Format-Table
返回的属性中,这样您就可以知道输出属于哪个主机。6pp0gazn2#
Set-Location
-PATH\VM1\c$不是这样工作的。它为当前PowerShell会话设置文件系统上的默认位置,但不影响Get-wmiObject。要查询远程计算机,必须使用参数-computername
。您应该使用cim cmdlet,因为它们取代了WMI对象cmdlet。参数
-computername
支持将数组作为输入,因此您只需调用Get-wmiObject/Get-cimInstance一次,如果您只想了解C:\驱动器,可以查询它: