2014-07-21 2 views
11

일부 파일을 이동하고 일부 서비스를 설치하는 PowerShell V2 스크립트가 있습니다. 그러나 PowerShell 스크립트를 통해 .cs 파일을 호출하고 실행하고 싶습니다. 나는 PowerShellC#에서 전화하고 많은 반대 기사를 찾았습니다. C# 파일을 한 번 실행 한 다음 PowerShell 스크립트를 계속 실행하고 싶습니다.PowerShell 스크립트에서 C# .cs 파일 실행

누군가가이 작업을 수행하는 방법을 설명하는 기사의 지시에 나를 가리킬 수 있거나 자신을 알고 도움이 될 수 있다면 크게 감사하겠습니다.

+1

".cs 파일"을 실행하지 마십시오. 스크립트가 아닙니다. 아마 더 큰 프로젝트, 콘솔 또는 wpf 앱의 일부가 될 것입니다. 파일에 대해 더 자세히 설명해 줄 수 있습니까? – tnw

+0

네, 죄송합니다. 제가 가지고있는'XML' 파일을 편집하는 것은'Console Application'입니다. 대부분 XML 파일의 텍스트 만 변경되며 너무 복잡하지는 않습니다. 'class1'라는 클래스가 하나뿐입니다. – Foster

+2

그럼 컴파일 된 실행 파일을 대신 호출하거나 실행하지 마십시오. 매개 변수를 사용하는 경우 매개 변수를 지정할 수 있습니다. – tnw

답변

8

당신은 틀린 것을 찾고 있습니다. Powershell에서 .NET Framework를 호출하는 것처럼 C#을 어셈블리에 넣고 PowerShell에서 공용 클래스, 함수 및 메서드를 호출합니다.

PowerShell에서 C# 소스를 컴파일하고 실행하려면 Weekend Scripter: Run C# Code from Within PowerShell을 참조하십시오.

17

Add-Type을 사용하여 C# 코드를 컴파일하고 현재 PowerShell 세션에 추가 할 수 있습니다. 그런 다음 다른 .NET Framework 코드처럼 C# 코드를 호출합니다. 이 부가 기능 유형에 man page에서 예입니다 : 우리는 .cs이 PowerShell을에서 파일을 직접 실행할 수없는 이유를 볼

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) 
15

, 그래서에 누락 된 GET-컨텐츠 부분을 키스의 싹둑했다 및 추가 말 그대로 OP가 요구하는 것을하십시오.

$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에이 코드를 추가 파일 코드를 컴파일 할 필요가, 당신의 .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); 
    } 
} 
+0

'Get-Content'는'-Raw'를 필요로합니다. – StingyJack

관련 문제