【问题标题】:powershell import csv and filter on names to run enable-remotemailbox and update attributespowershell 导入 csv 并过滤名称以运行 enable-remotemailbox 并更新属性
【发布时间】:2021-08-02 10:18:05
【问题描述】:

到目前为止,我一直在试图让这个脚本工作,如果我运行脚本而不过滤用户,它会根据 OU 上的搜索库过滤工作,但是一旦我尝试过滤用户也一样,它会抛出诸如

之类的错误

"术语'​​'不被识别为cmdlet、函数的名称, 脚本文件或可运行的程序。检查名称的拼写,或 如果包含路径,请验证路径是否正确并重试。 在 C:\Users\user\Desktop\UserProvisioning 和许可证 v2.ps1:22 字符:27"

"您不能在空值表达式上调用方法。在 C:\Users\user\Desktop\UserProvisioning 和许可证 v2.ps1:23 char:1

  • 启用-RemoteMailbox -Identity $users.SamAccountName -RemoteRoutingAd 。”

如果有人可以查看我的代码并告诉我这里出了什么问题,我将不胜感激?

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

$accountNamesToInclude = @("Dev01","Dev02")

Get-ADUser -filter * -SearchBase 'OU=orgunit1,DC=ad,DC=domain,DC=com' | Export-Csv E:\Scripts\ProvisionUsers.csv

$Names = @()
$UPNS = @()
$Licence = "Licence-M365-E5"
$accountNamesToInclude = @('Dev01','Dev02')

# Comment this out if you want to include all users from the csv
($users = Import-Csv E:\Scripts\ProvisionUsers.csv | Where-Object { $accountNamesToInclude -contains $_.Name })
# Uncomment this if you want to include all users from the csv
# $users = Import-Csv E:\Scripts\ProvisionUsers.csv

foreach ($user in $users){​​
Enable-RemoteMailbox -Identity $users.SamAccountName -RemoteRoutingAddress((($_.UserPrincipalName.split("@")[0])) +"@domain.mail.onmicrosoft.com") -PrimarySmtpAddress((($_.UserPrincipalName.split("@")[0])) +"@domain.com"); 
}
foreach ($user in $users){
Get-ADUser -Identity $users.SamAccountName | Set-ADObject -Replace @{extensionAttribute8=$Licence} 
}

提前致谢!

【问题讨论】:

  • $user.samaccountname,您仍然使用$users.sama.. 引用整个数组。所以把它改成$user,不带s
  • 感谢亚伯拉罕,我之前尝试过,但没有成功,但朝着正确的方向又迈出了一步。干杯。
  • 你为什么要改变它?大声笑这是正确的方法(:现在有任何错误吗?
  • 哈哈反复试验,不幸的是仍然是同样的错误......你不能在空值表达式上调用方法。在 C:\Users\users\Desktop\UserProvisioning 和 license v2.ps1:28 char:1 + Enable-RemoteMailbox -Identity $user.SamAccountName -RemoteRoutingAdd
  • $_改成对应的变量。

标签: powershell active-directory exchange-server


【解决方案1】:

立即尝试使用此代码。除了Abraham commented,您的另一个错误是在foreach 循环中使用$_,这将返回$null,然后尝试在空值上使用split 方法。

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
$Licence = "Licence-M365-E5"
$accountNamesToInclude = @('Dev01','Dev02')

Get-ADUser -filter * -SearchBase 'OU=orgunit1,DC=ad,DC=domain,DC=com' |
Export-Csv E:\Scripts\ProvisionUsers.csv

$Names = @()
$UPNS = @()

$users = Import-Csv E:\Scripts\ProvisionUsers.csv | Where-Object {
    $accountNamesToInclude -contains $_.Name
}

foreach ($user in $users)
{​​
    $name = $user.UserPrincipalName.split("@")[0]
    
    $hash = @{
        Identity = $user.DistinguishedName
        RemoteRoutingAddress = "$name@domain.mail.onmicrosoft.com"
        PrimarySmtpAddress = "$name@domain.com"
    }
    Enable-RemoteMailbox @hash
    Set-ADObject $user.DistinguishedName -Replace @{extensionAttribute8=$Licence}
}

【讨论】:

  • 您好圣地亚哥,非常感谢您的回复和解决方案。所以他们的邮箱配置工作但是extensionAttribute不是...... Set-ADObject:找不到具有身份的对象:'Dev01'下:'DC = ad,DC = domain,DC = com'奇怪的一个,因为远程邮箱没有问题为这些用户工作。谢谢
  • 嗨圣地亚哥,再次感谢,我解决了,只需将行更新为 Set-ADObject $user.DistinguishedName -Replace @{extensionAttribute8=$Licence} 因为 Set-ADObject 无法使用SamAccountName 并需要 DistinguishedName。再次感谢您的帮助!
  • @speed_racer 很高兴能提供帮助,是的,我应该提到这一点,当更新AD 上的对象以使用distinguishedNameobjectGUIDSID 时,这始终是最佳实践。跨度>
猜你喜欢
  • 2016-01-03
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
相关资源
最近更新 更多