Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用;获取WmiObject“;在一个脚本中出现两次无效_Powershell_Powershell Ise - Fatal编程技术网

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
非常感谢,现在我知道这是如何工作的了,这真的很有帮助。仍在学习:)。这是非常有帮助的,我设法使一些工作出了这个,它工作得很好,事实上,这有助于我与其他脚本,我有一个类似的问题,我感谢它!