Запустите файл С#.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);
}
}