Powershell 使用;获取WmiObject“;在一个脚本中出现两次无效
我正在尝试运行一个简单的脚本,其中包含逻辑磁盘的空闲空间和大小信息,尽管这并不是我想要完成的输出。 我不会列出完整的脚本,因为它不相关,我只列出这两个命令 以下是脚本:Powershell 使用;获取WmiObject“;在一个脚本中出现两次无效,powershell,powershell-ise,Powershell,Powershell Ise,我正在尝试运行一个简单的脚本,其中包含逻辑磁盘的空闲空间和大小信息,尽管这并不是我想要完成的输出。 我不会列出完整的脚本,因为它不相关,我只列出这两个命令 以下是脚本: Get-WmiObject -Class win32_logicaldisk | select -Property Name , @{n='HDDs Total Size In GB';e={[math]::Round($_.size/1gb)}} Get-WmiObject -Class Win32_logical
Get-WmiObject -Class win32_logicaldisk | select -Property Name , @{n='HDDs Total Size In GB';e={[math]::Round($_.size/1gb)}}
Get-WmiObject -Class Win32_logicalDisk | select -Property Name , @{n='HDDs FreeSpace';e={[math]::Round($_.FreeSpace/1gb)}}
Name HDDs Total Size In GB
---- ---------------------
C: 111
D: 932
E: 932
C:
D:
E:
这是输出:
Get-WmiObject -Class win32_logicaldisk | select -Property Name , @{n='HDDs Total Size In GB';e={[math]::Round($_.size/1gb)}}
Get-WmiObject -Class Win32_logicalDisk | select -Property Name , @{n='HDDs FreeSpace';e={[math]::Round($_.FreeSpace/1gb)}}
Name HDDs Total Size In GB
---- ---------------------
C: 111
D: 932
E: 932
C:
D:
E:
正如您所看到的,它将空闲空间留空
非常感谢您的帮助。如果没有特别的理由叫它两次,您只需一次就可以得到免费空间:
Get-WmiObject -Class win32_logicaldisk | select -Property Name , @{n='HDDs Total Size In GB';e={[math]::Round($_.size/1gb)}}, @{n='HDDs FreeSpace';e={[math]::Round($_.FreeSpace/1gb)}}
这是我的输出:
Name HDDs Total Size In GB HDDs FreeSpace
---- --------------------- --------------
C: 146 6
E: 205 35
通过提供单一命令解决方案绕过问题
至于你的症状:
正如您所看到的,它将空闲空间留空
不,它只是不将HDDs FreeSpace
列打印到控制台,尽管该列(在输出对象上按该名称命名的属性)仍然存在,如果您要以编程方式检查输出的话
简而言之,您的第一个获取WmiObject…|在显示列中选择对象
命令锁,它们是名称
和硬盘总大小(GB
)
虽然第二个命令的输出有一个Name
列,但它缺少一个HDDs总大小(GB
列),因此没有显示它的值,HDDs FreeSpace
列被完全忽略
此行为与隐式使用格式表
输出格式cmdlet有关,在我的第页中详细解释了此行为
要强制为每个命令设置单独的输出格式,请使用…|输出主机
或。|格式-*
(格式化cmdlet,如格式表
)
注意事项:如果需要以编程方式处理输出,请不要这样做,因为输出主机
会绕过PowerShell的成功(数据)输出流;虽然使用Format-*
cmdlet仍会将数据发送到成功流,但这些数据不再是输入对象,而是表示格式化指令的对象
简化示例: 请注意,第二个对象的列
two
为空,而其two
列根本不打印,因为只有第一个输出对象的属性决定了输出列
通过显式使用Out-Host
或formatting cmdlet,可以强制分别格式化这两个命令:
PS> [pscustomobject] @{ one=1; two=2 } | Out-Host; [pscustomobject] @{ one=10; three=30 }
one two
--- ---
1 2
one three
--- -----
10 30
请注意每个对象的列现在是如何显示的,前面有一个特定于对象的标题。
$\uuz.size
!=$\uu0.FreeSpace
非常感谢,现在我知道这是如何工作的了,这真的很有帮助。仍在学习:)。这是非常有帮助的,我设法使一些工作出了这个,它工作得很好,事实上,这有助于我与其他脚本,我有一个类似的问题,我感谢它!