J'ai un script PowerShell V2
qui déplace certains fichiers et installe certains services. Toutefois, j'aimerais appeler et exécuter un fichier .cs à peu près à mi-chemin du script PowerShell. J'ai trouvé de nombreux articles sur l'appel de PowerShell
à partir de C#
mais aucun l'inverse. Je voudrais juste que le fichier C # s'exécute une fois puis continue à exécuter le script PowerShell.
Si quelqu'un pouvait me diriger vers un article expliquant comment accomplir cela ou si vous vous connaissez et pourriez aider, ce serait grandement apprécié.
Vous cherchez la mauvaise chose. Placez votre C # dans un assembly et appelez ses classes, fonctions et méthodes publiques depuis PowerShell, comme vous le feriez avec le .NET Framework de Powershell.
Si vous voulez vraiment compiler et exécuter une source C # à partir de PowerShell, voir Weekend Scripter: Exécuter le code C # à partir de PowerShell .
Vous pouvez utiliser Add-Type
pour compiler le code C # et l'ajouter à la session PowerShell en cours. Ensuite, vous appelez le code C # comme tout autre code .NET Framework. Voici un exemple tiré du man page
sur Add-Type:
PS C:\>$source = @"
public class BasicTest
{
public static int Add(int a, int b)
{
return (a + b);
}
public int Multiply(int a, int b)
{
return (a * b);
}
}
"@
PS C:\>Add-Type -TypeDefinition $source
PS C:\>[BasicTest]::Add(4, 3)
PS C:\>$basicTestObject = New-Object BasicTest
PS C:\>$basicTestObject.Multiply(5, 2)
Je ne vois aucune raison pour laquelle nous ne puissions pas exécuter un fichier .cs directement à partir de powershell. J'ai donc pris la copie de Keith et ajouté les éléments get-content manquants pour faire littéralement ce que l'OP demande. Pas besoin de compiler votre code, il suffit de modifier le chemin d'accès à votre fichier .cs
$source = Get-Content -Path "A:\basic.cs"
Add-Type -TypeDefinition "$source"
[BasicTest]::Add(4, 3)
$basicTestObject = New-Object BasicTest
$basicTestObject.Multiply(5, 2)
Évidemment, j'ai ajouté cet extrait dans mon basic.cs.
public class BasicTest
{
public static int Add(int a, int b)
{
return (a + b);
}
public int Multiply(int a, int b)
{
return (a * b);
}
}
Si vous le souhaitez, vous pouvez exécuter le script c # à partir du fichier * .bat:
public static void Main()
@ECHO off
Echo Please run as administrator
setlocal
cd /d %~dp0
set csDir=%cd%\Program.cs
powershell ^
set-executionpolicy remotesigned; ^
$source = Get-Content -Raw -Path %csDir%; ^
Add-Type -TypeDefinition "$source"; ^
[Program]::Main()