小编Lar*_*old的帖子

防止对 Exchange 通讯组的“全部回复”

这是关于我的同事被要求实施的具有挑战性的 Exchange 项目的简短系列中的另一个问题。(尽管我主要是一个 Unix 人,但我正在提供帮助,因为我自愿学习 powershell 并尽可能多地用代码实现项目。)

背景:

我们被要求创建许多通讯组,比如大约 500 多个。这些组将包含两种类型的成员。(抱歉,如果我弄错了这些术语。)一种类型是内部 AD 用户,另一种类型是我为其创建邮件联系人条目的外部用户。

我们被要求做到这一点,以便对发送到这些组的任何消息都无法进行“全部回复”。由于以下原因,我认为这不可能 100% 执行。我的问题是 - 我的以下推理是否合理?如果没有,请随时教育我是否/如何正确实施。谢谢!

我为什么不可能阻止 100% 的潜在回复所有操作的推理:

  1. 内部 AD 用户可以将 DL 放在他们的 To: 字段中。然后,他们单击“+”以展开该组。该组包含两个外部邮件联系人。消息会发送给所有人,包括那些外部联系人。外部用户 #1 决定全部回复,他的邮件至少会发送到外部用户 #2,这甚至不涉及我们的 Exchange 邮件中继。

  2. 内部 AD 用户可以将 DL 放在他们的 Outlook To: 字段中,然后单击“+”按钮展开 DL。然后,他们向群组中的每个人发送一封电子邮件。(但各个地址都列在“收件人:”字段中。)因为我们现在在“收件人:”字段中向多个收件人发送了一条消息,因此地址已被“公开”,任何人都可以自由回复所有内容,并且消息只会发送给收件人:字段中的每个人。即使我们尝试为所有这些 DL 设置 Reply-To: 字段,外部邮件客户端也没有义务遵守它,或强迫用户遵守它。

我上面的两点有效吗?(我承认,它们有些相似。)我是否正确地告诉我们的领导“除非我们培训用户向这些组发送电子邮件,否则不可能 100% 地防止有人想要回复所有这些组的情况必须始终使用 Bcc: 字段。”

我渴望获得任何我看不清楚的洞察力或方程式的一部分。谢谢!!!

exchange outlook groups

7
推荐指数
1
解决办法
2万
查看次数

Powershell 2:通过一次呼叫将多个成员添加到通讯组?

假设我在 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”中也看不到任何有希望的东西。

powershell exchange-2010

6
推荐指数
1
解决办法
11万
查看次数

防止 Exchange 通讯组的用户“单击扩展”?

我是一名 Unix 人员,最近使用 powershell 帮助我的 Exchange 管理员同事在 Exchange 2010 中实施一个具有挑战性的项目。(我们得到的要求即使不是不可能满足也是具有挑战性的。)

我会尽量保持简单。这是我的第一个问题。

我们被要求必须限制某些 DL,以便只有某些内部 AD 用户可以发送到 DL。此外,这些 DL 必须在通讯簿中保持可见。将 'HiddenFromAddressBookEnabled' 属性设置为 $true 是不可接受的。领导表示,“唯一应该被允许看到谁在组中的人是可以发送到组中的人。此外,唯一应该能够看到通讯录中的DL条目的人是人谁被允许发送到DL。” 我不认为这是可行的,因为:

  • 我可以通过调用地址簿中的(可见)条目,将其放入收件人:字段,然后单击 Outlook 中的“+”将其扩展到个人,然后绕过组安全性来绕过发件人安全限制. (我已经证实了这一点。)
  • 我认为不可能有选择地只对某些用户隐藏地址簿条目,而不能对其他用户隐藏。

所以这里是我的问题:

  • 我的理解似乎大部分正确吗?如果没有,请随时提供更正
  • 有没有办法只对特定的一组用户隐藏地址簿中的 DL?
  • 有没有办法阻止用户单击 Outlook 中的“+”号来绕过限制谁可以发送到组的安全限制?从技术上讲,您不再发送到一个组 - 只是该组中的一组确切的个人。

请 - 鼓励任何额外的启发或评论。我认为我们必须回到业务中并告诉他们他们的要求无法实现。(我还有另外两个讨厌的要求,我将开始单独提问。)

谢谢大家!

exchange outlook active-directory groups distribution

5
推荐指数
1
解决办法
2万
查看次数

Powershell 2:如何消除重复的帮助条目?

我经常拨打这样的电话:

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)

有几个问题。

  • 我的 Windows 管理员同事知道如何删除重复条目吗?我只是一个 Unix 人。
  • 如果没有,是否有一种更简单的方法来获得我需要的东西,而不是我上面想出的复杂的黑客方法?

谢谢!

[更新[:

尝试了pk的建议,但遗憾的是这没有用。这是通过 select -unique 进行管道传输时的输出:

Name                              Category  Synopsis
----                              -------- …
Run Code Online (Sandbox Code Playgroud)

powershell documentation

5
推荐指数
1
解决办法
1720
查看次数

Powershell 2:如何从 ASCII 文本正文中去除特定字符

我正在尝试使用 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 unicode regular-expressions ascii

5
推荐指数
1
解决办法
1万
查看次数

Powershell 2 和 Exchange:查找冲突对象

我是 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 不会产生错误由于重复。(它可能会产生其他错误,但不是因为对象已经与此地址相关联。)

谢谢!

powershell exchange-2010

5
推荐指数
1
解决办法
2625
查看次数

Powershell 2:计算文件校验和的最佳方法?

我每小时运行一个脚本来处理一个 CSV 文件。在脚本的开头,如果 CSV 文件没有改变,我需要退出。让我们假设文件时间戳不是一个选项。(我问这个问题是为了教育价值)

我正在考虑在整个文件中啜饮并计算内容的哈希值,如下所示:

$fileData = get-content \path\to\file
$hashCode = $fileData.GetHashCode()
Run Code Online (Sandbox Code Playgroud)

然后我会在一次次运行中保存这些内容,如果后续运行中的哈希值相同,请退出我的脚本。

假设文件时间戳不可用,是否有更好的方法来做到这一点?

powershell

5
推荐指数
1
解决办法
2604
查看次数

在 Outlook 中为 AD/外部用户配置成员不可见邮件列表并禁用全部重播?

[注意:这些需求是来自客户的外部需求,可以/不会改变。回答时请记住这一点]

我们有一个小型的 2.5 人 Windows 管理员团队(2 名老兵,1 名初级人员)。作为一个 IT 基础设施小组,我们被要求实施以下内容:

  • 我们必须设置邮件列表(dist.groups)以在 Outlook 中使用。
  • 所有邮件列表将包括内部 AD 用户和外部邮件联系人
  • 对于所有地区。组,内部用户和外部联系人的全部回复应该总是失败,没有例外。(反弹是可以接受的)
  • 安全:如果不允许某人发送到通讯组,则:
    • 必须 100.000% 保证他们永远不会以任何可能的方式发现组的存在,即使他们是内部 AD 用户。
    • 必须 100.000% 保证他们永远不会以任何可以想象的方式挖掘和确定组中的个人成员,即使他们是内部 AD 用户。
  • 安全:如果一个人被允许发送到一个启用安全的 dist。组,然后:

    • 他们必须能够在特定地址簿中看到该组(我们已经这样做了)
    • 他们必须能够轻松确定谁在组中
  • 任何形式、形状或形式都不允许“用户培训”。发送到这些名单的人非常不精通技术,在组织内在政治上非常强大,并且不会以任何方式改变他们的习惯。这意味着我们不能建议他们使用“密件抄送:”字段。这也意味着我们不能建议“不要单击‘+’按钮来展开组,否则会失去安全性。”

提醒 - 您无法更改上述事实。

在 1 到 10 的范围内,1 代表“微不足道”,10 代表“事实上不可能”,这个项目的评分如何?我们有一位经理正在破解鞭子,但不明白如上所述的要求是非常矛盾的。即使给定了合理的时间,我也不认为这会给整个 AD 基础设施带来很大的不便和风险。(极高的安全权限,因此用户无法挖掘对象。)

我不太关心胆量和技术。您将如何实施此类事情的详细信息,但请随时分享。我更好奇上述的可行性以及需要多长时间,如果它甚至可行。

在您考虑答案时,请牢记严格的要求。我们已经三重确认他们不能弯曲,即使是一个字。例如,“您可以使用自定义邮件客户端”。错误的。Outlook 是所需的客户端。“你可以隐藏组”。错误的。AD中的某个人仍然可以挖掘并找到它们。等等等等。

谢谢你!!!我是一名 Unix 人员,因为我已经非常熟悉 Powershell,并且有大约 1,000 行代码来帮助构建和维护这些(数千个)联系人和组。

编辑:我知道关于这个话题有很多很好的答案,但请保持你的想法。我需要尽可能多的弹药来恢复业务。五个人说这几乎是不可能的,这很棒。十个人说它更好。谢谢大家。

security active-directory exchange-2010 distribution-lists outlook-2010

2
推荐指数
1
解决办法
485
查看次数