Esegui un file C # .cs da uno script PowerShell

Ho uno script PowerShell V2 che sposta alcuni file e installa alcuni servizi. Comunque mi piacerebbe chiamare ed eseguire un file .cs a circa metà dello script di PowerShell. Ho trovato molti articoli su come chiamare PowerShell da C# ma nessuno al contrario. Mi piacerebbe solo che il file C # venga eseguito una volta e quindi continui a eseguire lo script PowerShell.

Se qualcuno potesse indicarmi la direzione di un articolo che spiega come realizzarlo o se conosci te stesso e potrebbe aiutarlo sarebbe molto apprezzato.

Stai cercando la cosa sbagliata. Metti il ​​tuo C # in un assieme e chiama le sue classi pubbliche, le sue funzioni e i suoi metodi da PowerShell, proprio come si chiamerebbe .NET Framework da PowerShell.

Se si desidera compilare ed eseguire C # source da PowerShell, consultare Weekend Scripter: Esegui codice C # da In PowerShell .

Non vedo alcun motivo per cui non possiamo eseguire un file .cs direttamente da PowerShell, così ho preso lo snip di Keith e ho aggiunto le parti mancanti del get-content per fare letteralmente ciò che l’OP chiede. Non è necessario compilare il codice, basta modificare il percorso del file .cs

 $source = Get-Content -Path "A:\basic.cs" Add-Type -TypeDefinition "$source" [BasicTest]::Add(4, 3) $basicTestObject = New-Object BasicTest $basicTestObject.Multiply(5, 2) 

Ovviamente ho aggiunto questo frammento nel mio 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); } } 

È ansible utilizzare Add-Type per compilare il codice C # e aggiungerlo alla sessione corrente di PowerShell. Quindi chiami il codice C # come faresti con qualsiasi altro codice framework .NET. Questo è un esempio dalla man page su 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) 

Se lo desideri, puoi eseguire lo script c # dal file * .bat:

  1. creare script c # (ad esempio Program.cs) con metodo public static void Main()
  2. creare il file * .bat (es. Run.bat) e inserire questo codice:
 @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() 
  1. Correre