PowerShell和csv文件:我如何告诉PowerShell跳过/忽略单元格中不存在的数据并移动到下一个

k97glaaz  于 2023-03-27  发布在  Shell
关注(0)|答案(2)|浏览(107)

新手在这里..与powershell和csv工作.我如何告诉powershell忽略它不能找到的任何东西,并做其余的?我目前的脚本是这样的..

$Snumber=Import-csv c:\temp\Snumber.csv
 Foreach($EmployeeID in $Snumber)
{
 Add-ADGroupMember -Identity “Group” -Members $Snumber.EmployeeID 
}

它只在有现有数据的情况下工作,但如果数据不存在,并且没有完成或为我做其余的插入到AD中,它就会出错。我不介意错误,但只要它继续移动并做其余的工作,我就可以接受。
我试过添加一些东西,比如使用$ErrorAction = 'continue'。但是不起作用。

ktecyv1j

ktecyv1j1#

你的代码的主要问题是你引用了$Snumber.EmployeeID,当$Snumber是被枚举的集合,而你实际上想要引用的是$EmployeeID.EmployeeId。所以只改变这个应该可以解决这个问题,可以添加的用户将被添加,但你仍然会在控制台中看到错误。
但是,如果需要,您可以实现一些错误处理,首先可以查询CSV中的所有用户,并将所有用户收集到一个数组$usersFound中,然后可以将该数组提供给Add-ADGroupMember,因为-MembersADPrincipal[]作为输入。

$usersFound = foreach($user in Import-csv c:\temp\Snumber.csv) {
    try {
        Get-ADUser $user.EmployeeId
    }
    catch {
        Write-Warning $_
    }
}

try {
    Add-ADGroupMember -Identity theGroup -Members $usersFound
}
catch {
    Write-Warning $_
}
dhxwm5r4

dhxwm5r42#

像这样?

Foreach($EmployeeID in $Snumber)
{
    # check if user exists in AD
    $User = Get-ADUser -Identity $Snumber.EmployeeID -Properties * -ErrorAction SilentlyContinue
    if ($null -eq $User) 
        {Write-Host "User does not exist"}
    else { Add-ADGroupMember -Identity “Group” -Members $User }

}

更干净:

Try
{
  $User = Get-ADUser -Identity $Snumber.EmployeeID -Properties *  -ErrorAction Stop
  Add-ADGroupMember -Identity “Group” -Members $User
}
Catch 
{ 
  {Write-Host "User does not exist"}
}

相关问题