Почему PowerShell неожиданно завершает работу в «Get-Credentials»? - PullRequest
0 голосов
/ 10 января 2019

Я использую графический скрипт PowerShell, мне нужно спрятать пакетный скрипт, который его загружает. (Это облегчает загрузку моей командой.)

Пакетный скрипт:

@ECHO OFF
pushd "NETWORK SHARE"
PowerShell.exe -ExecutionPolicy unrestricted -WindowStyle hidden -NoProfile -file .\FileName.ps1
popd

Я получил его, чтобы разрешить приход всплывающих окон, используя:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName PresentationFramework

Но следующая строка заставляет скрипт PowerShell зависать и неожиданно завершать работу.

$mycredentials = Get-Credential # This is necessary as some people may not use their admin accounts to login

Некоторые из членов моей команды не входят в систему со своими учетными записями администратора и используют свои стандартные учетные записи для входа и выполнения каких-либо действий. Некоторые входят в систему со своими учетными записями администраторов, чтобы что-то делать.

1 Ответ

0 голосов
/ 10 января 2019

Итак, я написал следующий код и бросил его в небольшой bat-файл, чтобы протестировать ядро, которое вы пытаетесь достичь.

 powershell.exe -executionpolicy bypass -windowstyle hidden -noprofile -command "Add-Type -AssemblyName System.Windows.Forms; Add-Type -AssemblyName PresentationFramework;get-credential;start-sleep 10"

Если у вас есть -windowstyle hidden, сценарий не будет выполнен, потому что Get-Credential не вызовет всплывающее окно с запросом ваших учетных данных и просто выйдет (или, возможно, он запускается, но не имеет учетных данных).

Как только вы удалите -windowstyle hidden, сценарий запустится, создайте всплывающее окно, чтобы получить учетные данные, затем повесьте на 10 секунд перед закрытием.

Я также добавил [System.Windows.Forms.Application]::EnableVisualStyles(), но это ничего не изменило.

Если вы не введете имя пользователя и пароль для Get-Credential, появится всплывающее окно. Поскольку вы настаиваете на том, чтобы он был скрытым, вам придется вручную запрашивать у пользователя имя пользователя и пароль или использовать дополнительную учетную запись с ограниченными разрешениями. Альтернативой может быть использование всплывающей оконной формы для запроса имени пользователя и пароля, а затем использование их для генерации учетных данных, а не Get-Credential

Без дополнительной информации о вашем коде и о том, чего вы пытаетесь достичь с помощью учетных данных, вам уже невозможно помочь. Вы всегда можете очистить свой код, чтобы удалить ссылки на пользователей, серверы и другую конфиденциальную информацию. Если вам нужна надлежащая помощь, вы должны быть готовы поделиться тем, что вы сделали.

...