Запустите файл С#.cs из PowerShell Script

У меня есть PowerShell V2 script, который перемещает некоторые файлы и устанавливает некоторые службы. Однако я хотел бы вызвать и запустить файл .cs примерно на полпути через PowerShell Script. Я нашел много статей о вызове PowerShell из C#, но не наоборот. Я бы просто хотел, чтобы файл С# запускался один раз, а затем продолжал работу с PowerShell Script.

Если кто-нибудь может указать мне в сторону статьи, объясняющей, как это сделать или если вы знаете себя и могли бы помочь, это было бы весьма признательно.

Ответ 1

Вы ищете не ту вещь. Поместите ваш С# в сборку и вызывайте его общедоступные классы, функции и методы из PowerShell, как если бы вы вызывали .NET Framework из Powershell.

Если вы действительно хотите скомпилировать и запустить исходный код С# из PowerShell, см. Выходной сценарий: запуск кода С# из PowerShell.

Ответ 2

Вы можете использовать Add-Type для компиляции кода С# и добавления его в текущий сеанс PowerShell. Затем вы вызываете код С#, как и любой другой .NET-код. Это пример из man page в 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)

Ответ 3

Я не вижу причин, по которым мы не можем запустить файл .cs непосредственно из powershell, поэтому я взял Кейта Снипа и добавил недостающие части get-content, чтобы буквально выполнить то, что запрашивает OP. Нет необходимости компилировать код, просто отредактируйте путь к файлу .cs

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

Очевидно, я добавил этот фрагмент в свои 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);
    }
}