1

Я борюсь с чем-то, что должно быть очевидно простым, но, кажется, не таким простым для решения. У меня есть динамическая последовательность команд 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 для этого ... Это потому, что иногда, когда выполняется скрипт, я не могу выполнить другую функцию. Итак, теперь моя цель - запустить указанную выше группу команд в новом окне, чтобы я мог использовать одно и то же окно оболочки для вызова нескольких задач (которые выполняются в их собственных окнах). Я думал, что это будет просто, поэтому я изменил функцию

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 (кажется "особой" PowerShell XML в соответствии с 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

0