无法在PowerShell中的Foreach循环中创建对象

时间:2019-03-09 14:18:46

标签: powershell loops object foreach

我正在尝试使用PowerShell中的foreach循环创建对象。使用“ while”循环尝试过,它也失败了。显然,循环方法不允许我创建对象...

事不宜迟...

我有两个脚本-Class.psm1和Main.ps1。

Class.psm1

Class Car {
    [string]$brand
    [string]$model
    [string]$color

    #Constructor
    Car ([string]$brand) {
         $this.brand = $brand

         switch -wildcard ($this.brand) {
             ('Toyota') {$this.model = 'ABC'; $this.color = 'red'; break}
             ('Honda') {$this.model = 'FGH'; $this.color = 'blue'; break}
         }
    }
}

以及 Main.ps1

Using module ".\Class.psm1"

$AllCars = {'Toyota', 'Honda'}
[array]$Objects = @()

foreach ($car in $AllCars) {
    $temp = New-Object Car("$car")
    $Objects += $temp
}

Main.ps1的输出是$ Objects只是返回“ Toyota”和“ Honda”,而不是对象(以及它应该具有的属性)。

但是,如果我只是单独创建对象,它将很好地工作。

例如:

$temp = New-Object Car('Toyota')
$Objects += $temp
$temp = New-Object Car('Honda')
$Objects += $temp

但是,这太手工了,或者不切实际。

我可以知道代码在哪个区域出了错...?如何在循环中创建对象?

1 个答案:

答案 0 :(得分:4)

此问题是您使用{'Toyota', 'Honda'}而不是('Toyota', 'Honda')

{'Toyota', 'Honda'}是一个代码块。当您将其传递给New-Object Car("$car")时,实际上是在传递New-Object Car("'Toyota', 'Honda'")

$AllCars = ('Toyota', 'Honda')
[array]$Objects = @()

foreach ($car in $AllCars) {
    $temp = New-Object Car("$car")
    $Objects += $temp
}

自从我被问到为什么袋鼠代码我决定发布一个简短的答复

$Objects = 'Toyota', 'Honda' | %{
    New-Object Car("$car")
}