Система: Windows 10
Версия Powershell: 5.1
Назначение: запустить сценарий powershell из пакетного файла Параметры: Каталог, Имя файла, Сервер, Имя пользователя, Пароль, передаваемые в виде строки в «» при вызове команды для обработки ситуации, когда есть пробел (например, в каталоге, в котором в данный момент есть пробел)
Сценарий Powershell работает отлично, он создает учетные данные и запускает соединение RDP без вопросы. Однако при вызове из командного файла окно Powershell мигает и сразу закрывается. Окно командной строки запускается от имени администратора.
Я пытался использовать:
- пауза
- -noexit
- код из https://blog.danskingdom.com/allow-others-to-run-your-powershell-scripts-from-a-batch-file-they-will-love-you-for-it/
if ($Host.Name -eq "ConsoleHost")
{
Write-Host "Press any key to continue..."
$Host.UI.RawUI.FlushInputBuffer() # Make sure buffered input doesn't "press a key" and skip the ReadKey().
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}
- Нажатие на появившееся окно Powershell (чтобы попытаться заставить функцию выбора приостановить окно).
Ничего из этого не сработало.
Код, о котором идет речь:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File """"%PowerShellScriptPath%"""" """"%server%"""" """"%username%"""" """"%password%""""' -Verb RunAs}";
За пределами этого кода в систему не было внесено никаких изменений, четыре речевых отметки были помечены как обязательные для прохождения параметров и могут быть найдены по ссылке в блоге выше в нижней части непосредственно перед комментариями. Есть большая вероятность, что я использую это неправильно, я новичок в пакетировании и еще новее в powershell. Пакетные скрипты создаются как можно более внутренними, их необходимо использовать при базовой установке Windows. В конечном итоге они будут перенесены на версии Windows Server 2008 и выше.
Нужно ли что-то делать с командной строкой, чтобы она могла запускать код Powershell? Является ли код powershell правильным для той цели, для которой я собираюсь его использовать? Есть ли способ, кроме перечисленных, просмотреть ошибку, записать информацию в журнал или приостановить окно powershell при запуске из пакетного сценария?
Любой ввод будет очень полезен!
Изменить:
-Нет выхода из вариантов:
Родительский вызов
PowerShell **-NoExit** -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File """"%PowerShellScriptPath%"""" """"%server%"""" """"%username%"""" """"%password%""""' -Verb RunAs}";
Вложенный вызов
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '**-NoExit** -NoProfile -ExecutionPolicy Bypass -File """"%PowerShellScriptPath%"""" """"%server%"""" """"%username%"""" """"%password%""""' -Verb RunAs}";
Родительский и вложенный
PowerShell **-NoExit** -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '**-NoExit** -NoProfile -ExecutionPolicy Bypass -File """"%PowerShellScriptPath%"""" """"%server%"""" """"%username%"""" """"%password%""""' -Verb RunAs}";
Переменные, установленные внутри пакетного сценария как:
SET server =% ~ 1 Удалить кавычки, которые я также пытался использовать:
сервер SET =% 1
сервер SET = сервер%: "=%