Powershell函数在设置变量时返回空白数据

时间:2014-10-31 22:25:24

标签: powershell

首先,我为我的终端设备推荐。我自学了自己的权力,所以我的术语可能有点偏离。

我有一个我在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信息。任何帮助将不胜感激。

1 个答案:

答案 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++
    }