2017-10-06 1 views
-1

J'ai un fichier VBScript. Je cours ce VBscript using CScript sur le serveur 2012 de fenêtres. Le VBscript fonctionne bien sur le serveur.appelant VBScript de Powershell .. Est-ce la bonne façon de le faire?

Mais j'ai besoin d'appeler ce fichier VBScript de Powershell. C'est ce que j'ai fait.

Pour simplifier, c'est ce que j'ai dans mon fichier VBscript

echo.vbs

Msgbox("hello world") 

J'ai écrit le test.ps1

$acommand = "C:\Windows\System32\Cscript.exe C:\deleteit\echo.vbs" 

    Invoke-Expression $acommand 
+0

... et ce qui est arrivé? Je suggère que si possible, vous convertissez votre VBS en PS et évitez cela. Vous appelez fondamentalement un langage de script ancien style d'un langage de script moderne. Ce sera plus simple si vous vous en tenez à une plateforme –

+1

Pourquoi faites-vous cela? La bonne façon d'exécuter un exe est de * juste exécuter un exe *. PowerShell est un shell, il peut exécuter les choses directement. 'C: \ c: \ windows \ system32 \ cscript.exe c: \ deleteit \ echo.vbs' – TessellatingHeckler

+0

PS C: \> C: \> cd c: \ windows \ system32 \ cscript.exe c: \ deleteit \ echo.vbs C: \> cd: Le terme 'C: \> cd' n'est pas reconnu comme le nom d'une cmdlet, d'une fonction , d'un fichier de script ou d'un programme utilisable. Vérifiez l'orthographe du nom ou si un chemin a été inclus, vérifiez que le chemin est correct et réessayez. À la ligne: 1 char: 1 + C: \> cd c: \ windows \ system32 \ cscript.exe c: \ deleteit \ echo.vbs + ~~~~~~ + CategoryInfo: ObjectNotFound: (C: \> cd: String) [], CommandNotFo undException + FullyQualifiedErrorId: CommandNotFoundException – Jason

Répondre

0

Il est la bonne façon de fonctionner une application externe et vous pouvez utiliser la même technique si vous utilisez des scripts exe ou VBS en ligne de commande.

Personnellement, je serais à la recherche d'ajouter la fonctionnalité à un script PowerShell plutôt que d'appeler un script VBS externe, mais c'est juste mes 2 cents vaut :)

+0

" * C'est la bonne façon d'exécuter une application externe * "- ce n'est pas le cas. L'exécution directe de l'application est très correcte, l'opérateur d'appel '&' est le plus à droite s'il doit être dans une chaîne pour gérer les espaces dans le chemin, et 'Start-Process' est le plus correct si vous avez besoin de jouer avec des arguments et les styles de fenêtres et d'attente. 'Invoke-Expression' est moins correct - il enveloppe une commande powershell dans une chaîne et la renvoie dans le moteur PowerShell. Il est circulaire et redondant - tout ce qui était dans la chaîne fonctionnerait si elle était retirée de la chaîne et n'était pas utilisée dans l'expression invoke. – TessellatingHeckler

+0

@TessellatingHeckler Le problème est d'utiliser le VBScript comme ça en premier lieu au lieu d'utiliser simplement PowerShell. Je ne pense pas que ce que Gareth dit est faux si tout ce que vous êtes d'accord, le vote négatif est dur imho. – Lankymart

+0

J'ai une raison pour laquelle je n'utilise pas PowerShell. le script VB que j'ai écrit utilise une DLL. Même si je me suis inscrit sur la boîte, Powerhell dit qu'il ne peut pas le trouver. Mais VBScript peut voir la DLL. Donc, je devais utiliser VBscript – Jason