我正在为我的大学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')
答案 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
希望有帮助