다음을 통해 공유


PowerShell 7.5의 새로운 기능

PowerShell 7.5.0에는 다음과 같은 기능, 업데이트 및 중대한 변경 사항이 포함되어 있습니다. PowerShell 7.5는 .NET 9.0.1 GA 릴리스를 기반으로 합니다.

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

호환성이 손상되는 변경

  • 사용 -OlderThan 시기 및 날짜 범위에 대한 -NewerThan 수정 Test-PathPathType 매개 변수(#20942)(감사합니다.@ArmaanMcleod!)
    • 함께 지정하면 이전에 -OlderThan 무시됩니다.
  • 기본값을 2로 변경 New-FileCatalog -CatalogVersion (#20428)(감사합니다. @ThomasNieto!)
  • 제한된 원격 세션에서 네트워크 위치에서 도움말 가져오기 차단(#20593)
  • 이제 Windows 설치 관리자는 사용된 설치 옵션을 기억하고 이를 사용하여 다음 설치 옵션(#20420)을 초기화합니다(감사합니다.)@reduckted!)
  • ConvertTo-Json 이제 숫자로 serialize됩니다 BigInteger (#21000)(감사합니다.) @jborean93!)

업데이트된 모듈

PowerShell 7.5.0에는 다음과 같은 업데이트된 모듈이 포함되어 있습니다.

  • Microsoft.PowerShell.PSResourceGet v1.1.0
  • PSReadLine v2.3.6

탭 완성 개선

탭 완성을 개선하기 위해 모든 작업에 대한 @ArmaanMcleod 및 다른 사람에게 많은 감사드립니다.

  • 안전 식에서 해시 테이블 키-값을 검색할 수 없는 경우 형식 유추로 대체(#21184)(감사합니다.@MartinGC94!)
  • (#21223)에 대한 $_ 형식 유추를 수행할 때 회귀 수정(감사)@MartinGC94!)
  • 탭 완성을 사용하여 ~ Windows로 확장$home(#21529)
  • 매개 변수 이름 및 클래스 멤버를 선언할 때 완료되지 않음(#21182)(감사합니다. @MartinGC94!)
  • 탭에서 형식 이름을 완료할 때 파일 완성으로 대체 방지(#20084)(감사합니다.@MartinGC94)
  • 인수 완료자 -Version 추가(#20554Set-StrictMode감사합니다.@ArmaanMcleod!)
  • 인수 완료자-VerbGet-Verb/ 추가 Get-Command 및 리팩터링 Get-Verb (#20286) (감사합니다.@ArmaanMcleod)
  • (-Verb)에 대한 Start-Process 인수 완료자 추가(감사합니다)@ArmaanMcleod)
  • , 및 명령에 대한 -Scope인수 완료자 추가*-Variable(*-Alias)(감사합니다. *-PSDrive@ArmaanMcleod)
  • 명령에 대한 -ModuleSave-Help/ 완료 추가Update-Help(#20678)(감사합니다.@ArmaanMcleod)

새로운 cmdlet

  • 추가 ConvertTo-CliXmlConvertFrom-CliXml cmdlet(#21063)(감사합니다. @ArmaanMcleod!)

웹 cmdlet 개선 사항

  • -PassThru-Outfile 함께 작동하도록 수정(#24086)
  • OutFile 속성 추가 WebResponseObject (#24047)
  • Invoke-WebRequest -OutFile -Verbose 파일 이름 표시(#24041)
  • 지정되었지만 -Body 그렇지 않은 경우 ContentType WebCmdlet 수정(#23952)(감사합니다.@CarloToso!)
  • 지정된 경우 Invoke-WebRequest 올바른 크기를 보고하도록 수정-Resume(#20207) (감사합니다.@LNKLEO!)
  • 앱이 올바르게 작동하도록 웹 WinForm Cmdlet 수정(#20606)

기타 cmdlet 개선 사항

  • 작업 -NoRestart 사용Register-PSSessionConfiguration(#23891)
  • cmdlet에 IgnoreComments 추가 AllowTrailingCommasTest-Json 옵션(#23817)(감사합니다.@ArmaanMcleod!)
  • Get-Help는 파이프라인 가능 특성이 있는 ValueFromRemainingArguments 매개 변수를 보고할 수 있습니다(#23871)
  • 형식 LineNumber 변경 ulongSelect-String (#24075) (감사합니다. @Snowman-25!)
  • Get-Process: (-IncludeUserName)에 대한 관리자 요구 사항 제거(감사)@jborean93!)
  • 잘못된 경로 및 파일 이름 문자를 확인하는 수정 Test-Path -IsValid (#21358)
  • RecommendedAction 오류 보고에 추가ConciseView(#20826) (감사합니다.@JustinGrote!)
  • cmdlet에 대한 Remove-Item 진행률 표시줄 추가(#20778)(감사합니다. @ArmaanMcleod!)
  • .NET 8 변경으로 인한 수정 Test-Connection (#20369)
  • 범주를 포함하도록 종료하지 않는 오류 메시지 수정 Get-Service (#20276)
  • (#20014)에 매개 변수 추가 -Empty-InputObject 매개 변수 New-Guid (감사)@CarloToso!)
  • 명령에 대한 매개 변수 r 에 별칭 -Recurse 추가(#20100Get-ChildItem감사합니다.@kilasuit!)
  • LP 여전히 누락된 함수의 별칭에 추가LiteralPath(#20820)
  • (#19896)에 Import-LocalizedData암시적 지역화 대체 추가(감사)@chrisdent-de!)
  • 반환된 매개 변수의 도움말 콘텐츠 서식을 지정할 때 표시되는 속성에 Aliases 추가Get-Help(#20994)
  • HelpUri 에 추가Remove-Service(#20476)
  • SCCM 공급자에 대한 완료 충돌 수정(#20815, #20919, #20915) (감사합니다. @MartinGC94!)
  • 함께 사용될 때 Get-Content-Tail 0 회귀 -Wait 수정(#20734)(감사합니다.@CarloToso!)
  • 반환 Start-Process -PassThru 된 개체에 대해 속성에 ExitCode 액세스할 수 있도록 수정Process(#20749)(감사합니다.@CodeCyclone!)
  • 출력에 현재 문화권을 사용하도록 수정 Group-Object (#20608)
  • 보간된 문자열을 사용하여 출력 수정 Group-Object (#20745)(감사합니다. @mawosoft!)
  • 네트워크 렌더링 DisplayRoot 수정(PSDrive)
  • 모든 파일이 복사될 때만 완료된 상태로 표시되도록 진행률 수정 Copy-Item (#20517)
  • UNC 경로 완료 회귀 수정(#20419) (감사합니다. @MartinGC94!)
  • 잘못된 -ExecutionPolicy 값이 전달되면 pwsh 오류 보고(#20460)
  • WinGetCommandNotFound 및 CompletionPredictor 모듈을 추가하여 사용량 추적(#21040)
  • DateKind 매개 변수를 (ConvertFrom-Json)에 추가(감사합니다).@jborean93!)
  • 새 항목의 OutputType에 DirectoryInfo 추가(#21126)(감사합니다.@MartinGC94!)
  • 배열 값의 serialization 수정 Get-Error (#21085) (감사합니다. @jborean93!)
  • UNC 경로를 사용할 수 있도록 수정 Test-ModuleManifest (#24115)
  • 먼저 데이터를 수집하는 대신 파이프라인에 즉시 쓰기 수정Get-TypeData(#24236) (감사합니다.@MartinGC94)
  • 와일드카드 숨겨진 파일을 지원하기 위해 -Force 매개 변수 및 Resolve-Path cmdlet 추가 Convert-Path #20981(감사합니다.@ArmaanMcleod!)

엔진 개선 사항

  • ANSI 오류 색(#24065)을 명시적으로 시작 및 중지(감사) @JustinGrote!)
  • 제네릭 메서드의 .NET 오버로드 정의 개선(#21326) (감사합니다. @jborean93!)
  • += 개체 배열인 경우 컬렉션에 대한 작업 최적화(#23901)(감사합니다.@jborean93!)
  • 모듈을 가져올 때 특정 태그를 확인하는 원격 분석 추가(#20371)
  • 모듈 로드 원격 분석 허용 목록 추가 PSAdapter 및 추가(ConsoleGuiTools)
  • Winget 모듈을 추가하여 사용량 추적(#21040)
  • WDAC ETW 이벤트를 로깅할 때 파일 이름이 null이 아닌지 확인(#20910)(감사합니다.@jborean93!)
  • WDAC 로깅 기능에서 도입된 4가지 회귀 수정(#20913)
  • 리디렉션되지 않을 때 입력, 출력 및 오류 핸들을 설정하지 않은 상태로 둡니다(#20853)
  • 일반적인 매개 변수에서 작동하도록 암시적 원격 프록시 cmdlet 수정(#20367)
  • 모듈을 찾을 수 없는 경우 오류 메시지에 모듈 버전 포함(#20144)(감사합니다.@ArmaanMcleod!)
  • unixmode 파일이 실행 파일이 아닌 경우 처리 setuidsticky 수정(#20366)
  • 어셈블리 경로를 생성할 때 Path.Combine을 사용하도록 어셈블리 사용 수정(#21169)
  • 잘못된 네임스페이스 선언을 방지하기 위해 의미 체계 검사 중에 네임스페이스를 사용하는 값의 유효성을 검사합니다(#21162)
  • PATH 앞에 추가할 $PSHome 때 전역 도구 특별히 처리(#24228)

실험적 기능

다음 실험적 기능은 PowerShell 7.5-rc.1의 일반 기능으로 변환되었습니다.

PowerShell 7.5-rc.1에는 다음과 같은 실험적 기능이 포함되어 있습니다.

성능 향상

PowerShell 7.5-rc.1에는 개체 배열에 대한 작업의 성능을 향상시키는 PR#23901 포함되었습니다.

다음 예제에서는 배열에 요소를 추가하는 다양한 메서드에 대한 성능을 측정합니다.

$tests = @{
    'Direct Assignment' = {
        param($count)

    $result = foreach($i in 1..$count) {
            $i
        }
    }
    'List<T>.Add(T)' = {
        param($count)

        $result = [Collections.Generic.List[int]]::new()
        foreach($i in 1..$count) {
            $result.Add($i)
        }
    }
    'Array+= Operator' = {
        param($count)

        $result = @()
        foreach($i in 1..$count) {
            $result += $i
        }
    }
}

5kb, 10kb | ForEach-Object {
    $groupResult = foreach($test in $tests.GetEnumerator()) {
        $ms = (Measure-Command { & $test.Value -Count $_ }).TotalMilliseconds

[pscustomobject]@{
            CollectionSize    = $_
            Test              = $test.Key
            TotalMilliseconds = [math]::Round($ms, 2)
        }

[GC]::Collect()
        [GC]::WaitForPendingFinalizers()
    }

$groupResult = $groupResult | Sort-Object TotalMilliseconds
    $groupResult | Select-Object *, @{
        Name       = 'RelativeSpeed'
        Expression = {
            $relativeSpeed = $_.TotalMilliseconds / $groupResult[0].TotalMilliseconds
            $speed = [math]::Round($relativeSpeed, 2).ToString() + 'x'
            if ($speed -eq '1x') { $speed } else { $speed + ' slower' }
        }
    } | Format-Table -AutoSize
}

PowerShell 7.4.6에서 스크립트를 실행하면 += 연산자를 사용하는 것이 가장 느린 메서드임을 알 수 있습니다.

CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
          5120 Direct Assignment                4.17 1x
          5120 List<T>.Add(T)                  90.79 21.77x slower
          5120 Array+= Operator               342.58 82.15x slower


CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
         10240 Direct Assignment                0.64 1x
         10240 List<T>.Add(T)                 184.10 287.66x slower
         10240 Array+= Operator              1668.13 2606.45x slower

PowerShell 7.5-rc.1에서 스크립트를 실행하면 += 연산자를 사용하는 것이 PowerShell 7.4.6보다 훨씬 빠릅니다. 이제 List<T>.Add(T) 메서드를 사용하는 것보다 더 빠릅니다.

CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
          5120 Direct Assignment                4.71 1x
          5120 Array+= Operator                40.42 8.58x slower
          5120 List<T>.Add(T)                  92.17 19.57x slower


CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
         10240 Direct Assignment                1.76 1x
         10240 Array+= Operator               104.73 59.51x slower
         10240 List<T>.Add(T)                 173.00 98.3x slower