2011-02-09 4 views
12

필자는 유능한 C# 프로그래머이고 PowerShell은 초보자입니다. 나는 그것이 무엇에 좋은지 궁금하다. 프로그래머의 툴이나 관리자의 것일까 요?powershell은 무엇에 좋은가요?

경험을 공유하십시오. C# 도구보다 .NET 어셈블리를 사용하여 스크립트를 작성하는 것이 더 쉬울 때가 있습니까? 진짜 생산 작업은 무엇을 위해 사용합니까?

UPD :는 아마 질문해야한다 "그것이 무엇 C#을하지 배치에 비해 에 좋은".

+0

가능한 중복? ] (http://stackoverflow.com/questions/8722/how-do-you-use-powershell) – Helen

답변

5

C# 도구를 작성하면 일반적으로 Visual Studio 프로젝트 (또는 다른 IDE에서 프로젝트를 설정하거나이 작업을 "수동으로"수행해야하는 경우 C# 컴파일러를 호출하기위한 빌드 스크립트가 필요합니다). 특정 작업을 수행하는 데 너무 많은 오버 헤드가 발생하고 단순한 하나의 파일 소스 및 프로그램 만있는 솔루션 만 있으면 PowerShell 스크립트가 더 나은 대안이 될 수 있습니다.

편집 : 내 대답 CW을하고, 그래서 당신은 PowerShell 스크립트를 선호 할 사람이 왜 여기에 몇 가지 이유를 추가 할 수 있습니다 C#을 솔루션 전년도 :

  • 당신은 비주얼 스튜디오를 필요는 없습니다 (또는 다른 C# IDE)가 컴퓨터에 설치되어 있거나 전혀 익숙하지 않은 경우 (많은 시스템 관리자와 같이)
  • 프로그램이 너무 작아서 디버거가 필요하지 않은 경우 간단한 콘솔 출력이 가능합니다.
  • 하나 이상의 파일을 유지 관리하지 않으려는 경우
  • 개별 작업을 정의 할 수 있지만 정확한 작업 흐름을 결정할 수없는 경우 도구의 구성 매개 변수를 개별 구성 파일로 분리하지 않으려면
  • 스크립트와 C#의 혼합이 이상적입니다. C#에서 cmdlet 또는 공급자를 만들면 일반적인 방식으로 스크립트에 액세스 할 수 있으며 PowerShell이 ​​접착제가되어 새로운 상황에 유연하게 워크 플로를 적용 할 수 있습니다.
  • 당신은 몇 가지 경쟁적인 디자인 아이디어를 가지고 있으며 타당성을위한 가능성을 빠르게 테스트하고 싶습니다. Powershell의 부드러운 입력 및 파이프 라인 아키텍처를 사용하면 제어 구조 및 유형 세부 정보의 많은 변경 사항을 무시하고 알고리즘의 핵심에 쉽게 접근 할 수 있습니다.
  • (...) 추가 더 이유가 여기
+0

감사합니다. 하지만 일반적으로 Visual Studio를 시작하는 데는 문제가 없습니다. PowerShell보다 C#을 디버깅하는 것이 훨씬 쉽지 않은가요? – zzandy

+1

문제가되지는 않지만 네트워크 관리자에게는 문제가 더 작고 간단 해짐에 따라 오버 헤드가 많이 쌓일 수 있습니다. –

+1

PowerShell도 디버깅 할 수 있습니다. 설치에는 디버깅 기능이있는 IDE 인 "Windows PowerShell ISE"가 함께 제공됩니다. 물론 Visual Studio만큼 편안하지는 않지만 PowerShell 스크립트를 디버깅하는 것으로 충분합니다. –

2

Powershell은 마우스를 사용하는 사용자를 필요로하는 여러 가지 다른 작업을 수행하는 데 사용할 수있는 강력한 도구입니다 (뿐만 아니라).

예를 들어, 등등 SQL 서버, 익스체인지, 쉐어 포인트 (SharePoint)와 같은 MS 서버 제품의 최신 버전은 예를 들어 수 PowerShell로, 쉽게 빛, PowerShell을 사용할 수있는 풍부한 API를 노출 :

  • SQL Server에서 데이터베이스 연결, 분리, 백업, 복원.
  • Exchange 사서함을 조작하십시오.
  • 외 다수.

단순히 배치 파일에서 수행 할 수 없었던 모든 작업.

+0

자동화에 좋습니까? 그러나 PowerShell과 C#을 비교하는 방법은 무엇입니까? C#에서 몇 가지 코드를 작성하는 것이 문제가 아니라면 powershell에서 어떤 이점을 제공합니까? – zzandy

+0

는 powershell과 C#을 비교하는 것이 합리적이지 않습니다. 우리는 Pascal과 명령 프롬프트를 비교합니까? 작은 powershell 스크립트로 무언가를 자동화 할 수 있다면 그것을 할 수 있으며 동일한 결과를 얻기 위해 응용 프로그램, 창 또는 콘솔을 만들어 빌드하고 컴파일하고 디버깅 할 필요가 없습니다. –

2

약간 더 많은 시스템 관리자 도구이지만, 약간 있습니다. 내가 말, PowerShell을 통해 선택할 것

장소, C 번호는 다음과 같습니다 어디서나

  • 당신이
  • 외부에서 당신이 자동화 API를 처리 할 외부 응용 프로그램을 실행 할 수 있습니다 ...
  • 어디서나 조작하고 파일

우리는 우리의 하룻밤 수용 테스트를 자동화하는 결과를 컴파일 관련 최신 전자 우편 팀과 웹 페이지를 업데이트하는 데 사용했다.

NuGet은 Powershell을 사용하여 솔루션에 패키지 추가/제거를 자동화합니다. (그리고이 과정에서 Visual Studio를 직접 자동화 할 수있는 powershell 콘솔이 제공됩니다.)

컴파일 된 언어로 얻을 수있는 쓰기 -> 디버그 -> 수정주기가 아닌 대화식으로 스크립트를 향상시킬 수있는 기능 그것은 간단한 스크립트를 노크하는 것이 빠릅니다.

7

때는 C# 도구에 비해 .NET 어셈블리를 사용하여 스크립트를 작성하는 것이 더 쉽습니다?

아, 그게 전부입니다. PowerShell은 배치 파일과 .NET 세계를 구분합니다. PowerShell은 ".NET의 강력한 기능을 모두 갖춘 새로운 명령 인터프리터를 작성하고 완전히 동적이었으며 사람들이 명령 셸에서 원하는 대부분을 얻었습니까?"라는 질문에 대답했습니다.

그래서 PowerShell은 언제 C#을 사용합니까?다른 앱을 통합하거나 조율하는 소형 앱의 경우 훨씬 편리합니다. 컴파일 할 필요가 없기 때문에 편리합니다. 또한 데이터를 다른 스크립트 및 스크립틀릿으로 전달하는 표준 방식을 이미 갖추고 있으므로 쉽게 사용할 수 있습니다. 사람들 (PowerShell을 아는 사람)이 이해할 수 있어야합니다.

2

전 PowerShell 순수 커맨드 릿을 생성하고 C#에서 일부 생성했습니다. 일반적으로 C#에서했던 것들은 더 복잡하고 더 나은 방식으로 코드를 유지하기 위해 클래스 등으로 여러 파일을 만드는 것이 더 쉽습니다.

C#은 Visual Studio의 첫 번째 시민이며 PowerShell은 PowerShell과 비교하여 C# 프로젝트 테스트를 만드는 것이 더 쉽습니다.

PowerShell에서 모든 작업을 수행하면 누구나 스크립트를 편집 할 수 있다는 장점이 있습니다.

+0

+1은 '모든 사용자가 내 스크립트를 수정할 수 있음'입니다. 좋은 관찰. – akauppi

+0

@akauppi 감사합니다. :) –

2

는 내가 자주 변경해야 할 수 있습니다 작은 것들에 대한 C#을,보다 더 나은 생각합니다. 대부분 내 빌드 및 자동화 설정 부분에 주로 사용됩니다. PowerShell을 선호하는 이유는 필자의 스크립트가 Visual Studio에서 거의 항상 dll을 필요로하기 때문입니다. 이제는 C# 앱인 경우 새 버전의 Visual Studio가 나오면 새 참조를 사용하여 다시 컴파일 한 다음 필요에 따라 게시해야합니다. 그러나, 그것은 powershell 경우, 나는 단순히 스크립트에서 DLL의 경로를 변경할 수 있으며 모든 것이 좋습니다. 또한 파일 파싱 및 다른 perl-ish 유형 작업을 위해 훨씬 쉽게 작업 할 수 있습니다.

7

전 PowerShell을 Monad라고 부르는 베타 기간 이후로 사용하고 있습니다. 필자는 Korn Shell을 이용한 자동화/스크립팅을 포함하여 유닉스에서 상당량의 개발 작업을 수행했습니다. PowerShell은 Korn Shell의 Windows와의 약간의 임피던스 불일치에 지쳐 있었기 때문에 신의 선물이었습니다. 예를 들어 네트워크 공유 경로를 지정하는 것은 특히 총액이 "\\\\\\server\\\\share" IIRC였습니다.문자열이 평가받는 횟수에 따라 백 슬래시를 몇 번이나 회피했는지에 대한 추측을위한 게임이었습니다. 내가 CSPROJ 파일의 내용을 검색 할 큰 소스 디렉토리를 통해 Grepping

  • :

    나는 같은 자동화 작업을 많이하기위한 PowerShell을 사용합니다.

  • 한 번 PowerShell 스크립트로 260 개 이상의 VCPROJ 파일을 수정했습니다.
  • 또 다른 시간에 저는 수많은 코드 분석 조정을 포함하여 많은 수의 프로젝트 속성으로 구성된 새로운 C# 프로젝트를 각각 만들어야했습니다. 스톡 C# 프로젝트 파일을 가져 와서 모든 수정 작업을 수행하는 스크립트를 작성했습니다. 많은 시간과 중요성을 저에게 지켜주었습니다. 실수를 많이하거나 특정 설정을 잊어 버렸습니다.
  • checkin 주석의 특정 단어가있는 최근 변경 집합 검색과 같은 TFS 쿼리 (TFPT PowerShell cmdlet 사용) .
  • 특정 폴더 계층 내에서 모든 임시 파일 (bin/obj dirs, suo 파일 등)을 삭제합니다.

사용자 정의 명령 행 유틸리티를 교체하려면 : 당신은 당신이 쓰는 데 사용되는 모든 그 작은 명령 행 유틸리티를 대체 할 수있는 좋은 방법으로 PowerShell을 사용할 수 있습니다

. 이것에 대해 생각하다. PowerShell은 대부분의 .NET Framework에 대한 액세스를 제공하는 매우 강력한 스크립트 언어입니다. 특히 매개 변수 파싱에 탁월합니다. 즉, 명명 된 매개 변수, 위치 매개 변수, 선택적 매개 변수, 스위치 매개 변수, 파이프 라인 바인딩 매개 변수, 매개 변수 유효성 검사 등을 제공하는 기본 제공 매개 변수 분석 엔진이 있습니다. 이제 일반적인 명령 행 유틸리티의 코드가 매개 변수 구문 분석과 실제 기능에 얼마나 많은가를 고려하십시오. 필자는 커맨드 라인 유틸리티를 작성하는 것을 거의 중단했습니다. (특히 복잡한 것이 아니라면 VS 디버거를 이길 수는 없습니다.) PowerShell에서 모든 매개 변수 구문 분석을 처리하도록했습니다. 또한 PowerShell 2.0을 사용하면 적절한 형식의 주석으로 스크립트를 꾸미기 만하면 문서/사용법을 유틸리티에 쉽게 추가 할 수 있습니다. 나는 또한 .NET REPL로 PowerShell을 사용

:

  • 그냥 형식 문자열 예를 들어, 무엇을보고 ConsoleApplication59를 생성 할 필요가 없습니다 PowerShell 프롬프트로 가서 "{0,20:F1}" -f 41.22과 같은 것을 시도해보십시오.

또한 C# 응용 프로그램에서 PowerShell 엔진을 쉽게 호스팅 할 수 있습니다. 스크립트를 명령 줄로 만들 수있는 기능을 최종 사용자에게 제공하면이 기능이 유용합니다. 이러한 기능을 PowerShell cmdlet으로 작성할 수 있습니다 (C#의 경우). 이러한 cmdlet은 다음 명령 줄에서 직접 사용할 수 있으며, 당신이 당신의 GUI 응용 프로그램에서 PowerShell을 호스트하는 경우, 당신은 거기에서 코드의 동일한 집합에 액세스 할 수 있습니다 예를 들면 : 당신이 PowerShell을 어떻게 사용합니까 [의

private bool VerifyPowerShellScriptSignature(string path) 
    { 
     using (var runspaceInvoker = new RunspaceInvoke()) 
     { 
      Collection<PSObject> results = 
       runspaceInvoker.Invoke("Get-AuthenticodeSignature " + path); 
      Signature signature = results[0].BaseObject as Signature; 
      return signature == null ? false : 
           (signature.Status == SignatureStatus.Valid); 
     } 
    } 
+0

PowerShell 2.0에는 강력하고 유용한 Add-Type Cmdlet도 추가되어 있으므로 JIT 컴파일 된 CLR 코드를 다양한 언어로 PowerShell에 직접 통합 할 수 있습니다. evens는 P/Invoke의 가능성을 추가합니다! –

+0

+1 우수 게시글입니다. Powershell이 ​​.net 개발자에게 유용 할 수있는 방법에 대한 좋은 설명 –