Je me bats avec quelque chose qui devrait être évidemment simple mais qui ne semble pas si simple à résoudre. J'ai une séquence dynamique de commandes Powershell à exécuter. Cela fait partie de certains modèles que j'ai écrits pour moi-même afin de me faciliter la tâche dans mon flux de travail.
Voici un exemple simple de commandes groupées générées:
$commands = {
Write-Output "Navigating to tools->deploy";
Set-Location "C:\tools\deploy\";
Write-Output "OK. Run dd.ps1 [server name] to deploy.";
}
Il est possible de lancer ceci $commandsen utilisant Invoke-Command. Donc, finalement, j'ai cette fonction qui le gère:
function invokeNow() {
param([string]$c)
Invoke-Command $c;
}
Cela fonctionne bien. Il exécute les commandes dans l'objet dans la fenêtre. Mais avec le temps, j'y ai ajouté plus de fonctionnalités. Pour chaque nouvelle instruction, je dois ouvrir PowerShell à chaque fois ... C'est parce que, parfois, lorsqu'un script est en cours d'exécution, je ne peux pas émettre une autre fonction. Mon objectif est donc maintenant d'exécuter le groupe de commandes ci-dessus dans une nouvelle fenêtre afin de pouvoir utiliser une même fenêtre de shell pour appeler plusieurs tâches ( exécutées dans leurs propres fenêtres). Je pensais que ce serait simple, alors j'ai modifié la fonction pour
function invokeNow() {
param([string]$c)
Invoke-Expression "cmd /c start powershell -Command {$c} -NoProfile -NoExit";
}
Cela conduit à ce résultat:
#< CLIXML
#< CLIXML
PS C:\tools\deploy\>
La navigation a fonctionné. Cependant, mes informations de sortie sont perdues. Certaines commandes ont ajouté des instructions telles que deploy S1 fooou deploy FS -src "data". Celles-ci sont difficiles à mémoriser parfois. Pour cela, j'ai deux petites questions: (1) Où sont mes Write-Outputdonnées? Et (2) quelle est cette CLIXMLchose étrange (semble "spécial" XML PowerShell selon Google)? Lorsque je demande exità fermer cette fenêtre, je vois un tas de choses XML avant que la fenêtre ne se ferme.
Question principale
Est-il possible d'ouvrir une nouvelle fenêtre PowerShell, puis d' exécuter $commandscorrectement les commandes de mon objet (y compris les Write-Outputdonnées)?
J'ai déjà essayé d'ajouter Invoke-Commandà ce qui précède comme
Invoke-Expression "cmd /c start powershell -Command {Invoke-Command -ScriptBlock $c} -NoProfile -NoExit";
mais la nouvelle fenêtre crache beaucoup de choses XML ...
informations de version
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
Write-Output "Navigating to tools->deploy"; Set-Location "C:\tools\deploy\";provient d'une fonction qui vous permet d'accéder à un répertoire. Par cela, je n'ai pas à écrire les deux lignes plusieurs fois. Je voudrais suivre ma navigation dans les répertoires. Je pourrais aussi ajouter des noms de fonctions, mais je pense que c'est plus difficile à résoudre.
