ForEach处理导入的.csv数据的问题

时间:2019-03-25 12:44:44

标签: powershell

由于在ForEach循环中被格式化为奇数格式,因此无法从.csv导入数据并运行ForEach

我尝试将.csv更改为包含标头/不包含标头,我尝试了foreach和foreach-object命令的变体。如果我显示加载了电子邮件地址的变量,则将按预期显示。

所以类似:

''' Import Data, in this instance a .csv with a single column of email addresses:
''' foreach line run the following command, the $line should represents each email address in the .csv

代码:

  $Accounts = Import-Csv C:\temp\Emails.csv

  ForEach ($line in $Accounts) {
      remove-msoluser -UserPrincipalName "$line" -Force  
  }

我要做的就是导入带有单个电子邮件地址列的.csv,对于其中的每个电子邮件地址,我都需要运行一个用于Azure的线性PS命令。

问题是,当foreach循环运行时,它似乎保留了第一行,并在其后添加了每一行,导致没有一条成功。

所以我的情况返回的错误是:

  

找不到用户。用户:@ {#FirstEmail @ Address.net =#Secondemail @ addreess.net}。

似乎在所有后续行中都保留了第一封电子邮件。同样,如果我确实有标头,它会在每行中保留该标头并将其与用户名关联。

对不起,这很可能非常简单,我只是看不到森林的树(或脚本的代码!)

任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

您有两个问题。首先是您没有正确导入csv文件。第二个原因是您没有正确引用结果对象。

首先,根据您的描述,您的csv文件没有标题。这意味着您将必须使用-header功能来提供自己的标题。

第二,导入csv文件时,结果是PSCustomObjects的数组。您需要提取此对象中的(唯一)字段,以便将字符串传递给remove-msouser。

尝试一下:

  $Accounts = Import-Csv C:\temp\Emails.csv -header 'Address'

  ForEach ($line in $Accounts){

  remove-msoluser -UserPrincipalName $line.Address -Force  

  }