随机地,我的脚本开始出错了。
我们更改了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}}
答案 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