powershell - Powershell - New-Mailcontact 和 Set-Contact
问题描述
我一直在尝试编写一个脚本,以便可以使用 CSV 文件创建 New-Mailcontact,如果 ActiveDirectory 中不存在的话。
如果 Active Directory 中已经存在,则跳过 New-MailContact 命令并运行 Set-MailContact。
脚本中的问题: -
如果 AD 中尚不存在,它会创建新的 Mailcontact,然后如果 mailcontact 不作为组的成员存在,则将帐户添加到组。如果它已经存在,请跳过此外,新的邮件联系人可能是成员 4 或 5 个邮件组,它将添加 4 个名为“1100-contact”的邮件组,如下所示。它将添加 5 个名为“1000-contact”的邮件组,如下所示。
如果 Active Directory 中已经存在,例如我说的是“contact2@contoso.com”,如下所示。如果它需要,因为在 AD 中可能已经是错误的显示名称。它将再次基于 CSV 文件更新显示名称,然后联系人可能是 Group-Mail1 和 Group-Mail2 的成员,如果联系人不是这些 Group-Mail5 和 Group-Mail9 组中的任何一个组的成员,它将添加到组中。
CSV:
Name,ExternalEmailAddress,group1,group2,group3,group4,group5
1000-contact,contact1@contoso.com,Group-Mail1,Group-Mail2,Group-Mail3,Group-Mail4,Group-Mail5
1100-contact,contact3@contoso.com,Group-Mail1,Group-Mail2,Group-Mail3,Group-Mail4
1200-contact,contact2@contoso.com,Group-Mail1,Group-Mail2,Group-Mail5,Group-Mail9
到目前为止我已经尝试过脚本:
Import-Csv C:\temp\ExternalContacts.csv|
foreach-object{
if (Get-MailContact -anr $_.ExternalEmailAddress)
{
write-host $_.name 'is a duplicate entry!!!'
Set-MailContact -Identity $_.ExternalEmailAddress -DisplayName $_.Name -ForceUpgrade -Confirm:$False
Add-DistributionGroupMember -Identity "$($_.group1)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group2)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group3)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group4)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group5)" -Member $_.ExternalEmailAddress
}
else {
New-MailContact -Name $_.Name -DisplayName $_.Name -ExternalEmailAddress $_.ExternalEmailAddress -OrganizationalUnit "OU=company_Contacts,OU=Contacts,DC=contoso,DC=com"
Add-DistributionGroupMember -Identity "$($_.group1)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group2)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group3)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group4)" -Member $_.ExternalEmailAddress
Add-DistributionGroupMember -Identity "$($_.group5)" -Member $_.ExternalEmailAddress
}
}
更新 :
我想注意你的 csv 中的空格。因此,如果 group5 为空,这将处理为空。我对么 ?
if ($_.group5) {
Add-DistributionGroupMember -Identity $_.group5 -Member $ExternalEmailAddress
}
解决方案
如果我正确理解这个问题,主要问题是一些联系人需要添加到 4,而另一些联系人需要添加到 5 个通讯组。
未经测试,但这可能对您有用:
Import-Csv -Path 'C:\temp\ExternalContacts.csv' | ForEach-Object {
# try and find the contact
$contact = Get-MailContact -Filter "EmailAddress -eq '$($_.ExternalEmailAddress)'" -ErrorAction SilentlyContinue
if ($contact) {
if ($_.Name -ne $contact.DisplayName) {
Write-Host "Renaming contact $($contact.DisplayName) to $($_.Name)"
Set-MailContact -Identity $_.ExternalEmailAddress -DisplayName $_.Name -ForceUpgrade -Confirm:$False
}
else {
Write-Host "Contact $($_.Name) already exists"
}
}
else {
Write-Host "Creating new contact $($_.Name)"
$contactParams = @{
Name = $_.Name
DisplayName = $_.Name
ExternalEmailAddress = $_.ExternalEmailAddress
OrganizationalUnit = "OU=company_Contacts,OU=Contacts,DC=contoso,DC=com"
}
New-MailContact @contactParams
}
# get an array of groups this user should be a member of
$groups = ($_.PsObject.Properties.GetEnumerator() | Where-Object { $_.Name -like 'group*' -and ($null -ne $_.Value) }).Value
# add the contact to the appropriate groups
foreach ($group in $groups) {
Add-DistributionGroupMember -Identity $group -Member $_.ExternalEmailAddress
}
}
推荐阅读
- javascript - 访问对象内数组的长度给了我'TypeError:无法读取未定义的属性'长度''
- node.js - 语言服务器提供程序 - 获取换行符类型
- java - 旋转android屏幕时不要创建新片段
- reactjs - ANTD表格组件添加border-spacing,勾选时复选框未对齐?
- flutter - 扑动 Firestore 流映射到另一个流
- c# - 空模型异常然后在 .NET 5 ASP.NET Core 中返回视图
- python - 科学计数法pyplot子图中的小数位数
- python - Pyspark 读取 REST API
- unity3d - 如何在代码 c#(按钮、面板等)中查找 UI
- powerbi - Power BI 仅计算重复 ID 的最后一个值的总和