Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 是否可以在PSObject中执行for“for”?_Powershell - Fatal编程技术网

Powershell 是否可以在PSObject中执行for“for”?

Powershell 是否可以在PSObject中执行for“for”?,powershell,Powershell,我想要一个取决于我的层的输出,它可以从1到50,这样我的代码就更灵活了 通常我可以这样做: $outputArray += New-Object PSObject -Property @{ 'Layer 1' = '' 'Layer 2' = '' 'Layer 3' = '' 'Layer 4' = '' ... } 但是如果我有50层呢? 可以用for或类似的方法来创建对象吗?您应该可以用类似的方法来解决这个问题 $obj = New-Object PSObject

我想要一个取决于我的层的输出,它可以从1到50,这样我的代码就更灵活了

通常我可以这样做:

$outputArray += New-Object PSObject -Property @{
  'Layer 1' = ''
  'Layer 2' = ''
  'Layer 3' = ''
  'Layer 4' = ''
   ...
}
但是如果我有50层呢?
可以用for或类似的方法来创建对象吗?

您应该可以用类似的方法来解决这个问题

$obj = New-Object PSObject
1..50 | foreach { $obj | Add-Member -MemberType NoteProperty -Name "Layer $_" -Value '' }
或者像这样基本上是一样的,但是代码更紧凑一些

$obj = New-Object PSObject
1..50 | foreach { $obj | Add-Member -NotePropertyMembers @{ "Layer $_" = '' }}
至于增加价值,可以用几种不同的方法来实现,但这完全取决于已知的内容和时间等。例如,你可以马上做类似的事情

$obj = New-Object PSObject
$values = 50..1
1..50 | foreach { $obj | Add-Member -NotePropertyMembers @{ "Layer $_" = $values[$_ -1] }}

或者使用$obj单独添加值。'Layer 1'=秋。

您应该能够用类似的方法解决这个问题

$obj = New-Object PSObject
1..50 | foreach { $obj | Add-Member -MemberType NoteProperty -Name "Layer $_" -Value '' }
或者像这样基本上是一样的,但是代码更紧凑一些

$obj = New-Object PSObject
1..50 | foreach { $obj | Add-Member -NotePropertyMembers @{ "Layer $_" = '' }}
至于增加价值,可以用几种不同的方法来实现,但这完全取决于已知的内容和时间等。例如,你可以马上做类似的事情

$obj = New-Object PSObject
$values = 50..1
1..50 | foreach { $obj | Add-Member -NotePropertyMembers @{ "Layer $_" = $values[$_ -1] }}

或者用$obj'Layer 1'=秋分别添加值。

除了notjustme的答案之外,我不建议单独添加每个属性,而是先在哈希表中收集它们,然后使用for-property,因为性能应该更好

$properties = @{}
# foreach-loop is faster than ForEach-Object cmdlet
foreach($i in 0..50) { $properties["Layer $i"] = "something"}
$obj = New-Object PSObject -Property $properties

除了notjustme的答案之外,我不建议单独添加每个属性,而是首先在哈希表中收集它们,然后使用for-属性,因为性能应该更好

$properties = @{}
# foreach-loop is faster than ForEach-Object cmdlet
foreach($i in 0..50) { $properties["Layer $i"] = "something"}
$obj = New-Object PSObject -Property $properties

美好的请注意,转换哈希表的一种更短、更高效的方法是将其转换为[pscustomobject]:$obj=[pscustomobject]$propertiesNice;请注意,转换哈希表的一种更短、更高效的方法是将其转换为[pscustomobject]:$obj=[pscustomobject]$properties