我试图找到一种在用户名上创建过滤器的方法。基本上我们使用的交换系统有多个数据库,我们用姓氏的第一个字母为用户邮箱分配。
现在我有命令通过PowerShell和正确的数据库创建邮箱,但我希望能够通过CSV文件执行此操作,但我不知道如何将PowerShell设置为只看一下用户姓氏的第一个字符,这样我就可以对它进行一些if
语句过滤。
因此,如果姓氏是 Blogs ,我希望PowerShell读出B然后将其放入变量中,以便我可以使用它。
有什么想法吗?
将脚本修改为supplied to me by CB后,我现在有了一个可用的PowerShell脚本。抛弃我一段时间的事实是,除非你将标题添加到变量中,否则CSV文件中的标题会引发错误。
我一直得到的错误是"无法处理参数' Identity'的参数转换。无法转换" @ {user = Blogs}" type" deserialized.System.Management.Automation.PSCustomObject"键入" 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
}
答案 0 :(得分:0)
我这次用过(你必须根据自己的需要进行编辑)
$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
}
答案 1 :(得分:0)
假设您的用户位于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 ----
}