首页 > 解决方案 > 脚本随机开始出错

问题描述

随机地,我的脚本开始出错。

我们更改了 JumpBox 服务器,我觉得这可能是相关的,但我不确定。

错误如下:

You must provide a value expression on the right-hand side of the '-' operator.
At C:\Users\Timmsj\Desktop\Fixes\powershell\AD & Exchange New User Creation.ps1:128 char:26
+ $Folder = if ($SInitial - <<<< in 'a','b','c'){$AC}
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression

有问题的块如下:

$Folder = if ($SInitial -in 'a','b','c'){$AC}
      ElseIf ($SInitial -in 'd','e','f', 'g','h'){$DH}
      ElseIf ($SInitial -in 'i','j','k', 'l','m'){$IM}
      ElseIf ($SInitial -in 'n','o','p', 'q','r','s'){$NS}
      Else {$TZ}

编辑 1 - 完整代码

$GivenName = Read-Host -Prompt "What Is The New User's First Name?"
Write-Host " "

$Surname = Read-Host -Prompt "What Is The New User's Last Name?"
Write-Host " "

$Description = Read-Host -Prompt "What Is The Job Title & Department Of The New User? [Please format as Job Title – Dept]"
Write-Host " "


$DisplayName = $Surname + " " + $GivenName

$Mail = $GivenName + "." + $Surname + "@" + "royalberkshire.nhs.uk"

$MailAlias = $GivenName + "." + $Surname + "@" + $DNSRoot2

$SInitial = $Surname[0]
$Initial = $GivenName[0]
$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$\"

$Folder = if ($SInitial -in 'a','b','c'){$AC}
      ElseIf ($SInitial -in 'd','e','f', 'g','h'){$DH}
      ElseIf ($SInitial -in 'i','j','k', 'l','m'){$IM}
      ElseIf ($SInitial -in 'n','o','p', 'q','r','s'){$NS}
      Else {$TZ}

$group1 = "zz Everyone"
$group2 = "Safeboot Domain Users"

$defaultname = $SAMAccountName
$email = $GivenName + "." + $Surname
$i = 1
cls



While ((Get-ADUser -Filter "SamAccountName -eq '$SAMAccountName'" -ErrorAction SilentlyContinue) -ne $null){
$SamAccountName = $defaultname + [string]$i 
$Mail = $email + [string]$i + "@" + "royalberkshire.nhs.uk"
$i++

}

$NewUserParams = @{
path                  = "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk"
SamAccountName        = $SAMAccountName
Name                  = $SAMAccountName
DisplayName           = $DisplayName
GivenName             = $GivenName
Surname               = $Surname
EmailAddress          = $Mail
UserPrincipalName     = "$SAMAccountName@rbbh-tr.nhs.uk"
Title                 = $title
HomeDrive             = $HomeDrive
HomeDirectory         = "$HDir$Folder$SAMAccountName"
Description           = $Description
ChangePasswordAtLogon = $true
PasswordNeverExpires  = $false
AccountPassword       = $defpassword
Enabled               = $true
}

New-ADUser @NewUserParams -ErrorAction SilentlyContinue
Add-ADGroupMember -Identity $group1  -Members $SAMAccountName
Start-Sleep -s 10
Add-ADGroupMember -Identity $group2  -Members $SAMAccountName

cls
echo "Please Wait Whilst We Create The AD Account & Create The Exchange Mailbox.."
Start-Sleep -s 30

Enable-Mailbox -Identity $SAMAccountName
cls

echo "Please Wait Whilst We Activate The Exchange Mailbox..."
Start-Sleep -s 15
cls



echo "Username:" $SAMAccountName
Write-Host " "
echo "Password:" "Welcome123"
Write-Host " "
echo "Email:" $Mail
Write-Host " "
echo "Job Title - Department:" $Description
Write-Host " "
echo "Home Directory:" $HDir$Folder$SAMAccountName
Write-Host " "

标签: powershell

解决方案


我不知道带有-Regex参数的 switch 命令是否会发现问题,
但它可以更轻松地创建额外的范围并可能查明问题。

该开关包含在一个小测试脚本中:

## Q:\Test\2018\06\19\SO_50925074.ps1
$AC,$DH,$IM,$NS,$TZ = 'AC','DH','IM','NS','TZ'

while ($True) {
    $SInitial = Read-Host -Prompt "Enter anything"

    $Folder = switch -regex ($SInitial) {
        '^[a-c]'    {$AC;Break}
        '^[d-h]'    {$DH;Break}
        '^[i-m]'    {$IM;Break}
        '^[n-s]'    {$NS;Break}
        '^[t-z]'    {$TZ;Break}
        '^[0-9]'    {"Number";Break}
        '^\p{L}'    {"Diacritique";Break}
        default     {"Other"}
    }

    "{0} Folder = {1}" -f $SInitial,$Folder
}

样本输出:

> Q:\Test\2018\06\19\SO_50925074.ps1
Enter anything: a
a Folder = AC
Enter anything: ö
ö Folder = Diacritique
Enter anything: ;
; Folder = Other
Enter anything: 7
7 Folder = Number

推荐阅读