无法选择返回1 of powershell脚本

时间:2017-04-18 00:35:50

标签: powershell powershell-v2.0

我正在为一家公司编写一个伪搜索引擎,让他们找到一些歌曲,然后选择它们并用它们做些什么。我可以显示和选择内容,直到返回只给我一首歌。当您尝试选择那首歌时,返回的错误是:

Unable to index into an object of type System.IO.FileInfo.
At C:\Users\adammcgurk\Documents\WorkOnSearch.ps1:83 char:20
+$Selected = $Items[ <<<< $Input - 1]
  + CategoryInfo              : InvalidOperation: (0:Int32) [], RuntimeException
  + FullyQualifiedErrorId     : CannotIndex

以下是相关代码的一部分:

$SearchInput = Read-Host "Enter song name here:"
$Items = Get-ChildItem C:\Users\adammcgurk\Desktop\Songs -Recurse -Filter *$SearchInput*
$Index = 1
$Count = $Items.Count
foreach ($Item in $Items) {
    $Item | Add-Member -MemberType NoteProperty -Name "Index" -Value $Index
    $Index++
}
$Items | Select-Object Index, Name | Out-Host
$Input = Read-Host "Select an item by index number (1 to $Count)"
$Selected = $Items[$Input - 1]
Write-Host "You have selected $Selected"

最终目标是能够在只返回一首歌时选择单曲。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

有几个观察结果,您使用$ input作为变量名,但这是一个未正确使用的自动变量。 (get-help about_automatic_variables)更改变量的名称。

另一个问题是$ Items可能是也可能不是数组,但你试图以任何一种方式对其进行索引。您可以在创建时将$ Items显式转换为数组

#This will ensure that the return value is an array regardless of the number of results
$Items = @(Get-ChildItem C:\Users\adammcgurk\Desktop\Songs -Recurse -Filter *$SearchInput*)

或者您可以在询问之前检查$项目

if($Items -is [System.Array]){
    #Handle choice selection
}else{
    #only one object
    $Items
}

我还要小心使用Write-Host。如果你查一下,你可以挖掘兔子洞,但通常Write-Host不是你应该使用的输出选择。