PowerShell 7.5.4에는 다음과 같은 기능, 업데이트 및 호환성 문제를 일으키는 변경 사항이 포함됩니다. PowerShell 7.5.4는 .NET 9.0.306 릴리스를 기반으로 합니다.
전체 변경 목록은 GitHub 리포지토리의 CHANGELOG를 참조하세요. .NET 9에 대한 자세한 내용은 .NET 9의 새로운 기능
호환성이 손상되는 변경
- 사용
-OlderThan시기 및 날짜 범위에 대한-NewerThan수정Test-Path및PathType매개 변수(#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-CliXml및ConvertFrom-CliXmlcmdlet(#21063)(감사합니다. @ArmaanMcleod!)
웹 cmdlet 개선 사항
-
-PassThru및-Outfile함께 작동하도록 수정(#24086) -
OutFile속성 추가WebResponseObject(#24047) -
Invoke-WebRequest -OutFile -Verbose파일 이름 표시(#24041) - 지정되었지만
-Body그렇지 않은 경우ContentTypeWebCmdlet 수정(#23952)(감사합니다.@CarloToso!) - 지정된 경우
Invoke-WebRequest올바른 크기를 보고하도록 수정-Resume(#20207) (감사합니다.@LNKLEO!) - 앱이 올바르게 작동하도록 웹
WinFormCmdlet 수정(#20606)
기타 cmdlet 개선 사항
- 구식
Out-GridView사용을 사용자 지정 구현BinaryFormatter으로 대체하여 수정하십시오. - 작업
-NoRestart사용Register-PSSessionConfiguration(#23891) - cmdlet에
IgnoreComments추가AllowTrailingCommas및Test-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-Pathcmdlet 추가Convert-Path#20981(감사합니다.@ArmaanMcleod!) - 프로세스를
-NoNewWindow시작할 때 표준 핸들을 명시적으로 설정(#25324) - 상속된 보호된 내부 인스턴스 멤버를 클래스 범위에서 액세스할 수 있도록 합니다. (#25547) (감사합니다. @mawosoft!)
- 이전 유사 항목 제안을 제거하고 로컬 스크립트 파일 이름 제안 수정(#25330)
- 메서드 수정
PSMethodInvocationConstraints.GetHashCode(#25306)(감사합니다. @crazyjncsu!)
엔진 개선 사항
- 메서드 인수에 필요한 형식 변환이 수행된 후 .NET 메서드 호출 로깅으로 이동(#25357)
- 이후
WldpCanExecuteFileAppLocker로 대체(#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에는 다음과 같은 실험적 기능이 포함되어 있습니다.
- PSRedirectToVariable - 변수로 리디렉션 허용(#20381)
- PSNativeWindowsTildeExpansion - Windows 네이티브 실행 파일에 대한 물결표 확장 추가(#20402) (감사합니다) @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json는 이제 큰 열거형을 숫자로 처리합니다(#20999)(감사합니다.)@jborean93!)
성능 향상
PowerShell 7.5-rc.1에는 개체 배열에 대한
다음 예제에서는 배열에 요소를 추가하는 다양한 메서드에 대한 성능을 측정합니다.
$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
PowerShell