【问题标题】:Exchange PowerShell, filtering part of stringExchange PowerShell,过滤部分字符串
【发布时间】:2018-12-28 20:28:01
【问题描述】:

我正在尝试找到一种在用户名上创建过滤器的方法。基本上我们使用的交换系统有多个数据库,我们通过他们姓氏的第一个字母为其分配一个用户邮箱。

现在我有了通过 PowerShell 创建邮箱并进入正确数据库的命令,但我希望能够通过 CSV 文件执行此操作,但我不知道如何让 PowerShell 仅查看在用户姓氏的第一个字符,所以我可以对其进行一些if 语句过滤。

因此,如果姓氏是 Blogs,我希望 PowerShell 读出 B,然后将其放入变量中以便我可以使用它。

有什么想法吗?


将脚本修改为supplied to me by CB 后,我现在有了一个可以运行的 PowerShell 脚本。让我感到困惑的是,除非您将标头添加到变量中,否则 CSV 文件中的标头会引发错误。

我不断收到的错误是 “无法处理参数“身份”的参数转换。无法将“Deserialized.System.Management.Automation.PSCustomObject”类型的“@{user=Blogs}”值转换为类型"Microsoft.Exchange.Configuration.Tasks.UserIdParameter".

解决此问题的方法不是使用:foreach ($user in $list),您需要使用foreach ($list.user in list)

$list = import-csv c:\Operational.csv
$db = [string]::Empty
foreach ($list.user in $list)
{
    switch -regex ($list.user) # I used a regex to find starting
                               # char of user and assign to $db
                               # variable the name of the
                               # mailboxdatabase
    {
        "^[a-d]" { $db = "Mailstore 501 (Operational A-D)" }
        "^[e-j]" { $db = "Mailstore 502 (Operational E-J)" }
        "^[k-p]" { $db = "Mailstore 503 (Operational K-P)" }
        default  { $db = "Mailstore 504 (Operational Q-Z)" }
    }

    #$username = $list.user    Used for debugging
    $identity = get-user $list.user
    #$Database = $db           Used for debugging

    Enable-mailbox -Identity $identity -Alias $list.user -Database $db
    #Echo "User :      $username"   Used for debugging
    #Echo "Identity:   $identity"   Used for debugging
    #Echo "Database :  $db"         Used for debugging
}

【问题讨论】:

    标签: powershell exchange-server


    【解决方案1】:

    我之前用过这个(你要根据自己的需要编辑)

    $list = gc c:\UserList.txt
    $db = [string]::Empty
    foreach ($user in $list)
    {
       switch -regex ($user) # I used a regex to find starting char of user and assign to $db variable the name of the mailboxdatabase
         {
           '^[a-c]' { $db = "A-C" }
           '^[d-l]' { $db = "D-L" }
           '^[m-p]' { $db = "M-P" }
           default { $db = "Q-Z" }
         }
    
       New-MoveRequest -Identity $user -TargetDatabase $db # I used a move but you can do whatever you want
    }
    

    【讨论】:

    • 啊。看起来很有趣。我会试一试,让你知道我的进展如何。非常感谢。
    • @user3240826 欢迎您。请记住接受满足您作为优秀 SO 用户需求的答案;)
    • 它的工作方式比我使用 If 语句更好。我目前唯一的问题是,就我而言,我正在尝试通过邮件启用用户,因此我需要 -identity 信息。不幸的是,get-user 似乎不喜欢从 csv 文件中获取数据。尽管这已经使制作新邮箱的速度快了很多,但这并不完全正确。不过我还是会四处看看,看看我是否也能找到解决办法。再次非常感谢:)
    【解决方案2】:

    假设您在 Users.csv 文件中有您的用户并且有一个名为 Surname 的列,请使用以下内容。 Trim() 部分将去掉任何前导或尾随空格:

    $users = import-csv c:\Users.csv
    $firstLetter = ""
    foreach($user in $users){
       $firstLetter = $user.Surname.Trim().Substring(0,1)
     ---Your code that does stuff with $firstLetter variable ----
    }
    

    【讨论】:

      猜你喜欢
      • 2022-09-23
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多