Windows PowerShell 5.1과 PowerShell 7.x의 차이점
Windows PowerShell 5.1은 .NET Framework v4.5를 기반으로 빌드됩니다. PowerShell 6.0이 릴리스되면서 PowerShell은 .NET Core 2.0을 기반으로 하는 오픈 소스 프로젝트가 되었습니다. .NET Framework에서 .NET Core로 이동하면 PowerShell이 플랫폼 간 솔루션이 될 수 있습니다. PowerShell은 Windows, macOS 및 Linux에서 실행됩니다.
Windows PowerShell과 PowerShell 간의 PowerShell 언어에는 몇 가지 차이점이 있습니다. 가장 눈에 띄는 차이점은 Windows와 비 Windows 플랫폼 간 PowerShell cmdlet의 가용성 및 동작과 .NET Framework와 .NET Core 간 차이점에서 비롯된 변경 사항에서 확인할 수 있습니다.
이 문서에서는 Windows PowerShell과 현재 버전의 PowerShell 간의 주요 차이점과 호환성이 손상되는 변경 내용을 요약합니다. 이 요약에는 추가된 새로운 기능 또는 cmdlet이 포함되지 않습니다. 또한 이 문서에서는 버전 간에 변경된 내용을 설명하지 않습니다. 이 문서의 목표는 PowerShell의 현재 상태와 Windows PowerShell과 어떻게 다른지를 제시하는 것입니다. 버전 간 변경 사항 및 새로운 기능 추가에 대한 자세한 내용은 각 버전의 새로운 기능 문서를 참조하세요.
- PowerShell 7.5의 새로운 기능
- PowerShell 7.4의 새로운 기능
- PowerShell 7.3의 새로운 기능
- PowerShell 7.2의 새로운 기능
- PowerShell 7.1의 새로운 기능
- PowerShell 7.0의 새로운 기능
- PowerShell 6.x의 새로운 기능
.NET Framework과 .NET Core 비교
Linux 및 macOS의 PowerShell은 Microsoft Windows의 전체 .NET Framework 하위 집합인 .NET Core를 사용합니다. 이는 PowerShell이 기본 프레임워크 형식 및 메서드에 직접 액세스할 수 있기 때문에 중요합니다. 따라서 Windows에서 실행되는 스크립트는 프레임워크의 차이로 인해 비 Windows 플랫폼에서 실행되지 않을 수 있습니다. .NET Core의 변경 내용에 대한 자세한 내용은 .NET Framework에서 .NET Core로 마이그레이션하기 위한 주요 변경 내용을 참조 하세요.
PowerShell의 각 새 릴리스는 최신 버전의 .NET을 기반으로 합니다. PowerShell에 영향을 주는 .NET의 호환성이 손상되는 변경이 있을 수 있습니다.
- PowerShell 7.5 - .NET 9.0 기반
- PowerShell 7.4 - .NET 8.0 기반
- PowerShell 7.3 - .NET 7.0 기반
- PowerShell 7.2(LTS-현재) - .NET 6.0(LTS-현재) 기반
- PowerShell 7.1 - .NET 5.0 기반
- PowerShell 7.0(LTS) - .NET Core 3.1(LTS) 기반
- PowerShell 6.2 - .NET Core 2.1 기반
- PowerShell 6.1 - .NET Core 2.1 기반
- PowerShell 6.0 - .NET Core 2.0 기반
.NET Standard 2.0이 도입되면서 PowerShell은 수정 없이 기존의 많은 Windows PowerShell 모듈을 로드할 수 있습니다. 또한 PowerShell 7에는 여전히 전체 프레임워크가 필요한 Windows PowerShell 모듈을 사용할 수 있는 Windows PowerShell 호환성 기능이 포함되어 있습니다.
자세한 내용은 다음을 참조하십시오.
.NET 메서드 변경 사항에 유의하세요.
.NET 메서드 변경 내용은 PowerShell과 관련이 없지만, 특히 .NET 메서드를 직접 호출하는 경우 스크립트에 영향을 줄 수 있습니다. 또한 생성자에 대한 새 오버로드가 있을 수 있습니다. 이는 개체를 만드는 New-Object
방법 또는 [type]::new()
메서드에 영향을 미칠 수 있습니다.
예를 들어 .NET은 .NET Framework 4.5에서 사용할 수 없는 메서드에 오버로드 [System.String]::Split()
를 추가했습니다. 다음 목록에서는 Windows PowerShell 5.1에서 사용할 수 있는 메서드에 Split()
대한 오버로드를 보여 줍니다.
PS> "".Split
OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
다음 목록에서는 PowerShell 7에서 사용할 수 있는 메서드에 Split()
대한 오버로드를 보여 줍니다.
"".Split
OverloadDefinitions
-------------------
string[] Split(char separator, System.StringSplitOptions options)
string[] Split(char separator, int count, System.StringSplitOptions options)
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string separator, System.StringSplitOptions options)
string[] Split(string separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
Windows PowerShell 5.1에서는 문자 배열(char[]
)을 메서드에 Split()
전달할 수 있습니다 string
. 이 메서드는 배열에서 문자가 발생할 때마다 대상 문자열을 분할합니다. 다음 명령은 Windows PowerShell 5.1에서 대상 문자열을 분할하지만 PowerShell 7에서는 분할하지 않습니다.
# PowerShell 7 example
"1111p2222q3333".Split('pq')
1111p2222q3333
올바른 오버로드에 바인딩하려면 문자열을 문자 배열에 형식 캐스팅해야 합니다.
# PowerShell 7 example
"1111p2222q3333".Split([char[]]'pq')
1111
2222
3333
모듈은 더 이상 PowerShell과 함께 제공되지 않습니다.
다양한 호환성을 위해 다음 모듈은 더 이상 PowerShell에 포함되지 않습니다.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
PowerShell 워크플로
PowerShell는 Windows WF(Workflow Foundation)을 토대로 빌드되는 Windows PowerShell의 기능으로, 장기 실행 또는 병렬 처리 작업을 위한 강력한 Runbook을 만들 수 있습니다.
.NET Core에는 Windows Workflow Foundation 지원이 없으므로 PowerShell에서 PowerShell 워크플로를 제거했습니다.
나중에 PowerShell 워크플로 없이 PowerShell 언어에서 네이티브 병렬 처리/동시성을 사용하도록 설정하려고 합니다.
OS를 다시 시작한 후 검사포인트를 사용하여 스크립트를 다시 시작해야 하는 경우 작업 스케줄러를 사용하여 OS 시작 시 스크립트를 실행하는 것이 좋지만 스크립트는 자체 상태를 기본(예: 파일에 유지)해야 합니다.
PowerShell에서 제거된 Cmdlet
PowerShell에 포함된 모듈의 경우 다양한 호환성 이유 또는 지원되지 않는 API 사용을 위해 PowerShell에서 다음 cmdlet이 제거되었습니다.
CimCmdlets
Export-BinaryMiLog
Microsoft.PowerShell.Core
Add-PSSnapin
Export-Console
Get-PSSnapin
Remove-PSSnapin
Resume-Job
Suspend-Job
Microsoft.PowerShell.Diagnostics
Export-Counter
Import-Counter
Microsoft.PowerShell.Management
Add-Computer
Checkpoint-Computer
Clear-EventLog
Complete-Transaction
Disable-ComputerRestore
Enable-ComputerRestore
Get-ComputerRestorePoint
Get-ControlPanelItem
Get-EventLog
Get-Transaction
Get-WmiObject
Invoke-WmiMethod
Limit-EventLog
New-EventLog
New-WebServiceProxy
Register-WmiEvent
Remove-Computer
Remove-EventLog
Remove-WmiObject
Reset-ComputerMachinePassword
Restore-Computer
Set-WmiInstance
Show-ControlPanelItem
Show-EventLog
Start-Transaction
Test-ComputerSecureChannel
Undo-Transaction
Use-Transaction
Write-EventLog
Microsoft.PowerShell.Utility
Convert-String
ConvertFrom-String
PSDesiredStateConfiguration
Disable-DscDebug
Enable-DscDebug
Get-DscConfiguration
Get-DscConfigurationStatus
Get-DscLocalConfigurationManager
Publish-DscConfiguration
Remove-DscConfigurationDocument
Restore-DscConfiguration
Set-DscLocalConfigurationManager
Start-DscConfiguration
Stop-DscConfiguration
Test-DscConfiguration
Update-DscConfiguration
WMI v1 cmdlet
다음 WMI v1 cmdlet이 PowerShell에서 제거되었습니다.
Register-WmiEvent
Set-WmiInstance
Invoke-WmiMethod
Get-WmiObject
Remove-WmiObject
CimCmdlets 모듈(일명 WMI v2) cmdlet은 동일한 기능을 수행하고 새 기능과 다시 디자인된 구문을 제공합니다.
New-WebServiceProxy
cmdlet 제거됨
.NET Core는 SOAP 프로토콜을 사용하기 위한 서비스를 제공하는 Windows Communication Framework를 지원하지 않습니다. 이 cmdlet은 SOAP가 필요하기 때문에 제거되었습니다.
*-Transaction
제거된 cmdlet
이러한 cmdlet은 사용량이 매우 제한적입니다. 지원을 중단하기 위해 내린 결정입니다.
Complete-Transaction
Get-Transaction
Start-Transaction
Undo-Transaction
Use-Transaction
*-EventLog
Cmdlet
지원되지 않는 API *-EventLog
를 사용하므로 powerShell에서 cmdlet이 제거되었습니다.
Get-WinEvent
및 New-WinEvent
는 Windows에서 이벤트를 가져오고 만드는 데 제공됩니다.
WPF(Windows Presentation Framework)를 사용하는 Cmdlet
.NET Core 3.1은 WPF에 대한 지원을 추가했기 때문에 PowerShell 7.0 릴리스는 다음과 같은 Windows 관련 기능을 복원했습니다.
Show-Command
cmdletOut-GridView
cmdlet- 의 ShowWindow 매개 변수
Get-Help
PowerShell DSC(Desired State Configuration) 변경 내용
Invoke-DscResource
는 PowerShell 7.0에서 실험적 기능으로 복원되었습니다.
PowerShell 7.2부터 PSDesiredStateConfiguration 모듈이 PowerShell에서 제거되어 PowerShell 갤러리 게시되었습니다. 자세한 내용은 PowerShell 팀 블로그의 공지 사항을 참조하세요.
PowerShell 실행 파일 변경 내용
이름이 로 변경됨 powershell.exe
pwsh.exe
PowerShell의 이진 이름이 .로 powershell(.exe)
pwsh(.exe)
변경되었습니다. 이 변경은 사용자가 컴퓨터에서 PowerShell을 실행하고 Windows PowerShell 및 PowerShell의 병렬 설치를 지원하는 결정적인 방법을 제공합니다.
powershell.exe
에서 pwsh(.exe)
로의 추가 변경 사항:
- 첫 번째 위치 매개 변수를 .로
-Command
-File
변경했습니다. 이 변경은 비 Windows 플랫폼의#!
비 PowerShell 셸에서 실행되는 PowerShell 스크립트의 사용(예: shebang)을 수정합니다. 또한 지정하거나pwsh fooScript
지정하지 않고 명령을 실행할 수 있음을 의미합니다.pwsh foo.ps1
-File
그러나 이 변경을 수행하려면 명시적으로 지정-c
하거나-Command
같은pwsh.exe -Command Get-Command
명령을 실행하려고 할 때 필요합니다. pwsh
는 대화형 셸을-i
나타내기 위해 (또는-Interactive
) 스위치를 허용합니다. 이렇게 하면 PowerShell을 Unix 플랫폼에서 기본 셸로 사용할 수 있습니다.- 매개 변수 및
-PSConsoleFile
.에서pwsh.exe
제거된 매개 변수-ImportSystemModules
- 다른 네이티브 도구에 맞게 변경되고
pwsh -version
기본 제공되는 도움말pwsh.exe
입니다. -File
및-Command
에 대한 잘못된 인수 오류 메시지 및 Unix 표준과 일치하는 종료 코드- Windows에
-WindowStyle
매개 변수가 추가되었습니다. 마찬가지로, 비 Windows 플랫폼의 패키지 기반 설치 업데이트는 현재 위치 업데이트입니다.
단축된 이름은 Windows가 아닌 플랫폼의 셸 이름 지정과도 일치합니다.
bool 매개 변수를 사용하여 PowerShell 스크립트 실행 지원
이전에는 pwsh.exe
를 통해 -File
을 사용하여 PowerShell 스크립트를 실행할 경우 $true
/$false
를 매개 변수 값으로 전달할 수 없었습니다. 매개 변수에 대한 구문 분석된 값으로 $true
/$false
지원이 추가되었습니다. 스위치 값도 지원됩니다.
Windows PowerShell과의 이전 버전과의 호환성 향상
Windows의 경우 새 스위치 매개 변수 UseWindowsPowerShell이 Import-Module
에 추가됩니다. 이 스위치는 로컬 Windows PowerShell 프로세스를 사용하여 해당 모듈에 포함된 모든 cmdlet을 암시적으로 실행하는 프록시 모듈을 PowerShell 7에 만듭니다. 자세한 내용은 Import-Module을 참조 하세요.
PowerShell 7.0에서 작동하는 Microsoft 모듈에 대한 자세한 내용은 모듈 호환성 테이블을 참조 하세요.
Windows용 Microsoft 업데이트 지원
PowerShell 7.2에서는 Microsoft 업데이트에 대한 지원이 추가되었습니다. 이 기능을 사용하도록 설정하면 비즈니스용 Windows 업데이트 또는 WSUS, SCCM, 설정의 대화형 WU 대화 상자 관계없이 기존 WU(Windows 업데이트) 관리 흐름에서 최신 PowerShell 7 업데이트를 가져올 수 있습니다.
PowerShell 7.2 MSI 패키지에는 다음과 같은 명령줄 옵션이 포함되어 있습니다.
USE_MU
- 이 속성에는 다음 두 가지 가능한 값이 있습니다.1
(기본값) - Microsoft 업데이트 또는 WSUS를 통해 업데이트 옵트인0
- Microsoft 업데이트 또는 WSUS를 통한 업데이트를 옵트인하지 않습니다.
ENABLE_MU
1
(기본값) - Microsoft 업데이트 자동 업데이트 또는 Windows 업데이트0
- 자동 업데이트 또는 Windows 업데이트 Microsoft 업데이트 사용을 옵트인하지 마세요.
엔진 변경 내용
PowerShell을 기본 Unix 셸로 지원
Unix에서는 셸이 대화형 셸을 수락 -i
하는 규칙이며, 많은 도구에서 이 동작(script
예: PowerShell을 기본 셸로 설정할 때)을 기대하고 스위치를 사용하여 셸을 -i
호출합니다. 이 변경은 이전에 일치-inputformat
하기 위해 짧은 손으로 사용할 수 있다는 점을 -i
깨고 있습니다. 이제는 일치해야 -in
합니다.
사용자 지정 스냅인
PowerShell 스냅인은 PowerShell 커뮤니티에서 널리 사용되지 않는 PowerShell 모듈의 선행 작업입니다.
스냅인을 지원하는 복잡성과 커뮤니티에서의 사용 부족으로 인해 PowerShell에서 사용자 지정 스냅인을 더 이상 지원하지 않습니다.
실험적 기능 플래그
PowerShell 6.2에서 실험적 기능에 대한 지원을 사용하도록 설정했습니다. 이를 통해 PowerShell 개발자는 디자인이 완료되기 전에 새 기능을 제공하고 피드백을 받을 수 있습니다. 이렇게 하면 디자인이 진화함에 따라 호환성이 손상되는 변경을 방지할 수 있습니다.
사용 가능한 실험적 기능 목록을 가져오는 데 사용합니다 Get-ExperimentalFeature
. 및 .를 사용하여 이러한 기능을 Enable-ExperimentalFeature
Disable-ExperimentalFeature
사용하거나 사용하지 않도록 설정할 수 있습니다.
GAC에서 로드하기 전에 모듈 기본 경로에서 어셈블리 로드
이전에는 이진 모듈에 GAC에 모듈 어셈블리가 있을 때 모듈 기본 경로에서 로드하기 전에 GAC에서 어셈블리를 로드했습니다.
값 형식 요소 형식이 있는 컬렉션에 대해 null 요소 검사 건너뜁니다.
매개 변수 및 ValidateNotNull
ValidateNotNullOrEmpty
특성의 Mandatory
경우 컬렉션의 요소 형식이 값 형식인 경우 null 요소 검사 건너뜁니다.
ParenExpression, SubExpression 및 ArrayExpression용으로 $?
유지
이 PR은 자동으로 true가 되지 않도록 하위 파일, (...)
하위 식 $(...)
및 배열 식을 컴파일하는 $?
방식을 변경합니다@()
. 대신 값 $?
은 실행된 파이프라인 또는 문의 결과에 따라 달라집니다.
$?
네이티브 명령이 $false
에 쓸 때 수정되지 않음stderr
네이티브 명령을 통해 stderr
에 쓸 때 $?
는 $false
로 설정되지 않습니다. 실패를 표시하지 않고 네이티브 명령이 stderr
에 쓰는 것은 일반적입니다. $?
는 네이티브 명령에 0이 아닌 종료 코드가 있는 경우에만 설정 $false
됩니다.
네이 $ErrorActionPreference
티브 명령의 출력에 영향을 stderr
미치지 않음
실패를 표시하지 않고 네이티브 명령이 stderr
에 쓰는 것은 일반적입니다. 이 변경에 따라, stderr
출력이 ErrorRecord 개체에서 계속 캡처되지만, 네이티브 명령에서 ErrorRecord가 제공되는 경우 런타임이 더 이상 $ErrorActionPreference
에 적용되지 않습니다.
ASCII 대신 인코딩을 사용하도록 UTF-8 NoBOM
변경 $OutputEncoding
이전 인코딩 ASCII(7비트)는 경우에 따라 출력을 잘못 변경합니다. 기본값을 설정하면 UTF-8 NoBOM
대부분의 도구 및 운영 체제에서 지원하는 인코딩을 사용하여 유니코드 출력이 유지됩니다.
형식이 될 매개 변수 -Encoding
를 사용하여 cmdlet 통합 System.Text.Encoding
-Encoding
파일 시스템 공급자 cmdlet에서 값 Byte
이 제거되었습니다. 이제 새 매개 변수 -AsByteStream
인 바이트 스트림이 입력으로 필요하거나 출력이 바이트 스트림임을 지정하는 데 사용됩니다.
비 Windows 플랫폼에서 인코딩 UTF8NoBOM
변경 New-ModuleManifest
New-ModuleManifest
이전에는 BOM을 사용하여 UTF-16에서 매니페스트를 만들어 Linux 도구에 대한 문제를 만들었습니다psd1
. 이 호환성이 손상되는 변경은 비 Windows 플랫폼에서 UTF(BOM 없음)로 인코딩 New-ModuleManifest
을 변경합니다.
대부분의 기본 별칭에서 제거 AllScope
범위 만들기 AllScope
속도를 높이기 위해 대부분의 기본 별칭에서 제거되었습니다. 자주 사용하는 몇 가지 별칭에 대해서는 조회 속도가 더 빠른 AllScope
가 유지되었습니다.
-Verbose
더 -Debug
이상 재정의하지 않음 $ErrorActionPreference
이전에는 지정되었거나 -Debug
지정된 $ErrorActionPreference
경우 -Verbose
. 이 변경으로 -Debug
더 -Verbose
이상 .의 $ErrorActionPreference
동작에 영향을 주지 않습니다.
또한 매개 변수는 -Debug
Inquire 대신 계속으로 설정 $DebugPreference
됩니다.
$PSCulture
세션 내 문화권 변경 내용을 일관되게 반영
Windows PowerShell에서는 현재 문화권 값이 캐시되므로 세션 시작 후 문화권과 동기화되지 않는 값이 변경될 수 있습니다. 이 캐싱 동작은 PowerShell 코어에서 수정되었습니다.
명시적으로 지정된 명명된 매개 변수가 해시 테이블 스플래팅에서 동일한 매개 변수를 대체하도록 허용
이 변경으로 스플래팅의 명명된 매개 변수는 명시적으로 지정된 모든 명명된 매개 변수가 바인딩된 후에 바인딩되도록 매개 변수 목록의 끝으로 이동됩니다. 지정한 명명된 매개 변수를 찾을 수 없는 경우 단순 함수에 대한 매개 변수 바인딩은 오류를 throw하지 않습니다. 알 수 없는 명명된 매개 변수는 간단한 함수의 $args
매개 변수에 바인딩됩니다. 인수 목록의 끝으로 스플래팅을 이동하면 매개 변수가 표시되는 순서가 변경됩니다 $args
.
예시:
function SimpleTest {
param(
$Name,
$Path
)
"Name: $Name; Path: $Path; Args: $args"
}
이전 동작에서 MyPath는 인수 목록에서 세 번째 인수이므로 -Path
에 바인딩되지 않습니다. ## 따라서 결국 Blah = "World"
와 함께 ‘$args’에 채워집니다.
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
언어 변경 내용
Null 병합 연산자 ??
null 병합 연산 ??
자는 null이 아닌 경우 왼쪽 피연산자의 값을 반환합니다.
그렇지 않으면 오른쪽 피연산자를 계산하고 그 결과를 반환합니다. 왼쪽 피연산자가 null이 아닌 것으로 평가되면 ??
연산자는 오른쪽 피연산자를 평가하지 않습니다.
$x = $null
$x ?? 100
100
다음 예제에서는 오른쪽 피연산자가 평가되지 않습니다.
[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020
Null 병합 대입 연산자 ??=
Null 병합 할당 연산자 ??=
는 왼쪽 피연산자가 null이 아닌 것으로 평가되는 경우에만 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다. 왼쪽 피연산자가 null이 아닌 것으로 평가되면 ??=
연산자는 오른쪽 피연산자를 평가하지 않습니다.
$x = $null
$x ??= 100
$x
100
다음 예제에서는 오른쪽 피연산자가 평가되지 않습니다.
[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020
Null 조건 연산자
참고 항목
이 기능은 PowerShell 7.1에서 실험적 기능에서 일반 지원으로 이동되었습니다.
Null 조건 연산자는 해당 피연산자가 null이 아닌 것으로 평가되는 경우에만 멤버 액세스 ?.
또는 요소 액세스 ?[]
, 작업을 해당 피연산자에 적용할 수 있습니다. 그렇지 않으면 null을 반환합니다.
PowerShell을 사용하면 ?
를 변수 이름에 포함할 수 있으므로 이러한 연산자를 사용하려면 변수 이름의 공식적인 사양이 필요합니다. 따라서 변수 이름의 일부인 경우와 ?
같은 ${a}
변수 이름을 ${a?}
사용해야 {}
합니다.
다음 예제에서는 PropName 값이 반환됩니다.
$a = @{ PropName = 100 }
${a}?.PropName
100
다음 예제에서는 멤버 이름 PropName에 액세스하지 않고 null을 반환합니다.
$a = $null
${a}?.PropName
이와 마찬가지로 요소 값이 반환됩니다.
$a = 1..10
${a}?[0]
1
피연산자가 null이면 요소에 액세스하지 않고 null이 반환됩니다.
$a = $null
${a}?[0]
참고 항목
변수 이름 구문 ${<name>}
을 $()
하위 식 연산자와 혼동해서는 안 됩니다. 자세한 내용은 about_Variables 변수 이름 섹션을 참조하세요.
작업 제어에 대한 연산자가 추가됨 &
파이프라인 끝에 &
을 배치하면 파이프라인이 PowerShell 작업으로 실행됩니다. 파이프라인이 백그라운드로 설정되면 작업 개체가 반환됩니다. 일단 파이프라인이 작업으로 실행되면 모든 표준 *-Job
cmdlet을 사용하여 작업을 관리할 수 있습니다. 파이프라인에서 사용되는 변수(프로세스별 변수 무시)는 작업에 자동으로 복사되므로 Copy-Item $foo $bar &
작동합니다. 또한 작업은 사용자의 홈 디렉터리 대신 현재 디렉터리에서 실행됩니다.
PSCustomObject
의 새 메서드/속성
새로운 메서드와 속성이 PSCustomObject
에 추가되었습니다. PSCustomObject
이제 다른 개체와 같은 속성이 Count
/Length
포함됩니다.
$PSCustomObject = [pscustomobject]@{foo = 1}
$PSCustomObject.Length
1
$PSCustomObject.Count
1
이 작업에는 항목을 작동하고 필터링 PSCustomObject
할 수 있는 메서드도 포함됩니다.ForEach
Where
$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
1
PSMethod에서 대리자로 변환
PSMethod
를 대리자로 변환할 수 있습니다. 이렇게 하면 대리자 값으로 다음으로 전달하는 PSMethod
[M]::DoubleStrLen
등의 작업을 수행할 수 있습니다.[M]::AggregateString
class M {
static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }
static [long] AggregateString([string[]] $values, [func[string, int]] $selector) {
[long] $res = 0
foreach($s in $values){
$res += $selector.Invoke($s)
}
return $res
}
}
[M]::AggregateString((gci).Name, [M]::DoubleStrLen)
PowerShell 7.1에서 변경된 문자열 비교 동작
PowerShell 7.1은 .NET 5.0을 기반으로 하며 다음과 같은 호환성이 손상되는 변경이 도입되었습니다.
.NET 5.0로서 현재 문화권 고정 문자열 비교는 비 인쇄 제어 문자를 무시합니다.
예를 들어 다음 두 문자열은 동일한 것으로 간주합니다.
# Escape sequence "`a" is Ctrl-G or [char]7
'Food' -eq "Foo`ad"
True
새로운 cmdlet
새로운 Get-Uptime cmdlet
Get-Uptime cmdlet은 운영 체제의 마지막 부팅 이후 경과된 시간을 반환합니다. 이 cmdlet은 PowerShell 6.0에서 도입되었습니다.
새로운 Remove-Alias cmdlet
Remove-Alias cmdlet은 현재 PowerShell 세션에서 별칭을 제거합니다. 이 cmdlet은 PowerShell 6.0에서 도입되었습니다.
새로운 Remove-Service cmdlet
Remove-Service cmdlet은 레지스트리 및 서비스 데이터베이스에서 Windows 서비스를 제거합니다. 이 Remove-Service
cmdlet은 PowerShell 6.0에서 도입되었습니다.
새로운 Markdown cmdlet
Markdown은 HTML로 렌더링할 수 있는 기본 서식을 사용하여 읽을 수 있는 일반 텍스트 문서를 만드는 표준입니다.
PowerShell 6.1에서 다음 cmdlet이 추가되었습니다.
- ConvertFrom-Markdown - 문자열 또는 파일의 콘텐츠를 MarkdownInfo 개체로 변환합니다.
- Get-MarkdownOption - 콘솔에서 Markdown 콘텐츠를 렌더링하는 데 사용되는 현재 색과 스타일을 반환합니다.
- Set-MarkdownOption - 콘솔에서 Markdown 콘텐츠를 렌더링하는 데 사용되는 색과 스타일을 설정합니다.
- Show-Markdown - 콘솔에서 또는 HTML로 Markdown 콘텐츠를 표시합니다.
새로운 Test-Json cmdlet
Test-Json cmdlet은 문자열이 유효한 JSON(JavaScript Object Notation) 문서인지 여부를 테스트하고 필요에 따라 제공된 스키마에 대해 JSON 문서를 확인할 수 있습니다.
이 cmdlet은 PowerShell 6.1에서 도입되었습니다.
실험적 기능을 지원하는 새로운 cmdlet
실험적 기능을 지원하기 위해 PowerShell 6.2에 다음 cmdlet이 추가되었습니다.
새로운 Join-String cmdlet
Join-String cmdlet은 파이프라인의 개체를 단일 문자열로 결합합니다. 이 cmdlet은 PowerShell 6.2에 추가되었습니다.
새 보기 ConciseView 및 cmdlet 오류 발생
PowerShell 7.0에서는 새로운 기본 보기 ConciseView를 사용하여 대화형 및 스크립트 오류를 쉽게 읽을 수 있도록 오류 메시지의 표시 기능이 향상되었습니다. 보기는 기본 설정 변수 $ErrorView
를 통해 사용자가 선택할 수 있습니다.
ConciseView를 사용하면 스크립트 또는 파서 오류에서 오류가 없는 경우 한 줄 오류 메시지입니다.
Get-Childitem -Path c:\NotReal
Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist
스크립트를 실행하는 동안 오류가 발생하거나 구문 분석 오류가 발생하는 경우, PowerShell은 오류, 포인터 및 해당 줄에서 오류 위치를 표시하는 오류 메시지를 포함하는 여러 줄 오류 메시지를 반환합니다. 터미널에서 ANSI 색 이스케이프 시퀀스(VT100)를 지원하지 않으면 색이 표시되지 않습니다.
PowerShell 7의 기본 보기는 ConciseView입니다. 이전 기본 보기는 NormalView였으며 기본 설정 변수$ErrorView
를 설정하여 선택할 수 있습니다.
$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView
참고 항목
오류 메시지의 강조 색 변경을 지원하기 위해 $Host.PrivateData
새 속성 ErrorAccentColor가 추가되었습니다.
새로운 Get-Error
cmdlet은 원하는 경우 정규화된 오류에 대한 전체 세부 보기를 제공합니다. 기본적으로 cmdlet은 발생한 마지막 오류의 내부 예외를 포함한 전체 세부 정보를 표시합니다.
Get-Error
cmdlet은 기본 제공 변수 $Error
를 사용하여 파이프라인으로부터 입력을 지원합니다.
Get-Error
는 모든 파이프 오류를 표시합니다.
$Error | Get-Error
Get-Error
cmdlet은 Newest 매개 변수를 지원하므로 현재 세션에서 표시하려는 오류 수를 지정할 수 있습니다.
Get-Error -Newest 3 # Displays the lst three errors that occurred in the session
자세한 내용은 Get-Error를 참조하세요.
Cmdlet 변경 내용
ForEach-Object에 추가된 병렬 실행
PowerShell 7.0부터 컬렉션의 항목을 반복하는 ForEach-Object
cmdlet은 이제 새로운 Parallel 매개 변수를 사용하여 병렬 처리를 기본 제공합니다.
기본적으로 병렬 스크립트 블록은 병렬 작업을 시작한 호출자의 현재 작업 디렉터리를 사용합니다.
이 예제에서는 로컬 Windows 컴퓨터의 5개 시스템 로그에서 50,000개의 로그 항목을 검색합니다.
$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'
$logEntries = $logNames | ForEach-Object -Parallel {
Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5
$logEntries.Count
50000
Parallel 매개 변수는 각 입력 로그 이름에 대해 병렬로 실행되는 스크립트 블록을 지정합니다.
새로운 ThrottleLimit 매개 변수는 지정된 시간에 동시에 실행되는 스크립트 블록 수를 제한합니다. 기본값은 5입니다.
변수를 $_
사용하여 스크립트 블록의 현재 입력 개체를 나타냅니다. $using:
범위를 사용하여 실행 중인 스크립트 블록에 변수 참조를 전달합니다.
자세한 내용은 ForEach-Object를 참조하세요.
Windows에서 호환되는 기본 제공 모듈의 system32
확인
Windows 10 1809 업데이트 및 Windows Server 2019에서는 PowerShell과 호환되는 것으로 표시하기 위해 여러 기본 제공 PowerShell 모듈을 업데이트했습니다.
PowerShell이 시작되면 자동으로 환경 변수의 PSModulePath
일부로 포함됩니다$windir\System32
. 그러나 모듈이 호환Core
되는 것으로 표시되어 있는 경우에만 CompatiblePSEdition
해당 모듈 Get-Module
Import-Module
을 노출합니다.
스위치 매개 변수를 사용하여 모든 모듈을 표시하도록 이 동작을 재정의할 -SkipEditionCheck
수 있습니다.
또한 PSEdition
속성을 테이블 출력에 추가했습니다.
모든 -LiteralPath
매개 변수에 대한 -lp
별칭
-LiteralPath
매개 변수가 있는 모든 기본 제공 PowerShell cmdlet에 대해 표준 매개 변수 별칭 -lp
를 만들었습니다.
a*b
가 실제로 존재하지 않을 경우 Get-Item -LiteralPath a*b
에서 오류를 반환하도록 수정
-LiteralPath
이전에는 야생을 감안할 때카드 야생과 동일하게 -Path
취급하고카드 파일을 찾을 수 없으면 자동으로 종료됩니다. 올바른 동작 -LiteralPath
은 리터럴이므로 파일이 없으면 오류가 발생합니다. -Literal
과 함께 사용된 와일드카드를 리터럴로 처리하도록 변경되었습니다.
에서 작업 디렉터리를 현재 디렉터리로 설정 Start-Job
이제 cmdlet은 Start-Job
현재 디렉터리를 새 작업의 작업 디렉터리로 사용합니다.
*-Computer
cmdlet에서 -Protocol
제거
CoreFX의 RPC 원격(특히 비 Windows 플랫폼)과 PowerShell -Protocol
에서 일관된 원격 환경을 보장하는 문제로 인해 매개 변수가 cmdlet에서 \*-Computer
제거되었습니다. DCOM은 더 이상 원격 작업을 지원하지 않습니다. 다음 cmdlet은 WSMAN 원격만 지원합니다.
Rename-Computer
Restart-Computer
Stop-Computer
*-Service
cmdlet에서 -ComputerName
제거
PSRP의 일관된 사용을 장려하기 위해 매개 변수가 -ComputerName
cmdlet에서 *-Service
제거되었습니다.
반환된 줄에 구분 기호를 포함하지 않도록 수정 Get-Content -Delimiter
이전에는 구분 기호를 제거하기 위해 데이터를 추가로 처리해야 하므로 사용 Get-Content -Delimiter
중 출력이 일관되지 않고 불편했습니다. 이렇게 변경하면 반환된 줄의 구분 기호가 제거됩니다.
변경 내용 Format-Hex
매개 변수는 -Raw
이제 "no-op"(아무 작업도 수행하지 않음)입니다. 앞으로 모든 출력은 해당 형식에 대한 모든 바이트를 포함하는 숫자의 실제 표현으로 표시됩니다. 이 변경 전에 -Raw
매개 변수가 수행한 작업입니다.
Get-ComputerInfo 속성 이름의 오타 수정
BiosSerialNumber
철자가 틀렸 BiosSeralNumber
고 올바른 맞춤법으로 변경되었습니다.
추가 Get-StringHash
및 Get-FileHash
cmdlet
이 변경은 일부 해시 알고리즘이 CoreFX에서 지원되지 않아 더 이상 사용할 수 없기 때문입니다.
MACTripleDES
RIPEMD160
전달 $null 오류 대신 모든 개체를 반환하는 cmdlet에 유효성 Get-*
검사 추가
다음 중 하나에 $null
을 전달하면 이제 오류가 throw됩니다.
Get-Credential -UserName
Get-Event -SourceIdentifier
Get-EventSubscriber -SourceIdentifier
Get-Help -Name
Get-PSBreakpoint -Script
Get-PSProvider -PSProvider
Get-PSSessionConfiguration -Name
Get-Runspace -Name
Get-RunspaceDebug -RunspaceName
Get-Service -Name
Get-TraceSource -Name
Get-Variable -Name
에서 W3C 확장 로그 파일 형식에 대한 지원 추가 Import-Csv
이전에는 cmdlet을 Import-Csv
사용하여 W3C 확장 로그 형식으로 로그 파일을 직접 가져올 수 없으며 추가 작업이 필요합니다. 이 변경으로 W3C 확장 로그 형식이 지원됩니다.
Import-Csv
PSTypeNames
형식 정보가 CSV에 있을 때 가져오기 시 적용됩니다.
이전에는 ConvertFrom-Csv
를 사용하여 TypeInformation
을 가져오고, Export-CSV
를 사용하여 내보낸 개체가 형식 정보를 보존하지 않았습니다. 이 변경은 CSV 파일에서 사용할 수 있는 경우 멤버에 형식 정보를 PSTypeNames
추가합니다.
-NoTypeInformation
가 기본값입니다. Export-Csv
이전에는 cmdlet이 Export-CSV
개체의 형식 이름을 포함하는 첫 번째 줄로 주석을 출력했습니다. 변경 내용은 대부분의 CSV 도구에서 인식되지 않으므로 기본적으로 형식 정보를 제외합니다. 이 변경 사항은 고객 피드백을 해결하기 위해 수행되었습니다.
이전 동작을 유지하는 데 사용합니다 -IncludeTypeInformation
.
*
에 대한 레지스트리 경로에서 사용할 수 있습니다.Remove-Item
-LiteralPath
이전에는 야생을 감안할 때카드 야생과 동일하게 -Path
취급하고카드 파일을 찾을 수 없으면 자동으로 종료됩니다. 올바른 동작 -LiteralPath
은 리터럴이므로 파일이 없으면 오류가 발생합니다. -Literal
과 함께 사용된 와일드카드를 리터럴로 처리하도록 변경되었습니다.
이제 Group-Object가 그룹을 정렬합니다.
성능 개선의 일환으로, Group-Object
가 이제 정렬된 그룹 목록을 반환합니다.
순서에 의존해서는 안 되지만, 첫 번째 그룹을 원한 경우 이러한 변경으로 낙담할 수 있습니다. 이전 동작에 종속되는 영향이 낮기 때문에 이러한 성능 향상이 변경될 만한 가치가 있다고 판단했습니다.
Measure-Object
의 표준 편차
이제 출력에 Measure-Object
속성이 StandardDeviation
포함됩니다.
Get-Process | Measure-Object -Property CPU -AllStats
Count : 308
Average : 31.3720576298701
Sum : 9662.59375
Maximum : 4416.046875
Minimum :
StandardDeviation : 264.389544720926
Property : CPU
Get-PfxCertificate -Password
Get-PfxCertificate
이제 .를 Password
사용하는 매개 변수가 있습니다 SecureString
. 이렇게 하면 비대화형으로 사용할 수 있습니다.
$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '
$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint
more
함수 제거
과거에 PowerShell은 래핑된 함수를 more
Windows에 제공했습니다 more.com
. 이제 해당 함수가 제거되었습니다.
또한 함수가 help
Windows 또는 비 Windows 플랫폼에서 지정한 $env:PAGER
시스템의 기본 호출기에서 사용하도록 more.com
변경되었습니다.
cd DriveName:
이제 사용자를 해당 드라이브의 현재 작업 디렉터리로 반환합니다.
이전에는 PSDrive를 사용 Set-Location
하거나 cd
반환하기 위해 사용자를 해당 드라이브의 기본 위치로 보냈습니다. 이제 사용자는 해당 세션에 대해 마지막으로 알려진 현재 작업 디렉터리로 전송됩니다.
cd -
가 이전 디렉터리를 반환
C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>
또는 Linux에서 다음을 수행합니다.
PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>
또한 cd
및 cd --
가 $HOME
으로 변경합니다.
Update-Help
, 관리자가 아님
인기 있는 수요에 Update-Help
따라 더 이상 관리자로 실행할 필요가 없습니다. Update-Help
이제 기본적으로 사용자 범위 폴더에 도움말을 저장합니다.
Where-Object -Not
-Not
매개 변수를 Where-Object
로 추가하면 이제 존재하지 않는 속성 또는 null/비어 있는 속성 값에 대한 파이프라인에서 개체를 필터링할 수 있습니다.
예를 들어 이 명령은 정의된 종속 서비스가 없는 모든 서비스를 반환합니다.
Get-Service | Where-Object -Not DependentServices
Web Cmdlet 변경 내용
Web Cmdlet의 기본 .NET API가 .로 변경 System.Net.Http.HttpClient
되었습니다. 이 변경은 많은 이점을 제공합니다. 그러나 Internet Explorer와의 상호 운용성이 부족하여 이러한 변경으로 인해 몇 가지 호환성이 손상되는 변경 Invoke-WebRequest
Invoke-RestMethod
이 발생했습니다.
Invoke-WebRequest
이제 기본 HTML 구문 분석만 지원합니다.Invoke-WebRequest
항상 개체를BasicHtmlWebResponseObject
반환합니다.ParsedHtml
및Forms
속성이 제거되었습니다.- 이제
BasicHtmlWebResponseObject.Headers
값이String
이 아니라String[]
입니다. BasicHtmlWebResponseObject.BaseResponse
가 이제 개체입니다System.Net.Http.HttpResponseMessage
.Response
이제 Web Cmdlet 예외의 속성이 개체입니다System.Net.Http.HttpResponseMessage
.- 엄격한 RFC 헤더 구문 분석이 이제 및
-UserAgent
매개 변수에-Headers
대한 기본값입니다. 이 작업은 .을 사용하여 바이패스-SkipHeaderValidation
할 수 있습니다. file://
및ftp://
URI 체계는 더 이상 지원되지 않습니다.System.Net.ServicePointManager
설정은 더 이상 적용되지 않습니다.- 현재 macOS에서 사용할 수 있는 인증서 기반 인증은 없습니다.
-Credential
URI를http://
통해 사용하면 오류가 발생합니다. URI를https://
사용하거나 매개 변수를-AllowUnencryptedAuthentication
제공하여 오류를 표시하지 않습니다.-MaximumRedirection
이제 리디렉션 시도가 마지막 리디렉션의 결과를 반환하는 대신 제공된 제한을 초과할 때 종료 오류가 발생합니다.- PowerShell 6.2에서는 JSON 응답에 대한 UTF-8 인코딩을 기본적으로 변경했습니다. JSON 응답에 대해 문자 집합이 제공되지 않으면 RFC 8259에 따라 기본 인코딩이 UTF-8이어야 합니다.
- 응답의 경우 기본 인코딩이 UTF-8
application-json
로 설정됨 - 표준을 준수하지 않는
Content-Type
헤더를 허용하는-SkipHeaderValidation
매개 변수가 추가됨 - 간소화된
multipart/form-data
를 지원하는-Form
매개 변수가 추가됨 - 관계 키의 대/소문자를 구분하지 않는 규격 처리
- 웹 cmdlet에 대한 매개 변수 추가
-Resume
됨
Invoke-RestMethod는 데이터가 반환되지 않을 때 유용한 정보를 반환합니다.
API가 null
만 반환하는 경우 Invoke-RestMethod
에서는 이 값을 $null
이 아니라 "null"
문자열로 직렬화했습니다. 이 변경은 유효한 단일 값 JSON null
리터럴을 .로 $null
올바르게 직렬화하기 위한 논리 Invoke-RestMethod
를 수정합니다.
암호화되지 않은 연결을 통해 전송될 때 -Credential
웹 Cmdlet 경고
HTTP를 사용하는 경우 암호를 포함하는 콘텐츠가 일반 텍스트로 전송됩니다. 이 변경은 이 동작을 기본적으로 허용하지 않고 자격 증명이 보안 방식으로 전달될 경우 오류를 반환하기 위한 것입니다. 사용자는 스위치를 -AllowUnencryptedAuthentication
사용하여 이를 무시할 수 있습니다.
웹 cmdlet의 -OutFile
매개 변수가 -LiteralPath
처럼 작동하도록 설정(#11701)
PowerShell 7.1부터 웹 cmdlet의 OutFile 매개 변수는 LiteralPath처럼 작동하며 와일드카드를 처리하지 않습니다.
API 변경
클래스 제거 AddTypeCommandBase
AddTypeCommandBase
성능을 향상시키기 위해 클래스가 제거되었습니다Add-Type
. 이 클래스는 cmdlet에서 Add-Type
만 사용되며 사용자에게 영향을 주지 않아야 합니다.
추가 형식에서 지원되는 언어로 제거됨 VisualBasic
과거에는 cmdlet을 사용하여 Visual Basic 코드를 컴파일할 Add-Type
수 있습니다. Visual Basic은 .와 함께 Add-Type
거의 사용되지 않습니다. PowerShell의 크기를 줄이기 위해 이 기능을 제거했습니다.
지원 제거됨 RunspaceConfiguration
이전에는 API를 사용하여 프로그래밍 방식으로 PowerShell Runspace를 만들 때 레거시 RunspaceConfiguration
또는 최신 InitialSessionState
클래스를 사용할 수 있었습니다. 이 변경으로 지원 및 지원 RunspaceConfiguration
만 제거되었습니다 InitialSessionState
.
CommandInvocationIntrinsics.InvokeScript
대신 인수 바인딩 $input
$args
잘못된 매개 변수 위치로 인해 인수가 아니라 입력으로 인수가 전달되었습니다.
제거 ClrVersion
및 BuildVersion
속성 $PSVersionTable
이 속성 $PSVersionTable
은 ClrVersion
CoreCLR에 유용하지 않습니다. 최종 사용자는 호환성을 결정하기 위해 해당 값을 사용하지 않아야 합니다.
이 속성은 BuildVersion
Windows가 아닌 플랫폼에서 사용할 수 없는 Windows 빌드 버전에 연결되었습니다. GitCommitId
이 속성을 사용하여 PowerShell의 정확한 빌드 버전을 검색합니다.
유니코드 이스케이프 구문 분석 구현
`u####
또는 `u{####}
이 해당 유니코드 문자로 변환됩니다. 리터럴 `u
을 출력하려면 백틱 ``u
을 이스케이프합니다.
PS 함수의 매개 변수 바인딩 문제 ValueFromRemainingArguments
ValueFromRemainingArguments
이제 값 자체가 배열인 단일 값 대신 배열로 값을 반환합니다.
다음의 CommandTypes.Workflow
용도 정리 WorkflowInfoCleaned
System.Management.Automation에서 CommandTypes.Workflow
및 WorkflowInfo
사용과 관련된 코드를 정리합니다.
이러한 사소한 호환성이 손상되는 변경은 도움말 공급자 코드에 영향을 줄 기본 있습니다.
- 공용 생성자를
WorkflowInfo
내부로 변경합니다. 더 이상 워크플로를 지원하지 않으므로 사용자가 인스턴스를 만들Workflow
수 없도록 하는 것이 좋습니다. - 워크플로 디버깅에만 사용되므로 System.Management.Automation.DebugSource 형식을 제거합니다.
- 워크플로 디버깅에만 사용되는 추상 클래스 디버거에서
SetParent
오버로드를 제거합니다. - 파생 클래스 RemotingJobDebugger에서 동일한
SetParent
오버로드를 제거합니다.
대리자를 변환 ScriptBlock
할 때 반환 결과를 PSObject
래핑하지 마세요.
C# 컨텍스트에서 사용할 대리자 형식으로 ScriptBlock
을 변환하는 경우 PSObject
에서 결과를 래핑하면 불필요한 문제가 발생합니다.
- 값이 대리자 반환 형식으로 변환되면
PSObject
는 기본적으로 래핑 해제됩니다.PSObject
그래서 불필요한 것입니다. - 대리자 반환 형식이 있으면
object
C# 코드에서PSObject
작업하기 어렵게 만드는 형식으로 래핑됩니다.
이 변경 이후에는 반환된 개체가 기본 개체가 됩니다.
원격 지원
Unix 플랫폼에서 WinRM을 사용하는 PowerShell 원격(PSRP)에는 HTTPS를 통한 기본 인증 또는 NTLM/Negotiate가 필요합니다. macOS의 PSRP는 HTTPS를 통한 기본 인증만 지원합니다. 비 Windows 플랫폼에서는 Kerberos 기반 인증이 지원되지 않습니다.
또한 PowerShell은 모든 플랫폼(Windows, macOS 및 Linux)에서 SSH를 통해 PSRP(PowerShell 원격)를 지원합니다. 자세한 내용은 PowerShell의 SSH 원격을 참조하세요.
컨테이너용 PowerShell Direct가 먼저 사용 pwsh
하려고 시도합니다.
PowerShell Direct 는 네트워크 연결 또는 기타 원격 관리 서비스 없이 Hyper-V VM 또는 컨테이너에 연결할 수 있는 PowerShell 및 Hyper-V의 기능입니다.
과거에는 컨테이너의 기본 제공 Windows PowerShell 인스턴스를 사용하여 PowerShell Direct가 연결되었습니다. 이제 PowerShell Direct는 먼저 PATH
환경 변수에서 사용 가능한 pwsh.exe
를 사용하여 연결을 시도합니다. pwsh.exe
를 사용할 수 없는 경우 PowerShell Direct는 powershell.exe
를 다시 사용합니다.
Enable-PSRemoting
은 이제 별도의 원격 엔드포인트를 미리 보기 버전으로 만듭니다.
Enable-PSRemoting
이제 두 개의 원격 세션 구성을 만듭니다.
- PowerShell의 주 버전에 대해 하나. 예들 들어
PowerShell.6
입니다. 부 버전에 의존할 수 있는 이 엔드포인트는 “시스템 수준” PowerShell 6 세션 구성으로 업데이트함 - 하나의 버전별 세션 구성(예:
PowerShell.6.1.0
이 동작은 여러 PowerShell 6 버전을 설치하고 동일한 컴퓨터에 액세스할 수 있도록 하려는 경우에 유용합니다.
또한 PowerShell의 미리 보기 버전은 이제 Enable-PSRemoting
cmdlet을 실행한 후에 각자 자신의 원격 세션 구성을 가져옵니다.
C:\WINDOWS\system32> Enable-PSRemoting
출력은 이전에 WinRM을 설정하지 않은 경우 달라질 수 있습니다.
WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.
그런 다음 PowerShell 6의 미리 보기 및 안정적인 빌드 및 각 특정 버전에 대한 별도의 PowerShell 세션 구성을 볼 수 있습니다.
Get-PSSessionConfiguration
Name : PowerShell.6.2-preview.1
PSVersion : 6.2
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Name : PowerShell.6-preview
PSVersion : 6.2
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Name : powershell.6
PSVersion : 6.1
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Name : powershell.6.1.0
PSVersion : 6.1
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
SSH에 대해 지원되는 user@host:port
구문
SSH 클라이언트는 일반적으로 형식user@host:port
의 연결 문자열 지원합니다. PowerShell 원격에 대한 프로토콜로 SSH를 추가하여 이 형식의 연결 문자열 대한 지원을 추가했습니다.
Enter-PSSession -HostName fooUser@ssh.contoso.com:2222
원격 분석은 환경 변수로만 비활성화할 수 있습니다.
PowerShell은 시작할 때 기본 원격 분석 데이터를 Microsoft로 보냅니다. 데이터에는 OS 이름, OS 버전 및 PowerShell 버전이 포함됩니다. 이 데이터를 사용하면 PowerShell이 사용되는 환경을 더 잘 이해할 수 있으며, 새 기능 및 수정 사항의 우선 순위를 지정할 수 있습니다.
이 원격 분석을 옵트아웃하려면 환경 변수 POWERSHELL_TELEMETRY_OPTOUT
을 true
, yes
또는 1
로 설정합니다. 원격 분석을 사용하지 않도록 설정하기 위해 파일 DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY
삭제를 더 이상 지원하지 않습니다.
PowerShell