这是关于我的同事被要求实施的具有挑战性的 Exchange 项目的简短系列中的另一个问题。(尽管我主要是一个 Unix 人,但我正在提供帮助,因为我自愿学习 powershell 并尽可能多地用代码实现项目。)
背景:
我们被要求创建许多通讯组,比如大约 500 多个。这些组将包含两种类型的成员。(抱歉,如果我弄错了这些术语。)一种类型是内部 AD 用户,另一种类型是我为其创建邮件联系人条目的外部用户。
我们被要求做到这一点,以便对发送到这些组的任何消息都无法进行“全部回复”。由于以下原因,我认为这不可能 100% 执行。我的问题是 - 我的以下推理是否合理?如果没有,请随时教育我是否/如何正确实施。谢谢!
我为什么不可能阻止 100% 的潜在回复所有操作的推理:
内部 AD 用户可以将 DL 放在他们的 To: 字段中。然后,他们单击“+”以展开该组。该组包含两个外部邮件联系人。消息会发送给所有人,包括那些外部联系人。外部用户 #1 决定全部回复,他的邮件至少会发送到外部用户 #2,这甚至不涉及我们的 Exchange 邮件中继。
内部 AD 用户可以将 DL 放在他们的 Outlook To: 字段中,然后单击“+”按钮展开 DL。然后,他们向群组中的每个人发送一封电子邮件。(但各个地址都列在“收件人:”字段中。)因为我们现在在“收件人:”字段中向多个收件人发送了一条消息,因此地址已被“公开”,任何人都可以自由回复所有内容,并且消息只会发送给收件人:字段中的每个人。即使我们尝试为所有这些 DL 设置 Reply-To: 字段,外部邮件客户端也没有义务遵守它,或强迫用户遵守它。
我上面的两点有效吗?(我承认,它们有些相似。)我是否正确地告诉我们的领导“除非我们培训用户向这些组发送电子邮件,否则不可能 100% 地防止有人想要回复所有这些组的情况必须始终使用 Bcc: 字段。”
我渴望获得任何我看不清楚的洞察力或方程式的一部分。谢谢!!!
假设我在 Exchange 中有一个当前存在的通讯组,并且拥有大约 20 个成员。
在PowerShell中2,我已经获得约七名单百需要添加到组谁更多的人。我能够做到这一点的唯一方法是一次一个用户:
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member1
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member2
....
Add-DistributionGroupMember -Idneity GROUP-NAME -Member MemberN
Run Code Online (Sandbox Code Playgroud)
是否有一种机制可以让我只用一个函数调用添加所有用户,如以下伪代码所示?
SOME-CMDLET-TO-ADD-LOTS-AT-ONCE -Identity GROUP-NAME -Member COLLECTION-OF-PEOPLE
Run Code Online (Sandbox Code Playgroud)
我不是在寻找循环结构。我正在寻找一个函数或 cmdlet,它可以一次添加所有成员,理想情况下只使用一个引用整个列表的参数。我不敢想象 Powershell 会用 700 多个命令行参数做什么……
(我希望如果可能的话,我可以传递要添加的数组或对象集合。)
有什么建议?我没有看到名为“set-distributiongroupmember”的命令,而且在“set-distributiongroup”中也看不到任何有希望的东西。
我是一名 Unix 人员,最近使用 powershell 帮助我的 Exchange 管理员同事在 Exchange 2010 中实施一个具有挑战性的项目。(我们得到的要求即使不是不可能满足也是具有挑战性的。)
我会尽量保持简单。这是我的第一个问题。
我们被要求必须限制某些 DL,以便只有某些内部 AD 用户可以发送到 DL。此外,这些 DL 必须在通讯簿中保持可见。将 'HiddenFromAddressBookEnabled' 属性设置为 $true 是不可接受的。领导表示,“唯一应该被允许看到谁在组中的人是可以发送到组中的人。此外,唯一应该能够看到通讯录中的DL条目的人是人谁被允许发送到DL。” 我不认为这是可行的,因为:
所以这里是我的问题:
请 - 鼓励任何额外的启发或评论。我认为我们必须回到业务中并告诉他们他们的要求无法实现。(我还有另外两个讨厌的要求,我将开始单独提问。)
谢谢大家!
我经常拨打这样的电话:
get-help <some-command>
Run Code Online (Sandbox Code Playgroud)
在 Powershell 2 中。对于这些命令中的许多(但不是全部),我没有看到帮助条目的内容。相反,我得到重复项,并且仅显示帮助对象本身:
[PS2]> get-help remove-distributiongroup | more
Name Category Synopsis
---- -------- --------
Remove-DistributionGroup Cmdlet Use the Remove-DistributionGroup...
Remove-DistributionGroup Cmdlet Use the Remove-DistributionGroup...
Run Code Online (Sandbox Code Playgroud)
作为一个完全的 PS 新手,我通过执行类似于以下的操作来解决这个问题:
[PS2]> $var = get-help remove-distributiongroup
[PS2]> $var[0] | get-member
... Output ...
[PS2]> $var[0].Parameters |more
... Part of the documentation ...
[PS2]> $var[0].Synopsis |more
... Another part of the documentation ...
Run Code Online (Sandbox Code Playgroud)
有几个问题。
谢谢!
[更新[:
尝试了pk的建议,但遗憾的是这没有用。这是通过 select -unique 进行管道传输时的输出:
Name Category Synopsis
---- -------- …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 PowerShell 从字符串中去除奇数字符。我使用以下输出尝试自己学习:
get-help about_regular_expressions
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取一个主要是 ASCII 的字符串,但它有一个需要删除的异常字符。(注册商标符号;R 周围有一个圆圈。)我想从字符串中删除该字符的任何出现,保持其他所有内容完好无损。使用 PowerShell 2.0 完成此操作的最简洁的表达式是什么?
[编辑]
我做了一些进一步的挖掘,我相信问题源于我正在使用的 Import-CSV 调用。
当我将此符号从记事本中剪切并粘贴到 PS 提示符中,并将其分配给一个字符串时,我匹配得很好:
# This code yields 'True'
$string -match "\u00ae"
Run Code Online (Sandbox Code Playgroud)
但是,当我在其中一个字段包含特殊符号的 CSV 文件上使用 Import-CSV 时,我相信原始字节会以某种方式被转换,因为这样做是行不通的:
# This code yields 'False'
$source = Import-CSV -path testing.csv
# The following extracts the entry / line containing the special symbol that was
# copy-and-pasted above
$culprit = $source[5].COMMITTEE_NAME
$culprit -match "\u00ae"
Run Code Online (Sandbox Code Playgroud)
但是,以下确实有效:
# This yields True
$filedata = get-content testing.csv
$filedata[6] -match "\u00ae"
Run Code Online (Sandbox Code Playgroud)
所以我认为我对所有这些的后续问题是:
如何通过 import-csv …
我是 powershell 和 Exchange 的新手,所以如果这听起来令人困惑,请放轻松。
我需要生成我们环境中每个可能的电子邮件地址(数以万计)的列表,这将导致以下代码出错,因为该对象已经存在,并将该电子邮件地址作为其关键属性之一:
New-MailContact -Name $email `
-ExternalEmailAddress $email > $null
Run Code Online (Sandbox Code Playgroud)
我尝试遍历从 get-mailcontact 返回的所有条目,存储来自“EmailAddresses”集合的每个电子邮件地址,但现在我相信我还需要从 User 对象中提取所有可能的电子邮件地址。我已经到了我认为有一种更简单的,可能是一次性的方法来做到这一点的地步。
PS 2 中最简单的方法是什么?有没有办法保证如果电子邮件地址在列表中,New-MailContact 将失败并出现重复错误,如果电子邮件地址不在列表中,那么我们保证 New-MailContact 不会产生错误由于重复。(它可能会产生其他错误,但不是因为对象已经与此地址相关联。)
谢谢!
我每小时运行一个脚本来处理一个 CSV 文件。在脚本的开头,如果 CSV 文件没有改变,我需要退出。让我们假设文件时间戳不是一个选项。(我问这个问题是为了教育价值)
我正在考虑在整个文件中啜饮并计算内容的哈希值,如下所示:
$fileData = get-content \path\to\file
$hashCode = $fileData.GetHashCode()
Run Code Online (Sandbox Code Playgroud)
然后我会在一次次运行中保存这些内容,如果后续运行中的哈希值相同,请退出我的脚本。
假设文件时间戳不可用,是否有更好的方法来做到这一点?
[注意:这些需求是来自客户的外部需求,可以/不会改变。回答时请记住这一点]
我们有一个小型的 2.5 人 Windows 管理员团队(2 名老兵,1 名初级人员)。作为一个 IT 基础设施小组,我们被要求实施以下内容:
安全:如果一个人被允许发送到一个启用安全的 dist。组,然后:
任何形式、形状或形式都不允许“用户培训”。发送到这些名单的人非常不精通技术,在组织内在政治上非常强大,并且不会以任何方式改变他们的习惯。这意味着我们不能建议他们使用“密件抄送:”字段。这也意味着我们不能建议“不要单击‘+’按钮来展开组,否则会失去安全性。”
提醒 - 您无法更改上述事实。
在 1 到 10 的范围内,1 代表“微不足道”,10 代表“事实上不可能”,这个项目的评分如何?我们有一位经理正在破解鞭子,但不明白如上所述的要求是非常矛盾的。即使给定了合理的时间,我也不认为这会给整个 AD 基础设施带来很大的不便和风险。(极高的安全权限,因此用户无法挖掘对象。)
我不太关心胆量和技术。您将如何实施此类事情的详细信息,但请随时分享。我更好奇上述的可行性以及需要多长时间,如果它甚至可行。
在您考虑答案时,请牢记严格的要求。我们已经三重确认他们不能弯曲,即使是一个字。例如,“您可以使用自定义邮件客户端”。错误的。Outlook 是所需的客户端。“你可以隐藏组”。错误的。AD中的某个人仍然可以挖掘并找到它们。等等等等。
谢谢你!!!我是一名 Unix 人员,因为我已经非常熟悉 Powershell,并且有大约 1,000 行代码来帮助构建和维护这些(数千个)联系人和组。
编辑:我知道关于这个话题有很多很好的答案,但请保持你的想法。我需要尽可能多的弹药来恢复业务。五个人说这几乎是不可能的,这很棒。十个人说它更好。谢谢大家。
security active-directory exchange-2010 distribution-lists outlook-2010
powershell ×5
exchange ×2
groups ×2
outlook ×2
ascii ×1
distribution ×1
outlook-2010 ×1
security ×1
unicode ×1