【问题标题】:Powershell CSV file import acting strangePowershell CSV文件导入行为奇怪
【发布时间】:2019-01-30 13:02:45
【问题描述】:

我有一个 CSV 文件,其中包含我负责在 Office 365 中自动执行的信息。在尝试从 CSV 导入项目时,我在经理字段方面遇到了问题。当 CSV 文件中只有一个条目时,以下代码可以完美运行,但只要我添加第二个或第三个条目,objectID 就会返回 null。是循环的问题吗?如果我使用其他命令,如 Set-AzureADUser -DisplayName

,它似乎工作正常
$importFile = "c:\report\Users.csv"
$users = import-csv $importFile | select *


foreach($user in $users){
$DisplayName = $users.'Display Name'
$Managers = $users.'Manager'

$Employees = Get-AzureADUser | where displayname -EQ $displayName 
$EmployeeManagers = Get-AzureADUser | where displayname -EQ $Managers

Set-AzureADUserManager -objectid $employees.ObjectId -RefObjectId $EmployeeManagers.ObjectId
}

【问题讨论】:

  • 在哪个foreach(第一个或第二个)你得到objectId作为null?您可以尝试在循环中打印它以查看迭代中的每个值。
  • 如果我在 CSV 文件中只有一个条目,它会在第一个循环中正确返回。一旦我添加第二个条目,它就会返回 null foreach($user in $users){ $DisplayName = $users.'Display Name' $Managers = $users.'Manager' $Employees = Get-AzureADUser | where displayname -EQ $displayName $EmployeeManagers = Get-AzureADUser | where displayname -EQ $Managers
  • 尝试在编辑器中调试,并确保您在第二行的Display Name 列中填写了正确的DisplayName。如果您可以在此处发布 csv,那就更好了。
  • 它确实完美匹配。我已经在编辑器中调试过了。在 CSV 文件中使用单个条目(带有标题)它会正确返回,添加第二个条目并返回 null。 $DisplayName 匹配正确。唯一的区别是在 csv 文件的 Display name 字段中添加额外的条目
  • 也许这会有所帮助。 CSV 文件标题 Display Name csv 文件条目 1 user X 当我尝试以下 foreach($user in $users){ $DisplayName = $users.'Display Name' $Managers = $users.'Manager' $Employees = Get-AzureADUser | where displayname -EQ $displayName 时,如果我将 UserY 添加到 CSV 文件中的位置 2,$employees 返回 null

标签: powershell office365


【解决方案1】:

问题在于 foreach 中的变量用法。您在 foreach 中使用 $Users 将有多个项目。在当前项目的循环内将其更改为$user

foreach($user in $users){
    $DisplayName = $user.'Display Name'
    $Managers = $user.'Manager'

    $Employees = Get-AzureADUser | where displayname -EQ $displayName 
    $EmployeeManagers = Get-AzureADUser | where displayname -EQ $Managers

    Set-AzureADUserManager -objectid $employees.ObjectId -RefObjectid $EmployeeManagers.ObjectId
}

【讨论】:

    【解决方案2】:

    谢谢!现在非常接近。唯一的问题是现在将每个用户都设置为同一个经理。

    $importFile = "c:\report\Users.csv"
    $users = import-csv $importFile | select *
    
    foreach($user in $users){
    $DisplayName = $user.'Display Name'
    $Managers = $user.'Manager'
    
    $Employees = Get-AzureADUser | where displayname -EQ $displayName 
    $EmployeeManagers = Get-AzureADUser | where displayname -EQ $Managers
    
    Set-AzureADUserManager -objectid $employees.ObjectId -RefObjectId $EmployeeManagers.ObjectId
    }
    
    foreach ($user in $users) {get-AzureADUserManager -objectid $employees.objectid} 
    

    这将为所有用户返回相同的经理,即使 CSV 文件中的经理标题对每个用户都有不同的条目。

    【讨论】:

    • 试试foreach ($user in $users) {get-AzureADUserManager -objectid $user.objectid}
    • 不幸的是,这不起作用,但 Prasoons 的回答实际上是正确的。这是我试图返回foreach ($user in $users) {get-AzureADUserManager -objectid $employees.objectid} 的方式,但我在活动目录中验证了它的罚款,并且它工作得很好。谢谢你们!
    【解决方案3】:

    如果它对其他人有帮助,Prasoons 的回答是 100% 正确的,一旦我将最后一行添加回循环中,它就可以完美运行。最终工作代码如下。谢谢普拉松!

    $importFile = "c:\report\Users.csv"
    $users = import-csv $importFile | select *
    
    foreach($user in $users){
    $DisplayName = $user.'Display Name'
    $Managers = $user.'Manager'
    
    $Employees = Get-AzureADUser | where displayname -EQ $displayName 
    $EmployeeManagers = Get-AzureADUser | where displayname -EQ $Managers
    
    Set-AzureADUserManager -objectid $employees.ObjectId -RefObjectId $EmployeeManagers.ObjectId
    get-AzureADUserManager -objectid $employees.objectid 
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 2012-02-21
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多