Я борюсь с чем-то, что должно быть очевидно простым, но, кажется, не таким простым для решения. У меня есть динамическая последовательность команд 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