2009-04-16 5 views
5

어쨌든 powershell 스크립트를 실행하지 않고 정확성을 테스트합니다. 유닉스에서 비슷한 것을 할 수는 있지만 powershell에 대해서는 equiv를 찾을 수 없다는 것을 알고 있습니다.정확성을위한 Powershell 스크립트 테스트

필자가 가지고있는 스크립트 저장소는 각 스크립트가 규칙에 묶여있는 곳입니다. 규칙이 실행되면 스크립트가 실행되지만 저장소에 저장되기 전에 스크립트가 유효한지 확인해야합니다.

감사합니다.

안녕하세요, 글쎄, 불행히도 -whatif 명령으로는 충분하지 않습니다. 이 구문은 C# 런타임 엔진에서 검사 할 스크립트의 구문으로, 엔진 규칙이 실행되면 스크립트가 실행됩니다. 스크립트가 시작되기 전에 규칙의 IList 값을 기록한 다음 실행합니다. 그러나 구문 론적으로 정확한지 확인해야합니다. 그렇지 않으면 규칙 작성자가 올바른지 확인하기 위해 규칙 작성자에게 의존해야합니다. 많은 사람들이 규칙을 작성할 것이므로 하나의 더프 스크립트 만 사용하면됩니다. 엔진 다운. 엔진이 6 시그마 가동 시간을 위해 설계된 enterpise 클래스 제품이기 때문에 저는 그렇게 할 수 없습니다.

나는이 방법을 사용하는 것이 v2 라이브러리라고 생각합니다.

http://msdn.microsoft.com/en-us/library/system.management.automation.parseexception(VS.85).aspx

나는 스크립트 블록을 생성하고 ParseException을 잡으려고 주위 시도 캐치를 넣는 방법이 생각합니다. 누군가가 어떻게하는지 말해 줄 수 있어요. 이것은 진정한 도전이되고 있습니다.

감사합니다.

안녕하세요, 글쎄 MS (그는 sharepoint 오후)에있는 남자와 이야기를 나누었고 그는 powershell 녀석 중 한 명에게 말했고, 그는 powershell v1에서 스크립트 구문을 확인하는 실제 방법이 없다고 알려주었습니다. 실행하지 않고. 그래서 나는 -whatif 플래그가 가장 가까운 것 같지만, 유감스럽게도 정적 검사기는 아닙니다. 좋은 소식은 v2에서 Automation.PsParser 클래스 인 Tokenize 멤버를 통해 입력 스트림을 토큰 화하는 방법이 있다는 것입니다. 이렇게하면 PS 문법에 따라 스크립트가 토큰 화됩니다. v2에 아직 출시 날짜가 없습니다.

도움 주셔서 감사합니다. Bob.

+0

글쎄, 어떻게 적용 해야할지 모르지만 나는 이것을 발견했다. 모든 스크립트에 해당 코드 블록이 필요하며 어떻게 C#으로 상태를 되돌릴 수 있습니까? http://keithhill.spaces.live.com/Blog/cns!5A8D2641E0963A97!6036.entry –

+0

안녕하세요, shariung님께 도움이되는이 정보는 귀중한 정보입니다. ParseException에 대한 도움이 필요합니까? – majkinetor

답변

4

원하는 것은 prolly whatif/confirm입니다. 유닉스 세계에서 직접 포트.

+0

안녕하세요 Majkinetor, 그게 정말 빠릅니다. 나는 그것을 약 1 년 동안 켜고 껐다. 감사. 단발. –

+0

안녕하세요 Majkinetor, 나는 그것이 그랬 으면 좋았을 때,이 매개 변수는 특정 명령에만 적용될 수 있으며 스크립트 자체에는 적용되지 않는 것으로 보입니다. 이후로 나는 그것을 C#에서 호출하고 있으므로 잘 맞지 않습니다. –

+0

필자의 대답에서 'whatif'및 'confirm'은 전체 스크립트가 아니라 cmdlet에서만 작동합니다. –

1

그럼 기능상의 정확성이나 구문상의 정확성을 묻고 있습니까?

기능적으로 당신의 테스트를 위해 테스트 케이스 및 환경을 조성해야 할 것입니다.

를 통 사적으로 당신이 PowerShell을위한 정적 코드 검사기를 찾고 있습니다.

+5

정확하게 말하면 : 테스트는 정확성을 보장 할 수 없으며 오류 만 존재합니다. 그러나 프로그램 동작에 대한 공식적인 증명은 정확히 할 일이 아닙니다 :) – Joey

0

많은 PowerShell 명령은 -whatif 매개 변수를 제공합니다.

+0

Powershell cmdlets (전문 용어에 차이점이 있습니다)하지만 OP는 스크립트에 대해 묻습니다. –

+0

대부분의 스크립트는 PowerShell 명령 (cmdlet)으로 구성되어 있기 때문에 ... 스크립트가 whatif 매개 변수를 사용하면 로직을 직접 제공해야합니다. – aphoria

0

나는 당신에게 '유효'한 의미를 정량화해야한다고 생각합니다. 그것은 모호한 용어이며 많은 것을 의미 할 수 있습니다.

Perl의 구문 검사와 같은 것을 의미하는 경우 PowerShell V1과 함께 PowerShell 스크립트와 정확히 일치하는 것은 없습니다. 그 중 하나에 대해 V2에 어떤 것이 있는지 확실하지 않습니다.

설명을하면 구문/'실행 유형'검사 이상의 것을 원하는 것처럼 들릴 것입니다[email protected] Rossell이 말한 것처럼, 그것은 사소하지 않고 자신이하는 일에 매우 구체적입니다.

다른 대답의 앞에서 언급 한 'whatif/confirm'메서드는 스크립트가 아닌 PowerShell cmdlet에서만 작동합니다. 이 cmdlet은 구문 확인이 아니라 해당 cmdlet이 수행 할 작업을 보여줍니다.

제임스

관련 문제