PowerShell 7.5의 새로운 기능
PowerShell 7.5.0에는 다음과 같은 기능, 업데이트 및 중대한 변경 사항이 포함되어 있습니다. PowerShell 7.5는 .NET 9.0.1 GA 릴리스를 기반으로 합니다.
전체 변경 목록은 GitHub 리포지토리의 CHANGELOG를 참조하세요.
호환성이 손상되는 변경
- 사용
-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.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!) - 인수 완료자
-Verb
Get-Verb
/ 추가Get-Command
및 리팩터링Get-Verb
(#20286) (감사합니다.@ArmaanMcleod) - (
-Verb
)에 대한Start-Process
인수 완료자 추가(감사합니다)@ArmaanMcleod) - , 및 명령에 대한
-Scope
인수 완료자 추가*-Variable
(*-Alias
)(감사합니다.*-PSDrive
@ArmaanMcleod) - 명령에 대한
-Module
Save-Help
/ 완료 추가Update-Help
(#20678)(감사합니다.@ArmaanMcleod)
새로운 cmdlet
- 추가
ConvertTo-CliXml
및ConvertFrom-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
추가AllowTrailingCommas
및Test-Json
옵션(#23817)(감사합니다.@ArmaanMcleod!) - Get-Help는 파이프라인 가능 특성이 있는
ValueFromRemainingArguments
매개 변수를 보고할 수 있습니다(#23871) - 형식
LineNumber
변경ulong
Select-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
파일이 실행 파일이 아닌 경우 처리setuid
sticky
수정(#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
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
PowerShell