我正在构建一个PowerShell脚本来创建一个Active Directory帐户。用户的主目录基于某个范围之间的用户名的第一个字母:
我正在努力实现输出所需目录的东西。我设法让它使用一个目录集,但我无法弄清楚如何根据其名字的第一个字母更改输出。
$SAMAccountName = $Surname+$Initial
$SAMAccountLower = $SAMAccountName.ToLower()
$UserPrincipalName = $Surname+$Initial
$HD = "U"
$HDir = "\\RBHFILRED002\"
$AC = "Users_01$\"
$DH = "Users_02$\"
$IM = "Users_03$\"
$NS = "Users_04$\"
$TZ = "Users_05$\"
New-ADUser -path "REDACTED" -SamAccountName $Surname$Initial -Name $DisplayName -DisplayName $DisplayName -GivenName $GivenName -Surname $Surname -EmailAddress $Mail -UserPrincipalName $Surname$Initial@REDACTED -Title $title -HomeDrive $HD -HomeDirectory $HDir$Surname$Initial -Description $Description -ChangePasswordAtLogon $true -PasswordNeverExpires $false -AccountPassword $defpassword -Enabled $true -PassThru
我认为我基本上需要通过姓氏的第一个字母进行优化,然后将其排序到其中一个组中,然后输出主目录的正确用户文件夹。
答案 0 :(得分:1)
你可以这样做:
$AC = 97..99 | ForEach-Object { [char]$_ }
$DH = 100..104 | ForEach-Object { [char]$_ }
$IM = 105..109 | ForEach-Object { [char]$_ }
$NS = 110..115 | ForEach-Object { [char]$_ }
$TZ = 116..122 | ForEach-Object { [char]$_ }
$HomePath = Switch ($Surname[0]) {
{$_ -in $AC} { 'Users_01$\' }
{$_ -in $DH} { 'Users_02$\' }
{$_ -in $IM} { 'Users_03$\' }
{$_ -in $NS} { 'Users_04$\' }
{$_ -in $TZ} { 'Users_05$\' }
}
这使用ASCII字符代码(小写)a..z来创建不同的字母数组,然后使用Switch
块来比较$Surname
的第一个字母(通过使用数组运算符[0]
)到每个数组以指定主目录路径(然后将其分配给$HomePath
)。
或者您也可以这样做:
$HomePath = Switch ([byte][char]$Surname[0]) {
{$_ -in 97..99} { 'Users_01$\' }
{$_ -in 100..104} { 'Users_02$\' }
{$_ -in 105..109} { 'Users_03$\' }
{$_ -in 110..115} { 'Users_04$\' }
{$_ -in 116..122} { 'Users_05$\' }
}
这会将姓氏的第一个字母转换为其ASCII代码编号,然后使用ascii代码范围来确定哪个路径正确。对于可能需要在将来修改/维护代码的任何其他人来说,此解决方案更短,但可能更不透明/清晰。
另外(FYI)如果您使用的是PowerShell Core,现在可以直接使用..
运算符创建一个字符数组。例如,你可以在PowerShell Core中执行:'a'..'z'
。