주요 질문

주요 질문

분명히 간단해야 하지만 해결하기가 쉽지 않은 문제로 어려움을 겪고 있습니다. 실행할 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것은 무엇입니까(Google에 따르면 "특별한" powershell XML로 보임)? 해당 창을 닫으 려고 하면 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

관련 정보