![Главный вопрос](https://rvso.com/image/1558694/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B9%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81.png)
Я борюсь с чем-то, что должно быть очевидно простым, но кажется не таким уж простым для решения. У меня есть динамическая последовательность команд powershell для запуска. Это часть некоторого шаблона, который я написал для себя, чтобы облегчить себе рабочий процесс.
Вот простой пример сгенерированных сгруппированных команд:
$commands = {
Write-Output "Navigating to tools->deploy";
Set-Location "C:\tools\deploy\";
Write-Output "OK. Run dd.ps1 [server name] to deploy.";
}
Это можно запустить $commands
с помощью Invoke-Command
. Так что в конечном итоге у меня есть эта функция, которая это обрабатывает:
function invokeNow() {
param([string]$c)
Invoke-Command $c;
}
Это работает отлично. Он выполняет команды в объекте в окне. Но со временем я добавил больше функциональности. Для каждой новой инструкции мне приходится каждый раз открывать powershell для этого... Это потому, что иногда, когда скрипт выполняется, я не могу выполнить другую функцию. Итак, моя цель сейчас — запустить указанную выше группу команд вновыйwindow, чтобы я мог использовать одно и то же окно оболочки для вызова нескольких задач (которые выполняются в своих собственных окнах). Я подумал, что это будет просто, поэтому я изменил функцию на
function invokeNow() {
param([string]$c)
Invoke-Expression "cmd /c start powershell -Command {$c} -NoProfile -NoExit";
}
Это приводит к следующему результату:
#< CLIXML
#< CLIXML
PS C:\tools\deploy\>
Навигация работала. Однако моя выходная информация потеряна. Некоторые команды добавили инструкции вроде deploy S1 foo
или deploy FS -src "data"
. Иногда их трудно запомнить. В связи с этим у меня есть два небольших вопроса: (1) Где мои Write-Output
данные? И (2) Что это за странная CLIXML
штука (кажется, «особенный» XML PowerShell, согласно Google)? Когда я закрываю exit
это окно, я вижу кучу XML-вещей, прежде чем окно закрывается.
Главный вопрос
Можно ли открыть новое окно PowerShell,затемправильно выполнять команды в моем $commands
объекте (включая Write-Output
данные)?
Я уже пытался добавить Invoke-Command
к вышесказанному
Invoke-Expression "cmd /c start powershell -Command {Invoke-Command -ScriptBlock $c} -NoProfile -NoExit";
но новое окно выдает много XML-содержимого...
информация о версии
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.16299.251
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.16299.251
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1