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