首先,我为我的终端设备推荐。我自学了自己的权力,所以我的术语可能有点偏离。
我有一个我在WinPE中运行的脚本,它会启动一个用于Windows映像的菜单系统(选择映像文件,运行diskpart文件等)。此脚本的一部分查找Windows PE可见的卷,并提示用户选择要将图像安装到哪个卷。我把这部分代码分成了它自己的函数。我遇到的问题是,当函数设置变量时,WMI调用查找逻辑磁盘会返回空白结果(参见下面的示例)。但是,当我点源并自行运行该函数时,它工作正常。这是我正在使用的代码
$Vol = Select-VolumeLetter
----在一个单独来源的文件中-----
Function Select-VolumeLetter {
$InstallVolumes = (gwmi Win32_LogicalDisk -namespace "root\CIMV2")
$i = 1
Write-Host "`nPlease Select a volume to install the OS on:`n"
ForEach ($V in $InstallVolumes) {
Write-Host "[$i]"
$V | Select Name, Size, FileSystem, VolumeName | fl
$i++
}
Do{
$Range = $i - 1
$Input = Read-Host "Choose 1-$Range"
$Result = ""
if(![int32]::TryParse( $Input , [ref]$Result )) {Write-Host "`nInvalid selection. Please try again.`n"}
} until ($Result -gt 0 -and $Result -lt ($i + 1))
$InstallVolumes[($Input -1)].Name
}
结果如下:
[1]
[2]
[3]等。
但是当作为一个函数运行时,我会在正确的位置获得所请求的完整WMI信息。任何帮助将不胜感激。
答案 0 :(得分:0)
所以我认为你有一些错误的术语。您显示的不是结果,而是由于Write-Host调用而显示在屏幕上的结果。您没有看到WMI信息,因为您没有指定将其写入屏幕,因此它将作为该函数的结果传回。在您的情况下,$ Vol将包含该WMI信息。我认为解决问题的方法是这样的:
$InstallVolumes = (gwmi Win32_LogicalDisk -namespace "root\CIMV2")
$i = 1
Write-Host "`nPlease Select a volume to install the OS on:"
ForEach ($V in $InstallVolumes) {
Write-Host "`n[$i]"
Write-Host ($V | Select Name, Size, FileSystem, VolumeName | fl|out-string).trim()
$i++
}