PowerShell-在循环外引用变量

时间:2018-12-26 22:05:30

标签: windows powershell office365

我可能只是以一种愚蠢的方式执行此操作,但是我试图调用位于$ CSV的for循环之外的变量,这是一个导入的CSV文件。

我认为我的语法错误。我知道当您在外部引用变量时,有时需要根据$ Name或$ .Name引用变量。但是这些似乎都不起作用。

 Write-Host "Start Process"
 $E3Stage2= New-MsolLicenseOptions -AccountSkuId  EnvistaForensics:ENTERPRISEPACK -DisabledPlans BPOS_S_TODO_2, FORMS_PLAN_E3, STREAM_O365_E3, Deskless, FLOW_O365_P2, POWERAPPS_O365_P2, TEAMS1, PROJECTWORKMANAGEMENT, SWAY, INTUNE_O365, YAMMER_ENTERPRISE, MCOSTANDARD
 $CSV = Import-csv "Input.csv" 
 $CSVStat = $CSV | Measure-Object

  For ( $i=0; $i -lt $CSVStat.Count; $i++)  { 
    Write-Host "Assigning License for user  ---- $CSV.EmailAddress[$i]"
    Set-MsolUserLicense -UserPrincipalName $CSV.EmailAddress[$i] -LicenseOptions $E3Stage2
                                            }

    Write-Progress "waiting six minutes" -Status "Please Wait"
    Start-Sleep 360

  For ( $i=0; $i -lt $CSVStat.Count; $i++)  { 
    Write-Host "enabling litigation hold for user ---- $CSV.EmailAddress[$i]"
    Set-Mailbox -identity $CSV.EmailAddress[$i] -LitigationHoldEnabled $true

                                            } 



    Write-Host "Final User done script completed"

在for循环中找不到$ CSV并出错。

1 个答案:

答案 0 :(得分:0)

您使事情变得过于复杂了

  1. $Csv已经具有.count属性,无需测量对象
  2. for可以替换为
$csv | ForEach-Object {$_.EmailAddress}

ForeEach ($Row in $Csv){ $Row.EmailAddress}
  1. 要在字符串中扩展$ Variable.Property,请使用"$($Variable.Property)"