Powershell return 个邮箱在 7 天内创建并驻留在指定的服务器上。

Powershell return mailboxes created within 7 days and resides on specified server.

我需要对 7 天内创建的邮箱自动应用 exchange 2010 保留策略。但我还需要排除任何非美国服务器,因为这些服务器由海外 IT 管理。

这是我的脚本的前言,它允许在没有任何人工交互的情况下交换连接。这样我就可以在 windows 中安排这个了。

If (Test-Path C:\temp\mycred.xml) {$UserCredential = Import-CliXML C:\temp\mycred.xml}
else{
Get-Credential | Export-CliXml C:\temp\mycred.xml
$UserCredential = Import-CliXML C:\temp\mycred.xml}

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://munprdcasht04.exchange.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential
import-PSSession $Session

这是我在 7 天内创建 return 个邮箱的当前代码

Get-Mailbox -ResultSize Unlimited| Where-Object {
($_.WhenCreated –ge ((Get-Date).Adddays(-7)))} | 
ft -auto Name,WhenCreated,Retentionpolicy,servername

这对我有用,但是当我添加一个操作员来限制特定服务器上的邮箱时,命令完成但不打印任何结果,所以我假设有 0 个匹配记录。

Get-Mailbox -ResultSize Unlimited| Where-Object {
   ($_.WhenCreated –ge ((Get-Date).Adddays(-7))) -and
   ($_.ServerName -contains "munprdmbxa") |
   ft -auto Name,WhenCreated,Retentionpolicy,servername

我还没有考虑实际启用保留策略,因为我只是想 return 我的目标数据,然后再开始冒险。我感谢任何帮助。

-contains in powershell returns True 仅当字符串完全匹配时。它在单个字符串上的作用更像 -eq,但也能够确定元素是否包含在集合中。

例如

$test = "aaa"
$test -contains "aaa"

$test = "aaa","bbb","ccc"
$test -contains "aaa"

以上两个会 return True,但是,对于子字符串它不会 return 正确并且通配符不适用于它。

$test = "aaa.domain.com"
$test -contains "aaa"

$test = "aaa.domain.com"
$test -contains "*aaa*"

会returnFalse

因此,如果服务器名称是带有域后缀等的 FQDN,则该字符串将不会完全匹配。如果您改用 -like 操作,则可以使用通配符匹配给定字符串中的字符串子集:

例如:

  $test = "aaa.domain.com"
  $test -like "*aa*"

  $test = "aaa.domain.com"
  $test -like "aa*.com"

都会returnTrue

因此使用 -like 运算符更有可能避免假阴性结果。