在再次执行循环或循环结束之前,不会显示Powershell输出

时间:2019-04-12 17:45:14

标签: powershell loops output

我正在为我的大学Windows Client OS类编写一个powershell脚本,但是有些输出无法正确显示是有问题的。我对Powershell脚本非常陌生,甚至不知道它们可能发出什么。该代码处于do / while循环中,并且处于切换菜单中,但选择菜单选项时不会显示输出。但是,再次选择菜单选项时,它将两次显示某些信息,然后再次选择菜单项时,将显示一次信息,但没有标题,并且此后每次都继续显示。

这是代码:

cls
Get-WMIObject Win32_Logicaldisk | Select DeviceID,
@{Name="Size";Expression={$_.Size/1GB -as [int]}},
@{Name="Free Space";Expression={[math]::Round($_.Freespace/1GB,2)}}
Sort FreeGB | Format-Table –AutoSize

同样是在do while循环中的开关中。

第一次运行它不显示任何内容,第二次或退出循环时显示以下内容:
DeviceID大小的可用空间
C:------------- 20 ---------- 2.29
D:-------------- 0 --------------- 0
C:------------- 20 ---------- 2.29
D:-------------- 0 --------------- 0

(忽略短划线,我只是不知道如何在此网站上格式化)
它第三次显示一次信息,但标题上方没有标题。

我真的不知道该如何解决,我一直在寻找一个小时,不是说我真的会知道我在寻找什么,有什么提示吗?

编辑: 这是整个循环:

do {

cls
Show-Menu   
$input = Read-Host "Select 1-9"
switch ($input)   
{
    '1' {
        cls
        Write-Host "Computer Name:" $env:computername | Select-Object
        Write-Host "OS Version:" ([Environment]::OSVersion.VersionString) 
    }
    '2' { # Modified From: https://www.petri.com/checking-system-drive-free-space-with-wmi-and-powershell
        cls
        Get-WMIObject Win32_Logicaldisk | Select DeviceID,
        @{Name="Size";Expression={$_.Size/1GB -as [int]}},
        @{Name="Free Space";Expression={[math]::Round($_.Freespace/1GB,2)}}
    }
    '3' {

    }
    '4' {

    }
    '5' {

    }
    '6' {

    }
    '7' {

    }
    '8' {

    }
    '9' {
        return
    }
}
pause } while ($input -ne '9')

1 个答案:

答案 0 :(得分:0)

我已经调整了您的代码,因此现在它将输出您在开关中为所选项目设置的任何内容。

我将cls下方的do {移到了该循环之外,并添加了break 每个开关选项末尾的命令。这样可以确保无论何时处理一个选项,代码都会退出该开关,并且不会继续测试下一个选项。

对于选项2,您需要确保对Select-Object之后可用的属性进行排序。由于您通过名称Free Space创建了一个计算属性,因此您需要对Sort-Object cmdlet使用相同的名称

最后,我删除了pause命令,因为它是多余的。

cls
do {
    $input = Read-Host "Select 1-8 (press 9 to quit)"
    switch ($input) {
        '1' {
                cls
                Write-Host "Computer Name:" $env:computername | Select-Object
                Write-Host "OS Version:
                " ([Environment]::OSVersion.VersionString) 
                Write-Host
                break
            }
        '2' { # Modified From: https://www.petri.com/checking-system-drive-free-space-with-wmi-and-powershell
                cls
                Get-WMIObject Win32_Logicaldisk | Select-Object DeviceID,
                    @{Name="Size";Expression={$_.Size/1GB -as [int]}},
                    @{Name="Free Space";Expression={[math]::Round($_.Freespace/1GB,2)}} | 
                    Sort-Object -Property 'Free Space' | 
                    Format-Table
                break
            }
        '3' { break }
        '4' { break }
        '5' { break }
        '6' { break }
        '7' { break }
        '8' { break }
    }
} while ($input -ne '9')

我的机器上选项2的示例输出(荷兰数字格式,因此使用小数逗号):

DeviceID Size Free Space
-------- ---- ----------
F:          0          0
G:          0          0
C:        233      91,61
E:        466     309,22
D:        699     396,05

希望有帮助