다음을 통해 공유


PowerShell 7.1의 새로운 소식

2020년 11월 11일, 우리는 PowerShell 7.1의 일반 출시를 발표했습니다 . PowerShell 7.0에서 구축된 기반을 바탕으로, 저희는 커뮤니티 문제에 집중하여 여러 개선과 수정을 포함하고 있습니다. 우리는 PowerShell이 안정적이고 성능이 뛰어난 플랫폼으로 남도록 최선을 다하고 있습니다.

PowerShell 7.1에는 다음과 같은 기능, 업데이트 및 주요 변경 사항이 포함되어 있습니다.

  • PSReadLine 2.1.0, 예측 인텔리센스를 포함
  • PowerShell 7.1이 Microsoft Store에 배포되었습니다
  • ARM64를 지원하는 새로운 OS 버전에 맞게 업데이트된 설치 패키지
  • 4개의 새로운 실험 기능과 2개의 실험적 기능 주류 진출
  • 사용성을 개선하기 위한 여러 가지 주요 변경 사항

전체 변경 목록은 GitHub 리포지토리의 CHANGELOG 참조하세요.

PSReadLine 2.1.0

PowerShell 7.1에는 PSReadLine 2.1.0도 포함되어 있습니다. 이 버전에는 예측 인텔리센스가 포함되어 있습니다. 예측 인텔리센스 기능에 대한 자세한 내용은 PowerShell 블로그의 공지를 참조하세요.

Microsoft Store 설치 패키지

PowerShell 7.1이 Microsoft Store에 배포되었습니다. PowerShell 릴리스는 Microsoft Store 웹사이트나 Windows의 Store 애플리케이션에서 확인할 수 있습니다.

Microsoft Store 패키지의 이점:

  • Windows에 바로 기본 제공되는 자동 업데이트
  • Intune, SCCM 같은 다른 소프트웨어 배포 메커니즘과 통합됩니다

비고

저장된 $PSHOME 시스템 수준의 설정 설정은 변경할 수 없습니다. 여기에는 WSMAN 구성이 포함됩니다. 그러므로 원격 세션에서 PowerShell의 저장소 기반 설치에 연결할 수 없습니다. 사용자 수준 구성 및 SSH 원격이 지원됩니다.

기타 설치업체

지원되는 운영체제와 지원 수명주기에 대한 더 up-to정보는 PowerShell 지원 수명주기를 참조하세요.

선호하는 운영체제의 설치 지침을 확인하세요:

추가로, PowerShell 7.1은 Debian, Ubuntu, ARM64 Alpine Linux의 ARM32 및 ARM64 버전을 지원합니다.

공식적으로 지원되지는 않지만, 커뮤니티는 Arch 와 Kali Linux용 패키지도 제공한 적이 있습니다.

비고

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine 및 Arm은 현재 WinRM 원격 지원을 하지 않습니다. SSH 기반 원격 구축에 대한 자세한 내용은 PowerShell Remoting over SSH를 참조하세요.

실험적 기능

실험적 기능에 대한 자세한 내용은 실험적 기능 사용참조하세요.

다음 실험 기능들은 이제 이번 릴리스에서 주류 기능으로 인정되었습니다:

이 릴리스에는 다음과 같은 실험적 기능이 추가되었습니다:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1은 이 실험적 기능을 확장하여 모든 *-PSBreakpoint cmdlet에 런스페이스 매개변수를 추가합니다. 런스페이스 매개변수는 지정된 런스페이스 내 끊김점과 상호작용할 런스페이스 객체를 지정합니다.
  • PSNativePSPathResolution - 이 기능은 PowerShell 경로 구문을 지원하지 않는 네이티브 명령어에 PowerShell 제공자 경로를 전달할 수 있게 해줍니다.

  • PSCultureInvariantReplaceOperator - 연산자 문장의 -replace 왼쪽 피연산자가 문자열이 아니면, 그 피연산자는 문자열로 변환됩니다. 이 기능이 활성화되면 변환은 문자열 변환에 Culture 설정을 사용하지 않습니다.

  • PSSubsystemPluginModel 은 향후 예측 인텔리센스 플러그인을 지원할 기반을 마련합니다.

변화 및 개선 사항

  • .NET 5.0에서 문자열 비교 동작이 변경되었습니다

    PowerShell 7.1은 .NET 5.0 위에 구축되었으며, 다음과 같은 획기적인 변경사항을 도입했습니다:

    .NET 5.0부터는 문화 불변 문자열 비교가 인쇄되지 않는 제어 문자를 무시합니다.

    예를 들어, 다음 두 문자열은 동일하다고 간주됩니다:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • 네이티브 명령어가 (#13395)에 stderr 쓸 때 오류가 $false 발생하지 않도록 수정 $?

    네이티브 명령어가 실패를 알리려는 의도 없이 쓰는 stderr 경우가 흔합니다. 이 변경 $? 으로 는 네이티브 명령어가 0이 아닌 종료 코드가 있을 때만 로 $false 설정됩니다. 이 변화는 실험적 특징 PSNotApplyErrorActionToStderr.

  • 네이티브 명령어의 출력에 영향을 주 stderr 지 않게 만들기 $ErrorActionPreference (#13361)

    네이티브 명령어가 실패를 알리려는 의도 없이 쓰는 stderr 경우가 흔합니다. 이 변경 stderr 으로 인해 출력은 여전히 ErrorRecord 객체에 캡처되지만, ErrorRecord가 네이티브 명령어에서 나온 경우 런타임은 더 이상 적용되지 $ErrorActionPreference 않습니다.

  • -FromUnixTime Unix 시간 입력을 위해 on Get-Date (-UnixTimeSeconds#13084) (감사합니다)@aetos382!)

    이 매개변수는 -FromUnixTime 7.1-preview.2 단계에서 추가되었습니다. 매개변수는 데이터 타입에 더 잘 맞게 이름이 변경되었습니다. 이 매개변수는 1970년 1월 1일 0:00:00 이후로 초 단위로 정수 값을 가집니다.

    이 예시는 Unix 시간(1970-01-01 0:00:00 이후의 초 수)을 DateTime으로 변환합니다.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • 명시적으로 지정된 매개변수가 해시테이블 스플래팅에서 동일한 매개변수를 대체할 수 있도록 허용합니다 (#13162)

    이 변경으로 splatting에서 명명된 매개변수들은 매개변수 목록의 끝으로 이동되어, 명시적으로 지정된 모든 이름 있는 매개변수가 결합된 후에 바인딩됩니다. 간단한 함수의 매개변수 바인딩은 지정된 명명 매개변수를 찾을 수 없을 때 오류가 발생하지 않습니다. 알려지지 않은 이름 있는 매개변수는 단순 함수의 매개변수에 $args 묶여 있습니다. 스플랫을 인수 목록의 맨 끝으로 이동시키면 매개변수가 나타나 $args는 순서가 바뀝니다.

    다음은 그 예입니다.

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    이전 동작에서는 MyPath 가 인수 목록에서 세 번째 인자이기 때문에 묶 -Path 이지 않습니다. ## 그래서 결국 '$args'에 함께 끼워 넣게 돼요 Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    이 변경으로 인해 의 @hash 인항들은 인수 목록의 맨 끝으로 이동합니다. MyPath 는 리스트의 첫 번째 인자가 되므로 에 묶 -Path여 있습니다.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • 스위치 파라미터 -Qualifier 를 위치별 Split-Path 이 아닌 것으로 설정하세요 (#12960) (감사합니다) @yecril71pl!)

  • 작업 디렉터리를 지정되지 않은 경우를 위한 Start-Process 리터럴 경로로 해석하세요 (#11946) (감사합니다) @NoMoreFood!)

  • 웹 명령어에서 매개변수를 (#11701)처럼 -LiteralPath 작동하도록 만드 -OutFile 세요 (감사합니다)@iSazonov!)

  • 숫자 리터럴에 대한 BigInteger 문자열 매개변수 바인딩 수정 (#11634) (감사합니다) @vexx32!)

  • Windows Start-Process 에서는 현재 세션의 모든 환경 변수로 프로세스 환경을 생성하고, -UseNewEnvironment 새로운 기본 프로세스 환경을 생성합니다 (#10830) (감사합니다) @iSazonov!)

  • a를 대리인으로 변환할 ScriptBlock 때 결과를 PSObject 랩하지 마세요 (#10619)

    a ScriptBlock 가 C# 컨텍스트에서 사용할 위임자 타입으로 변환될 때, 결과를 a PSObject 로 감싸는 것은 불필요한 문제를 일으킵니다:

    • 값을 delegate return 타입 PSObject 으로 변환하면 본질적으로 언래핑됩니다. 그래서 그건 PSObject 불필요해요.
    • 대리자 반환 타입이 이면 objecta PSObject 로 감싸져 C# 코드에서 작업하기 어렵습니다.

    이 변경 후에는 반환된 객체가 기본 객체가 됩니다.