脚本随机开始出错

时间:2018-06-19 09:35:53

标签: powershell

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

我们更改了JumpBox服务器,我认为可能与此有关,但我不确定。

错误如下:

$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}

有问题的街区如下:

$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 " "

编辑1 - 完整代码

{{1}}

2 个答案:

答案 0 :(得分:0)

我不知道带有-Regex参数的切换命令是否能解决问题,
但它可以更容易地创建额外的范围,并可能查明问题。

交换机包含在一个小的测试脚本中:

## 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

答案 1 :(得分:0)

您看到的错误是运行PowerShell 2.0时将得到的结果。

PS[2] (1) > 1 -in 2,3,4,5
- : You must provide a value expression on the right-hand side of the '-' operator.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

PowerShell 3.0中引入了-in运算符,因此请查看$PSVersionTable变量以查看您正在运行的PowerShell版本。如果您坚持使用2.0,则应该使用-contains的反向操作符-in

PS[2] (4) > 1,2,3,4,5 -contains 3
True