Je veux exécuter un appel pour un script myScript1.ps1 dans un second script myScript2.ps1 dans Powershell ISE.
Le code suivant dans MyScript2.ps1, fonctionne correctement à partir de l'administration Powershell, mais ne fonctionne pas dans PowerShell ISE:
#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1
J'obtiens l'erreur suivante lorsque j'exécute MyScript2.ps1 à partir de PowerShell ISE:
Le terme «. \ MyScript1.ps1» n'est pas reconnu comme le nom d'une applet de commande, d'une fonction, d'un fichier de script ou d'un programme utilisable. Vérifiez l'orthographe du nom ou, si un chemin était inclus, vérifiez que le chemin est correct et réessayez.
la source
Le chemin d'accès actuel de MyScript1.ps1 n'est pas le même que myScript2.ps1. Vous pouvez obtenir le chemin du dossier de MyScript2.ps1 et le concaténer en MyScript1.ps1, puis l'exécuter. Les deux scripts doivent être au même emplacement.
la source
J'appelle myScript1.ps1 depuis myScript2.ps1.
En supposant que les deux scripts se trouvent au même emplacement, obtenez d'abord l'emplacement du script à l'aide de cette commande:
Et, ensuite, ajoutez le nom du script que vous souhaitez appeler comme ceci:
Cela devrait fonctionner.
la source
& "$PSScriptRoot\myScript1.ps1"
est assezSolution une ligne:
la source
& '.\MyScript1.ps'
si le script réside dans le même répertoire?Ce ne sont que des informations supplémentaires aux réponses afin de passer l'argument dans un autre fichier
Où vous attendez une dispute
PrintName.ps1
Comment appeler le fichier
Si vous ne fournissez aucune entrée, il sera par défaut "Joe" et cela sera passé comme argument dans l'argument printName dans le fichier PrintName.ps1 qui imprimera à son tour la chaîne "Joe"
la source
Vous avez peut-être déjà trouvé la réponse, mais voici ce que je fais.
Je place généralement cette ligne au début de mes scripts d'installation:
Ensuite, je peux utiliser la variable $ PSScriptRoot comme emplacement du script actuel (chemin), comme dans l'exemple ci-dessous:
Dans votre cas, vous pouvez remplacer
Processus de démarrage ... ligne avec
Invoke-Expression $ PSScriptRoot \ ScriptName.ps1
Vous pouvez en savoir plus sur les variables automatiques $ MYINVOCATION et $ PSScriptRoot sur le site de Microsoft: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_automatic_variables
la source
Pour exécuter facilement un fichier de script dans le même dossier (ou sous-dossier de) que l'appelant, vous pouvez utiliser ceci:
la source
J'ai eu un problème avec ça.
$MyInvocation
Cependant, je n'ai utilisé aucun truc intelligent pour résoudre ce problème. Si vous ouvrez l'ISE en cliquant avec le bouton droit sur un fichier de script et en sélectionnantedit
puis ouvrez le deuxième script de l'intérieur de l'ISE, vous pouvez invoquer l'un de l'autre en utilisant simplement la syntaxe normale . \ Script.ps1 . Ma conjecture est que l'ISE a la notion d'un dossier courant et l'ouvrir comme ceci place le dossier courant au dossier contenant les scripts. Quand j'invoque un script à partir d'un autre en utilisation normale, j'utilise juste . \ Script.ps1 , IMO il est faux de modifier le script juste pour le faire fonctionner correctement dans l'ISE ...la source
J'ai eu un problème similaire et je l'ai résolu de cette façon.
Mon répertoire de travail est un dossier de script général et un dossier de script particulier de serveur dans la même racine, je dois appeler un dossier de script particulier (qui appelle le script général avec le paramètre du problème particulier). Donc, le répertoire de travail est comme ça
Solutions1 et Solutions2 appellent le PS1 dans le dossier Scripts en chargeant le paramètre stocké dans ParameterForSolution. Donc, dans PowerShell ISE, j'exécute cette commande
Et le code à l'intérieur de Solution1.PS1 est:
la source
Je soumets mon exemple pour examen. C'est ainsi que j'appelle du code à partir d'un script de contrôleur dans les outils que je crée. Les scripts qui font le travail doivent également accepter des paramètres, donc cet exemple montre comment les transmettre. Il suppose que le script appelé se trouve dans le même répertoire que le script du contrôleur (script effectuant l'appel).
Ce qui précède est un script de contrôleur qui accepte 3 paramètres. Ceux-ci sont définis dans le bloc param. Le script du contrôleur appelle ensuite le script nommé Get-ZAEventLogData.ps1. A titre d'exemple, ce script accepte également les 3 mêmes paramètres. Lorsque le script du contrôleur appelle le script qui effectue le travail, il doit l'appeler et transmettre les paramètres. Ce qui précède montre comment je le fais en éclaboussant.
la source
Comment exécutez-vous des scripts intégrés PowerShell à l'intérieur de vos scripts?
Comment utilisez-vous des scripts intégrés comme
Ceux-ci sont exécutés par votre ordinateur, vérifiant automatiquement le chemin du script.
De même, je peux exécuter mes scripts personnalisés en mettant simplement le nom du script dans le bloc de script
Accédez à la ligne de commande PowerShell et tapez
Cela renverra le chemin vers un fichier que notre ligne de commande PowerShell exécutera à chaque fois que vous ouvrirez l'application.
Il ressemblera à ceci
Accédez à Documents et voyez si vous avez déjà un répertoire WindowsPowerShell. Je n'ai pas, donc
Nous avons maintenant créé le script qui se lancera chaque fois que nous ouvrirons l'application PowerShell.
Nous avons fait cela pour pouvoir ajouter notre propre dossier contenant tous nos scripts personnalisés. Créons ce dossier et je le nommerai "Bin" après les répertoires dans lesquels Mac / Linux contient ses scripts.
Maintenant, nous voulons que ce répertoire soit ajouté à notre
$env:path
variable chaque fois que nous ouvrons l'application, alors revenez auWindowsPowerShell
répertoire etPuis ajoutez ceci
Maintenant, le shell trouvera automatiquement vos commandes, tant que vous sauvegardez vos scripts dans ce répertoire "Bin".
Relancez le PowerShell et ce devrait être l'un des premiers scripts à s'exécuter.
Exécutez ceci sur la ligne de commande après le rechargement pour voir votre nouveau répertoire dans votre variable de chemin:
Maintenant, nous pouvons appeler nos scripts depuis la ligne de commande ou depuis un autre script aussi simplement que ceci:
Comme vous le voyez, nous devons les appeler avec l'
.ps1
extension jusqu'à ce que nous leur fassions des alias. Si nous voulons avoir de la fantaisie.la source