【问题标题】:Using += in scriptblock for a switch statement in a foreach loop在脚本块中使用 += 作为 foreach 循环中的 switch 语句
【发布时间】:2014-05-17 12:14:18
【问题描述】:

首先,感谢您抽出宝贵时间阅读本文,提前感谢您的帮助。

这是我的代码:

<#
        SCCM Request Alert Script
#>
Import-Module ActiveDirectory

$WMIObjects = Get-WmiObject -Namespace 'ROOT\SMS\Site_EUR' -Class SMS_UserApplicationRequest -ComputerName "EUR-SCCM"
$FileStore = "c:\export\SCCMRequestfile.txt"
foreach ($Obj in $WMIObjects)
{
        [String]$RequestValue = $Obj.CurrentState
        $Application = $Obj.Application
        $User = $Obj.User -replace 'MYDOMAIN\\',""
        $ADUser = Get-ADUser -Identity $User
        $PendingRequest = @()
        $CancelledRequest = @()
        $DeniedRequest = @()
        $ApprovedRequest = @()
        $Unknown = @()

        $Args = @{ 'User' = $ADUser.Name; 'Application' = $Obj.Application }

        $PR = New-Object -TypeName PSObject -Property $Args
        $CR = New-Object -TypeName PSObject -Property $Args
        $DR = New-Object -TypeName PSObject -Property $Args
        $AR = New-Object -TypeName PSObject -Property $Args
        $UR = New-Object -TypeName PSObject -Property $Args

        switch ($RequestValue) {
                1 { $PendingRequest += $PR }
                2 { $CancelledRequest += $CR }
                3 { $DeniedRequest += $DR }
                4 { $ApprovedRequest += $AR }
        default { $Unknown += $UK }
        }


}

Write-Host -ForegroundColor 'yellow' "Pending Requests "
$PendingRequest
Write-Host -ForegroundColor 'DarkYellow'  "Cancelled Requests "
$CancelledRequest
Write-Host -ForegroundColor 'DarkRed' "Denied Requests "
$DeniedRequest
Write-Host -ForegroundColor 'Green' "Approved Requests "
$ApprovedRequest
Write-Host -ForegroundColor 'White' "Unknown Approval Type "
$Unknown

此时它只返回 foreach 循环中的最后一个对象。

我已经手动测试了一个 foreach 循环;

foreach ($Obj in $Objects) {

$array = @()

$array += $Obj

}

$Array

这会将每个对象放入数组中。

所以我想知道这是 switch 语句的问题还是我没有做过的事情,比如将它转换为数组?

任何帮助将不胜感激,谢谢。

奈杰尔·塔奇纳

【问题讨论】:

    标签: arrays powershell foreach switch-statement


    【解决方案1】:

    您将在循环的每次迭代中重新初始化您的数组。移动以下行,使其位于您的foreach 循环之前

    $PendingRequest = @();
    $CancelledRequest = @();
    $DeniedRequest = @();
    $ApprovedRequest = @();
    $Unknown = @();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多