在再次循环或循环结束之前,Powershell输出不会显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在再次循环或循环结束之前,Powershell输出不会显示相关的知识,希望对你有一定的参考价值。
我正在为我的大学Windows客户端操作系统类编写一个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
同样,这是在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')
我已经调整了你的代码,所以现在它将输出你在开关中为所选项目设置的任何内容。
我将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
希望有所帮助
以上是关于在再次循环或循环结束之前,Powershell输出不会显示的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell do while continue break循环脚本示例