다음을 통해 공유


PowerShell 7.5의 새로운 기능

PowerShell 7.5.4에는 다음과 같은 기능, 업데이트 및 호환성 문제를 일으키는 변경 사항이 포함됩니다. PowerShell 7.5.4는 .NET 9.0.306 릴리스를 기반으로 합니다.

전체 변경 목록은 GitHub 리포지토리의 CHANGELOG를 참조하세요. .NET 9에 대한 자세한 내용은 .NET 9의 새로운 기능

호환성이 손상되는 변경

  • 사용 -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.4에는 다음과 같은 업데이트된 모듈이 포함되어 있습니다.

  • Microsoft.PowerShell.PSResourceGet v1.1.1
  • 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 개선 사항

  • 구식 Out-GridView 사용을 사용자 지정 구현BinaryFormatter으로 대체하여 수정하십시오.
  • 작업 -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!)
  • 프로세스를 -NoNewWindow 시작할 때 표준 핸들을 명시적으로 설정(#25324)
  • 상속된 보호된 내부 인스턴스 멤버를 클래스 범위에서 액세스할 수 있도록 합니다. (#25547) (감사합니다. @mawosoft!)
  • 이전 유사 항목 제안을 제거하고 로컬 스크립트 파일 이름 제안 수정(#25330)
  • 메서드 수정 PSMethodInvocationConstraints.GetHashCode (#25306)(감사합니다. @crazyjncsu!)

엔진 개선 사항

  • 메서드 인수에 필요한 형식 변환이 수행된 후 .NET 메서드 호출 로깅으로 이동(#25357)
  • 이후 WldpCanExecuteFile AppLocker로 대체(#25305)
  • 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