2015-08-14 1 views
0

Je suis en train de commencer à distance de package NodeJS TeamCity PowerShell construire étape.processus de démarrage dans PowerShell, déshydrater ses données et détacher de ce

Actuellement, une partie qui démarre le processus ressemble à ceci:

$npm = "C:\Program Files\nodejs\node.exe" 
$params = $pathToStart 

$proc = Start-Process -FilePath $npm -ArgumentList $params -Passthru 
$proc | Export-Clixml -Path $fullProcessHandlePath 

$ pathToStart détient en effet chemin vers le point d'entrée de mon colis. Lorsque je l'exécute avec -Wait, provoquant effectivement mon script PS à ne jamais finir, je peux voir que le paquet de noeud est démarré et s'exécute correctement. Toutefois, si je laisse le script s'exécuter au point de

$proc | Export-Clixml -Path $fullProcessHandlePath 

et de quitter, mon processus de nœud se termine également.

Je dois appeler l'Export-Clixml pour enregistrer les processus nouvellement créés poignée d'information pour que je puisse plus tard de le détruire d'un autre script.

Comment puis-je conserver Export-Clixml, mais détacher du script ps et de laisser le travail sur node.exe?

Répondre

1

Je suggère en utilisant de l'applet de commande Start-Job plutôt que Start-processus, car il vous permettra de détacher la console PowerShell de la course de commande.

$npm = "C:\Program Files\nodejs\node.exe" 
$params = $pathToStart 

Start-Job -FilePath $npm -ArgumentList $params 

Comme pour tirer les informations de processus, le mieux que je pouvais trouver est de courir obtenir le plus récent processus de noeud via le tri par le temps, cela va obtenir le plus granulaire que la milliseconde a été lancé le processus.

Get-Process notepad | Sort-Object starttime | Select-Object -Last 1 | Export-Clixml -Path $fullProcessHandlePath 
+0

Merci. Le seul problème est que Start-Job me dit que je devrais spécifier un autre script ps1 est une valeur pour -FilePath. Si je le fais via un bloc de code, je finis par appeler Start-Process. –

+0

J'ai passé une heure à essayer d'exécuter node à partir de $ scriptBlock qui est démarré via Start-Job et agit comme une boîte noire. Je cours, passe des params et rien. Lorsque je contrôle les processus fractionnés par l'utilisateur PowerShell qui appelle Invoke-Command pour exécuter tout cela sur une machine, je vois que cela crée un processus de Powershell, deux autres conhost et quelque chose d'autre, mais jamais essaye même de courir node.exe. Je soupçonne que le code de mon bloc de script ne s'exécute jamais. –

+0

Voici une erreur exacte avec votre exemple: La valeur du paramètre FilePath doit être un fichier de script Windows PowerShell. Entrez le chemin d'accès à un fichier avec une extension de nom de fichier .ps1 et réessayez la commande. –

1

Je fini par utiliser paquet node-windows pour avoir le code Node.js pour créer un service Windows pour mon application. Je sais que c'est quelque chose de différent et je ne vais pas le marquer comme une réponse, bien que sachant que je ne pourrais pas obtenir node.exe pour rester en vie même avec Start-Job peut sauver quelqu'un et conduire à une solution plus solide.