Basi c L oop Помощь - Powershell - PullRequest
       0

Basi c L oop Помощь - Powershell

2 голосов
/ 11 февраля 2020

Полный Powershell Noob ie здесь.

У меня есть файл .bat, который я хотел бы преобразовать в Powershell.

В основном при запуске; он просит пользователя ввести свои учетные данные Active Directory. После проверки; он запускает инструмент RSAT (пример: dhcpmgmt.msc) как пользователь с повышенными правами.

Однако, если учетные данные неверны (if %ERRORLEVEL% EQU 5); он выполняет GOTO echo "Incorrect username and password", а затем возвращается к исходному состоянию, запрашивая у пользователя повторный ввод учетных данных.

Когда я использую:

do 
{
  Start-Process -FilePath C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Credential (Get-Credential "$env:USERDNSDOMAIN\")  -ArgumentList "C:\Windows\System32\dhcpmgmt.msc"
} until ($response -eq $null)

Работает. Но если я введу неверный пароль; окно закрывается.

Я бы хотел, чтобы пользователь уведомлял пользователя о том, что имя пользователя / пароль указаны неверно, и затем перенаправлял бы их для повторного ввода учетных данных. Это будет l oop, пока пользователь не введет правильные учетные данные или просто не нажмет кнопку отмены.

Любая помощь / руководство высоко ценится. Большое спасибо заранее!

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Вы можете запустить это в то время как l oop, чтобы продолжать запрашивать учетные данные, пока они не будут действительными.

  • Получить учетные данные
  • Запуск powershell с новыми кредитами
  • Если не удается, запросите новые учетные данные. Вырваться из l oop, если нет.
while ($true) 
{
  $userCreds = Get-Credential "$env:USERDNSDOMAIN\"
  try {
     Start-Process powershell -Credential $userCreds -ArgumentList "C:\Windows\System32\dhcpmgmt.msc" -ErrorAction Stop
     break
  }
  catch {
     Write-Output "Invalid Credentials"
     Write-Output "Enter new credentials?"
     if ((Read-Host) -ne "Yes") { break }

  }
}
0 голосов
/ 11 февраля 2020

Это должно сделать необходимое.

  • Loop, чтобы получить и проверить Credential
  • Try - Catch Проверка учетных данных
  • Повышение Messagebox на Failed Credential
  • Exit скрипт на Cancel.
$Credential=$null
while ($Credential -eq $null) {
  $Credential = Get-Credential -Username "$env:USERDNSDOMAIN\" -message "Enter Admin Password"
  try {
    Start-Process -FilePath cmd.exe /c -Credential $Credential
  }
  catch {
    $Credential=$null
    IF (
      $([System.Windows.MessageBox]::Show('Invalid UN/PW!  ?','Credential Error','OKCancel','Error')
    ) -eq "Cancel") { EXIT}
  }
}

### Your code to launch RSAT tools here:

Мы используем while l oop.

В то время как учетные данные равны NULL, мы получаем учетные данные, сохраняем их в виде защищенной строки в переменной, затем делаем попытку при проверке запуска процесса, если он попытается снова получить учетные данные, и мы сохраняем учетные данные в переменной как безопасная строка.

Первоначально учетные данные равны NULL, поэтому мы их запрашиваем.

Затем мы используем Try для проверки учетных данных, инициируя процесс как их .

Если это не удастся, мы Catch it и 1-й снова устанавливаем учетные данные на NULL, затем мы повышаем Windows Message Box для пользователя, давая ему знать, что учетные данные не пройдены, и проверяем, хотят ли они повторить попытку (OK) или Cancel.

Если они ответят «Отмена», нет смысла продолжать Сценарий, поэтому мы просто exit.

В противном случае мы просто go впереди с нашей oop, как запланировано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...