Я пытаюсь написать скрипт, который выбросит четыре поля ввода текста и сохранит введенные значения в четыре переменные, каждая из которых представляет имя пользователя, PIN-код телефона, PIN-код голосовой почты и добавочный номер телефона. После заполнения он отправляет электронное письмо, которое само использует переменные как заполнители, где каждое значение должно появляться.
Я скрыл и удалил часть кода для анонимности, однако надеюсь, что он по-прежнему читается логически.
Сценарий частично работает, но со странным недостатком, который я не могу определить.
При первоначальном выполнении сценарий выбрасывает 4 поля ввода текста и успешно выполняет запись-хост, отображая результат данных, введенных в поля ввода текста (например, fred.bloggs, 1000, 1000, 1000) - доказательство того, что пользователь данные сохраняются в переменные. Затем он отправляет электронное письмо, но ВСЕ поля переменных остаются пустыми, когда я получаю электронное письмо. (Я тестирую, вводя свое имя пользователя в поле ввода имени пользователя.)
Если я запускаю сценарий второй раз, сценарий выдает 4 поля, выполняет успешную запись-хост, показывая новые значения (например, fred.bloggs, 1001, 1001, 1001), сохраненные для каждой переменной, затем отправляет электронное письмо - но, электронное письмо содержит значения, которые я ввел при первом запуске скрипта. (фред.блоги, 1000, 1000, 1000)
Поэтому я получаю пустые переменные в выводе электронной почты при первом запуске (например, если я закрываю Powershell_ISE и снова открываю). И я получаю предыдущие значения, введенные, если я запускаю его во второй раз. Кажется, что когда я запускаю скрипт, он всегда отправляет электронное письмо, используя значения предыдущей попытки.
Итак, это так:
Попытка 1: введено fred.bloggs, 1000, 1000, 1000 - Результат: все пусто в переменных полей электронной почты
Попытка 2: введено fred.bloggs, 1001, 1001, 1001 - Результат: поля переменных электронной почты, заполненные fred.bloggs, 1000, 1000, 1000
Попытка 3: введено fred.bloggs, 1002, 1002, 1002 - Результат: поля переменных электронной почты, заполненные fred.bloggs, 1001, 1001, 1001
Я подозреваю, что это связано с тем, как значения текстового поля ввода сохраняются в переменных, но я не могу найти ошибку.
Код как ниже. Буду очень признателен за любую помощь, так как я очень много учусь с нуля с Powershell.
$EmailFrom = "obscured@obscured.com"
$EmailSubject = "Welcome to obscured + On-Boarding Details"
$SMTPServer = "obscured"
$SMTPPassword = Get-Content .\mailpw.txt | ConvertTo-SecureString
$SMTPCred = New-Object System.Management.Automation.PSCredential "MailUser",
$SMTPPassword
$EmailBody = @"
Hi $StarterName,
Log in with obscured\$StarterName
Your Personalised details:
Username: $StarterName<Br>
Email: $StarterName@obscured.com<Br>
Phone Extension: $PhoneExt (+obscured $PhoneExt) Dial 0 for external calls. <Br>
Phone Username: $StarterName<Br>
Phone PIN: $PhonePin <Br>
Voicemail PIN: $VMPin <Br>
"@
#INPUT BOX: STARTER USER NAME
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Enter Starter UserName:'
$form.Controls.Add($label)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$StarterName = $textBox.Text
$StarterName
}
#INPUT BOX: PHONE EXTENSION
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Enter Starter Phone Extension'
$form.Controls.Add($label)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$PhoneExt = $textBox.Text
$PhoneExt
}
#INPUT BOX: PHONE PIN
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Enter Starter Phone PIN:'
$form.Controls.Add($label)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$PhonePIN = $textBox.Text
$PhonePIN
}
#INPUT BOX: VM PIN
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Enter Starter Voicemail PIN:'
$form.Controls.Add($label)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$VMPin = $textBox.Text
$VMPin
}
Write-Host "Sending email to $StarterName@obscured.com" -ForegroundColor Green
Write-Host "PhoneExt: $PhoneExt" -ForegroundColor Green
Write-Host "Phone PIN: $PhonePIN" -ForegroundColor Green
Write-Host "Voicemail PIN: $VMPin" -ForegroundColor Green
Send-MailMessage -Credential $SMTPCred -To "$StarterName@obscured" -From
$EmailFrom -Subject $EmailSubject -SmtpServer $SMTPServer -Body $EmailBody -BodyAsHtml