[unix] PowerShell이 ​​Windows에서 Cygwin 셸을 교체 할 준비가 되셨습니까? [닫은]

PowerShell을 배우거나 Cygwin / Perl 스크립트 / Unix 쉘 스크립트 등을 고수 해야하는지 여부에 대해 토론 하고 있습니다.

PowerShell의 이점은 Cygwin이없는 팀원이 스크립트를보다 쉽게 ​​사용할 수 있다는 것입니다. 그러나 나는 그 많은 범용 스크립트를 실제로 쓰고 있는지, 사람들이 그것을 사용할 것인지 모르겠습니다.

유닉스 스크립팅은 매우 강력합니다. PowerShell이 ​​전환을 보장 할 수있을만큼 가까워 집니까?

PowerShell에서 찾고자하는 특정 항목 (또는 이에 상응하는 항목)은 다음과 같습니다.

  • grep
  • 종류
  • 유니크
  • Perl (PowerShell은 Perl의 기능에 얼마나 근접합니까?)
  • AWK
  • sed
  • file (파일 정보를 제공하는 명령)
  • 기타


답변

도구는 도구 일뿐입니다.
그들은 돕거나하지 않습니다.
도움이 필요하거나 필요하지 않습니다.

Unix와 해당 도구가 Windows에서 필요한 작업을 수행한다는 것을 알고 있다면 행복하게 생각할 수 있으며 PowerShell을 배울 필요가 없습니다 (탐색하지 않는 한).

저의 원래 의도는 Windows에 일련의 유닉스 도구를 포함시키고 그 도구를 사용하는 것이 었습니다 (팀의 많은 사람들이 유닉스 배경에 깊은 관심을 가지고 있으며 해당 커뮤니티에 대한 건전한 존중을 받았습니다).

내가 찾은 것은 이것이별로 도움이되지 않았다는 것입니다. 그 이유는 AWK / grep / sed가 COM , WMI , ADSI , 레지스트리, 인증서 저장소 등에 대해 작동하지 않기 때문입니다 .

다시 말해, UNIX는 텍스트 파일을 중심으로 자체 조정 된 전체 에코 시스템입니다. 따라서 텍스트 처리 도구는 효과적으로 관리 도구입니다. Windows는 API와 객체를 중심으로 자체 조정 된 완전히 다른 생태계입니다. 그래서 우리는 PowerShell을 발명했습니다.

필자가 생각하는 것은 텍스트 처리로 Windows에서 원하는 것을 얻지 못하는 경우가 많다는 것입니다. 이 시점에서 PowerShell을 선택해야합니다. 참고-그것은 전부 또는 아무것도 거래가 아닙니다. PowerShell 내에서 Unix 도구를 호출하고 텍스트 프로세스 또는 PowerShell의 텍스트 처리를 사용할 수 있습니다. 또한 Unix 도구에서 PowerShell을 호출하여 텍스트를 얻을 수 있습니다.

다시 말하지만 여기에는 종교가 없습니다. 우리의 초점은 당신에게 성공에 필요한 도구를 제공하는 것입니다. 그렇기 때문에 피드백에 대한 열정이 있습니다. 우리가 직장에서 쓰러지는 곳이나 필요한 도구가없는 곳을 알려 주면 목록에 올려 놓을 것입니다.

정직하게 말해서, 우리는 30 년짜리 구멍에서 파헤쳐 서 시간이 좀 걸릴 것입니다. 즉, Windows Server 2008 / R2의 베타 및 / 또는 서버 제품의 베타를 선택하면 그 구멍이 얼마나 빨리 채워지는지 충격을받을 것입니다.

사용량과 관련하여 현재까지 350 만 건 이상의 다운로드가있었습니다. 선택적 구성 요소로 포함되어 있으며 다운로드가 필요하지 않기 때문에 Windows Server 2008에서 사용하는 사람은 포함되지 않습니다.

V2는 모든 버전의 Windows에 제공됩니다. 선택 구성 요소 인 서버 코어를 제외한 모든 버전의 경우 기본적으로 사용됩니다. Windows 7 / Windows Server 2008 R2가 출시 된 직후, 모든 플랫폼, Windows XP 이상에서 V2를 사용할 수있게됩니다. 즉, 학습에 대한 투자는 매우 많은 기계 / 환경에 적용됩니다.

마지막 의견. PowerShell을 배우기 시작하면 행복 할 것입니다. 디자인의 많은 부분이 유닉스 배경에 크게 영향을 받으므로, 우리가 상당히 다른 반면, 유닉스가 아니라는 점을 극복 한 후에는 매우 빨리 선택할 수 있습니다.

우리는 사람들이 학습을위한 예산이 매우 제한적이라는 것을 알고 있습니다. 이것이 일관성에 대해 매우 어려운 이유입니다. 무언가를 배우고 나면 계속 반복해서 사용할 것입니다.

실험! 즐겨! 끌다!


답변

grep

Select-Stringcmdlet 및 -match연산자는 정규식을 사용합니다. 또한 고급 기능에 대한 .NET 정규식 지원을 직접 사용할 수 있습니다.

종류

Sort-Object더 강력합니다 (* nix ‘s를 기억하는 것보다 sort). 임의의 표현식에서 다중 레벨 정렬을 허용합니다. PowerShell의 기본 유형 유지 관리가 도움이됩니다. 예를 들어, DateTime속성은 DateTime정렬 가능한 형식으로 형식화하지 않아도 속성 으로 정렬됩니다.

유니크

Select-Object -Unique

Perl (PowerShell은 Perl 기능에 얼마나 근접합니까?)

Perl의 광범위한 도메인 특정 지원 라이브러리 측면에서 볼 때, 아직 멀지 않습니다.

일반적인 프로그래밍의 경우 PowerShell은 확실히 더 응집력 있고 일관되며 확장하기 쉽습니다. 텍스트 녹기의 한 가지 격차는 Perl의 ..연산자 와 동등한 것 입니다.

AWK

AWK를 사용한 이후로 오랜 시간이 걸렸으며 (나중에 Perl을 사용한 이후 18 년 이상이어야 함) 실제로 의견을 말할 수는 없습니다.

sed

[위 참조]

file (파일 정보를 제공하는 명령)

여기서 PowerShell의 강점은 파일 시스템 객체로 할 수있는 일이 그리 많지 않다는 것입니다 (그리고 여기에서 전체 정보를 얻 거나 dir반환 FileInfo하거나 FolderInfo객체를 적절하게 얻습니다 )는 전체 공급자 모델입니다.

레지스트리, 인증서 저장소, SQL Server, Internet Explorer의 RSS 캐시 등을 파일 시스템과 동일한 cmdlet으로 탐색 할 수있는 개체 공간으로 취급 할 수 있습니다.


PowerShell은 Windows에서 앞으로 나아갈 길입니다. Microsoft는 향후 비 가정 제품에 대한 요구 사항의 일부로 만들었습니다. 따라서 Exchange의 풍부한 지원, SQL Server의 지원. 이것은 단지 확장 될 것입니다.

최근의 예는 TFS PowerToys입니다. 많은 TFS 클라이언트 작업은 매번 tf.exe를 시작하지 않고도 수행되며 (새 TFS 서버 연결 등이 필요함) 데이터를 추가로 처리하기가 훨씬 쉽습니다. 뿐만 아니라 TF.exe의 팀 탐색기에 노출 된 것보다 더 상세하게 전체 TFS 클라이언트 API에 대한 광범위한 액세스를 허용합니다.


답변

1997 년부터 2010 년까지 Windows 엔터프라이즈 개발에 중점을 둔 경력을 가진 사람은 이전에 주어진 모든 좋은 이유 (예 : Microsoft의 엔터프라이즈 전략의 일부이며 Windows / COM / .NET과 잘 통합됨)에 대한 PowerShell이 ​​될 것입니다. 파일 대신 객체를 사용하면 “더 풍부한”코딩 모델이 제공됩니다. 이런 이유로 나는 지난 2 년 동안 PowerShell을 사용하고 홍보 해 왔으며, “Bill of Bill”을 굳게 믿고있었습니다.

그러나 실용 주의자로서 나는 더 이상 PowerShell이 ​​그렇게 훌륭한 대답이라고 확신하지 않습니다. 뛰어난 Windows 도구이며 Window 명령 줄인 역사적인 구멍을 채우는 데 필요한 단계를 많이 제공하지만 소비자 컴퓨팅 슬립에 대한 Microsoft의 그립을 보면서 Microsoft가 OS를 유지하기 위해 막대한 전투가 벌어 질 가능성이 높아지고 있습니다. 미래의 기업에 중요합니다.

실제로, 내 작업이 점점 더 이기종 환경에 있다는 것을 알았을 때, Linux, Solaris 및 Mac OS X에서만 작동 할뿐만 아니라 현재와 함께 작동하기 때문에 Bash 스크립트를 사용하는 것이 훨씬 더 유용하다는 것을 알게되었습니다. Cygwin의 도움 —Windows.

따라서 OS의 미래가 독점이 아닌 상품화되었다고 믿는다면, 가능한 경우 독점 도구를 사용하지 않는 민첩한 개발 도구 전략을 선택하는 것이 합리적입니다. 그러나 여러분의 미래가 All-that-is-Redmond에 의해 지배되는 것을 본다면 PowerShell로 가십시오.


답변

스크립트 자동화에 약간의 PowerShell을 사용했습니다. 환경이 유닉스 쉘보다 훨씬 더 많은 것으로 생각되는 것은 매우 좋지만 실제로 텍스트 스트림 대신 객체를 사용하는 것은 훨씬 더 어색하고 지난 30 년 동안 개발 된 많은 유닉스 기능 몇 년이 아직 없습니다.

Cygwin은 여전히 ​​Windows 호스트에서 선택한 스크립팅 환경입니다. 그것은 일을 끝내는 측면에서 대안을 확실히 능가합니다.


답변

여기에 큰 훌륭한 답변이 많이 있으며 여기에 내 의견이 있습니다. 다음과 같은 경우 PowerShell이 ​​준비되었습니다. 예 :

grep = ” 선택 문자열-패턴

sort = “정렬 개체”

uniq = ” Get-Unique

파일 = ” Get-Item

cat = ” Get-Content

Perl / AWK / Sed는 명령이 아니지만 유틸리티를 비교하기는 어렵지만 PowerShell에서 거의 모든 작업을 수행 할 수 있습니다.


답변

나는 최근에 어느 정도의 심각성을 가지고 PowerShell에서 손을 대기 시작했습니다. 지난 7 년 동안 나는 거의 독점적으로 Windows 기반 환경에서 일했지만 Unix 배경에서 왔으며 Windows에서 내 상호 작용 경험을 “Unix-fy”하려고 끊임없이 노력하고 있습니다. 가장 말을하는 것이 실망 스럽다.

grep , sed , awk , find 등의 유틸리티 가 엄밀히 말하면 쉘의 일부가 아니기 때문에 PowerShell을 Bash , tcsh 또는 zsh 와 비교하는 것만 공평합니다 . 그러나 항상 모든 유닉스 환경의 일부가 될 것입니다. 즉 같은 PowerShell 명령 말했다 선택 문자열이 아주 유사한 기능이 grep을을 하고 있다 선이 약간 흐리게 할 수 있도록 … PowerShell의 핵심 모듈로 번들.

핵심은 문화 라고 생각하고 , 각 도구 세트가 각자의 문화를 구현할 것이라는 사실을 생각합니다 .

  • 유닉스는 파일 기반 (일반적으로 유니 코드가 아닌) 텍스트 기반 문화입니다. 구성 파일은 거의 독점적으로 텍스트 파일입니다. 반면에 Windows는 구성 형식과 관련하여 항상 훨씬 더 구조화되어 있습니다. 구성은 일반적으로 관리를위한 특수 도구가 필요한 독점 데이터베이스 (예 : Windows 레지스트리)에 보관됩니다.
  • 유닉스 관리 (그리고 수년간 개발) 인터페이스는 전통적으로 명령 행과 가상 터미널이었습니다. 윈도우는 GUI로 시작했다 및 관리 기능은 최근 인에서 멀리 이동하기 시작했다 전용 GUI 기반. 우리는 커맨드 라인에서의 유닉스 경험이 PowerShell에서 중요한 리드를 감안할 때 더 풍부하고 성숙한 경험을 기대할 수 있습니다. 이것에 대해, 내 경험에서 :

    • 유닉스 관리 경험은 최소한의 키 조작만으로 쉽게 할 수 있도록 만들어졌습니다. 이것은 아마도 9600 보드 연결이 느린 서버를 통해 서버를 관리해야했던 역사적 상황 때문일 것입니다. 이제 PowerShell에는 Verbose -Noun 표준을 다루는 데 도움이되는 별칭이 있지만 별칭을 아는 것은 약간의 고통입니다 (누군가가 더 잘 알고 있습니다 : alias | where {$_.ResolvedCommandName -eq "<command>"}?).

      역사를 조작 할 수있는 풍부한 방법의 예 :

      iptables명령은 종종 오래 걸리고 Bash에 내장 된 많은 역사 조작 기능 중 하나가 아니라면 약간의 차이로 명령을 반복하는 것이 고통 스럽습니다 . 따라서 iptables 규칙을 다음과 같이 삽입하십시오.

      iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT

      다른 카메라 ( ” camera-2“) 의 두 번째 시간 은 다음과 같은 경우입니다.

      !!:s/-1-/-2-/:s/50/51

      어떤 수단 “이전 명령하지만, 대신 수행 -1--2-50함께 51.

    • 유닉스 경험은 터치 타이프 스트에 최적화되어 있습니다. “집”위치를 벗어나지 않고도 모든 것을 할 수 있습니다. 예를 들어,에 배쉬 의 사용 이맥스 키 바인딩 (예, 배쉬도 지원 VI 사용하여 수행 된 역사를 통해 순환, 바인딩) Ctrl-PCtrl-N사용하여 수행됩니다 라인의 시작과 끝으로 이동하는 동안 Ctrl-ACtrl-E각각 … 그리고 그것은 확실히 거기서 끝나지 않습니다. 집 위치에서 움직이지 않고 PowerShell 콘솔에서 가장 간단한 탐색조차 시도해보십시오.

    • 유닉스에서 다목적 페이징 ( 약간 적은 ) 과 같은 간단한 것은 PowerShell에서 기본적으로 사용할 수없는 것처럼 보이며 약간 실망스럽고 풍부한 편집기 환경도 존재하지 않습니다. 물론, 이러한 차이를 메울 수있는 타사 도구를 항상 다운로드 할 수 있지만, 유닉스의 거의 모든 풍미와 같이 이러한 것들이 “있는”것이면 좋을 것입니다.
  • 최소한 시스템 API 측면에서 Windows 문화는 크게 구조화되고 객체 기반 인 지원 프레임 워크 인 viz., COM.NET 에 의해 좌우됩니다 . 반면, Unix API에 대한 액세스는 전통적으로 파일 인터페이스 ( /dev/proc) 또는 (객체 지향이 아닌) C 스타일 라이브러리 호출을 통해 이루어졌습니다. 스크립팅 경험이 각각의 OS 패러다임과 일치한다는 것은 놀라운 일이 아닙니다. PowerShell은 기본적으로 구조화되어 있으며 (모든 것이 개체 임) Bash 및 친구 파일 기반입니다. PowerShell 프로그래머가 사용할 수있는 구조화 된 API는 방대합니다 (기존의 표준 COM 및 .NET 인터페이스 세트의 광대 함과 일치 함 ).

즉, PowerShell에서의 스크립팅 기능은 틀림없이보다 강력하지만 있습니다 배쉬 (당신은 .NET의 가용성을 고려, 특히 BCL 의) 대화 형 경험을 당신이 완전히 키보드 중심에서오고있어 특히 경우, 상당히 약한입니다 콘솔 기반의 관점 (많은 유닉스 헤드와 마찬가지로).


답변

나는 경험이 많은 PowerShell 사용자는 아니지만, 내가 노출 된 약간은 나에게 큰 감명을 주었다. 기본 제공 cmdlet을 함께 연결하여 Unix 프롬프트에서 수행 할 수있는 모든 작업을 수행 할 수 있으며 CSV, HTML 테이블로 내보내기 및보다 심층적 인 시스템 관리 작업 유형과 같은 작업을 수행하는 데 도움이됩니다. .

그리고 실제로 sed 와 같은 것이 필요하다면 UnixUtils 또는 GnuWin32 가 항상 있습니다. PowerShell과 상당히 쉽게 통합 할 수 있습니다.

오랜 유닉스 사용자로서 명령 명명 체계에 익숙해지는 데 약간의 어려움이 있었으며 더 많은 .NET을 알고 있다면 분명히 더 많은 이점을 얻었을 것입니다.

따라서 본질적으로 Windows 전용이 문제가되지 않으면 그것을 배울 가치가 있다고 말합니다.