다음을 통해 공유


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과 어떻게 다른지를 제시하는 것입니다. 버전 간 변경 내용과 새 기능 추가에 대한 자세한 내용은 각 버전에 대한 새로운 기능 문서를 참조하세요.

.NET Framework 및 .NET Core

Linux 및 macOS의 PowerShell은 Microsoft Windows 전체 .NET Framework의 하위 집합인 .NET Core를 사용합니다. 이는 PowerShell이 기본 프레임워크 형식 및 메서드에 직접 액세스할 수 있기 때문에 중요합니다. 따라서 Windows 실행되는 스크립트는 프레임워크의 차이로 인해 Windows 이외의 플랫폼에서 실행되지 않을 수 있습니다. .NET Core의 변경 내용에 대한 자세한 내용은 .NET Framework에서 .NET Core로 마이그레이션하기 위한 변경 내용 참조하세요.

PowerShell의 각 새 릴리스는 최신 버전의 .NET 기반으로 빌드됩니다. .NET에서 PowerShell에 영향을 미치는 호환성 변경이 있을 수 있습니다.

  • PowerShell 7.6 - .NET 10.0(LTS) 기반
  • PowerShell 7.5 - .NET 9.0 기반
  • PowerShell 7.4 - .NET 8.0(LTS) 기반
  • PowerShell 7.3 - .NET 7.0 기반
  • PowerShell 7.2 - .NET 6.0(LTS) 기반
  • PowerShell 7.1 - .NET 5.0 기반
  • PowerShell 7.0 - .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 PowerShell에서 Windows 워크플로 파운데이션(WF)을 기반으로 구축되어 장기 실행 또는 병렬화된 작업을 위한 강력한 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 명령어 삭제

.NET Core는 SOAP 프로토콜을 사용하기 위한 서비스를 제공하는 Windows Communication Framework를 지원하지 않습니다. 이 cmdlet은 SOAP가 필요하기 때문에 제거되었습니다.

*-Transaction 삭제된 CMDLETS

이러한 cmdlet은 사용량이 매우 제한적입니다. 그들을 위한 지원을 중단하기로 결정했습니다.

  • Complete-Transaction
  • Get-Transaction
  • Start-Transaction
  • Undo-Transaction
  • Use-Transaction

*-EventLog cmdlet

지원되지 않는 API *-EventLog 를 사용하므로 powerShell에서 cmdlet이 제거되었습니다. Get-WinEventNew-WinEvent 사용하여 Windows 이벤트를 가져와서 만들 수 있습니다.

WPF(Windows Presentation Framework)를 사용하는 cmdlet

.NET Core 3.1은 WPF 대한 지원을 추가했기 때문에 PowerShell 7.0 릴리스는 다음과 같은 Windows 관련 기능을 복원했습니다.

  • Show-Command 커맨드 렛 (cmdlet)
  • Out-GridView 커맨드 렛 (cmdlet)
  • 의 ShowWindow 매개 변수Get-Help

PowerShell Desired State Configuration(DSC)에 대한 변경 내용

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의 병렬 설치를 지원하는 결정적인 방법을 제공합니다.

pwsh(.exe)로부터 powershell.exe로의 추가 변경:

  • 첫 번째 위치 매개변수 -Command-File를 에서 로 변경했습니다. 이 변경은 비 Windows 플랫폼의 비 PowerShell 셸에서 실행되는 PowerShell 스크립트에서 #!(즉, shebang)의 사용을 수정합니다. 또한 pwsh foo.ps1pwsh fooScript와 같은 명령을 -File 없이 실행할 수 있다는 것을 의미합니다. 하지만 이 변경 사항은 pwsh.exe -Command Get-Command와 같은 명령을 실행하려고 할 때 -c 또는 -Command를 명시적으로 지정해야 함을 요구합니다.
  • pwsh는 대화형 셸을 나타내기 위해 -i 스위치(또는 -Interactive 스위치)를 수용합니다. 이렇게 하면 PowerShell을 Unix 플랫폼에서 기본 셸로 사용할 수 있습니다.
  • 매개변수 -ImportSystemModules-PSConsoleFilepwsh.exe에서 제거했습니다.
  • pwsh -Versionpwsh.exe에 대한 내장된 도움말을 다른 네이티브 도구와 일치하도록 변경했습니다.
  • -File-Command 에 대한 잘못된 인수 오류 메시지와 Unix 표준에 따른 종료 코드
  • Windows -WindowStyle 매개 변수가 추가되었습니다. 마찬가지로 비 Windows 플랫폼의 패키지 기반 설치 업데이트는 현재 위치 업데이트입니다.

단축된 이름은 Windows 아닌 플랫폼에서 셸의 명명과도 일치합니다.

bool 매개 변수를 사용하여 PowerShell 스크립트 실행 지원

PowerShell 스크립트를 실행하기 위해 pwsh.exe를 사용할 때 이전에는 -File$true/를 매개 변수 값으로 전달할 방법이 제공되지 않았습니다. 파라미터에 대한 파싱된 값 지원 $true/$false 이 추가되었습니다. 스위치 값도 지원됩니다.

Windows PowerShell과의 이전 버전과의 호환성 향상

Windows 경우 새 [switch] 매개 변수 UseWindowsPowerShellImport-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 - 자동 업데이트 또는 Microsoft 업데이트 사용을 옵트인하지 마세요Windows 업데이트

엔진 변경 사항

PowerShell을 기본 Unix 셸로 지원

Unix에서는 셸이 대화형 셸을 수락하도록 하는 것은 관례이며, 많은 도구가 이러한 동작을 기대합니다(예:-i PowerShell을 기본 셸로 설정할 때). 이 경우, 셸은 script 스위치를 사용하여 호출됩니다. 이 변경 사항은 파괴적으로 작용합니다. 이전에는 -i를 사용하여 -InputFormat을(를) 간편하게 매칭할 수 있었지만, 이제는 -in가 필요합니다.

사용자 지정 스냅인

PowerShell 스냅인은 PowerShell 커뮤니티에서 널리 채택되지 않는 PowerShell 모듈의 선행 작업입니다.

스냅인을 지원하는 복잡성과 커뮤니티에서의 사용 부족으로 인해 PowerShell에서 사용자 지정 스냅인을 더 이상 지원하지 않습니다.

실험적 기능 플래그

PowerShell 6.2를 사용하면 Experimental Features 지원됩니다. 이를 통해 PowerShell 개발자는 디자인이 완료되기 전에 새 기능을 제공하고 피드백을 받을 수 있습니다. 이렇게 하면 디자인이 진화함에 따라 호환성이 손상되는 변경을 방지할 수 있습니다.

사용 가능한 실험 기능 목록을 얻기 위해 사용하세요 Get-ExperimentalFeature . 이 기능들은 Enable-ExperimentalFeatureDisable-ExperimentalFeature로 활성화하거나 비활성화할 수 있습니다.

GAC에서 로드하기 전에 모듈 기본 경로에서 어셈블리 로드

이전에, 이진 모듈이 GAC에 모듈 어셈블리를 포함하고 있을 때, 우리는 GAC에서 어셈블리를 먼저 로드하고 나서 모듈 기본 경로에서 로드했습니다.

값 형식 요소 형식이 있는 컬렉션에 대한 null 요소 검사 건너뛰기

Mandatory 매개변수 및 ValidateNotNull, ValidateNotNullOrEmpty 속성에 대해, 컬렉션의 요소 유형이 값 유형이라면 널 요소 검사를 건너뛰세요.

$? ParenExpression, SubExpressionArrayExpression에 대한 보존

이 PR은 (...)하위 파이프라인$(...), 하위 표현식@() 및 배열 표현식을 컴파일하는 방식을 변경하여 $? 자동으로 true가 되지 않도록 합니다. 대신 값 $? 은 실행된 파이프라인 또는 문의 결과에 따라 달라집니다.

$?가 네이티브 명령이 $false에 쓸 때 stderr이 되지 않도록 수정합니다.

$?는 네이티브 명령이 $false에 쓸 때 stderr로 설정되지 않습니다. 네이티브 명령은 실패를 나타낼 의도 없이 stderr에 쓰는 것이 일반적입니다. 네이티브 명령이 0이 아닌 종료 코드를 가질 때에만 $?$false로 설정됩니다.

$ErrorActionPreference가 네이티브 명령의 stderr 출력에 영향을 미치지 않도록 함

네이티브 명령은 실패를 나타낼 의도 없이 stderr에 쓰는 것이 일반적입니다. 이번 변경으로 stderr 출력을 여전히 ErrorRecord 객체에 캡처하지만, 네이티브 명령어에서 ErrorRecord가 발생한 경우에는 $ErrorActionPreference이 더 이상 런타임에 적용되지 않습니다.

ASCII 대신 인코딩을 사용하도록 $OutputEncoding 변경 UTF-8 NoBOM

이전 인코딩 ASCII(7비트)는 경우에 따라 출력을 잘못 변경합니다. 기본값을 설정하면 UTF-8 NoBOM 대부분의 도구 및 운영 체제에서 지원하는 인코딩을 사용하여 유니코드 출력이 유지됩니다.

매개 변수 -EncodingSystem.Text.Encoding 형식인 cmdlet 통합

FileSystem -Encoding 공급자 cmdlet에서 값 Byte 이 제거되었습니다. 새로운 매개변수 -AsByteStream, 는 바이트 스트림이 입력으로 필요한지 또는 출력이 바이트 스트림임을 지정하는 데 사용됩니다.

비 Windows 플랫폼에서 New-ModuleManifest 인코딩을 UTF8NoBOM 변경

New-ModuleManifest는 이전에 BOM을 사용하여 UTF-16 형식으로 매니페스트를 생성하여 Linux 도구에 문제를 일으켰습니다psd1. 이 호환성이 손상되는 변경으로 Windows 이외의 플랫폼에서 New-ModuleManifest 인코딩이 UTF(BOM 없음)로 변경됩니다.

대부분의 기본 별칭에서 AllScope를 제거하십시오.

스코프 생성 AllScope 속도를 높이기 위해 대부분의 기본 별칭에서 제거되었습니다. AllScope 조회가 더 빠른 몇몇 자주 사용되는 가명에 대해서는 그대로 남겨졌습니다.

-Verbose-Debug은 더 이상 $ErrorActionPreference을 재정의하지 않습니다.

이전에는 -Verbose 또는 -Debug이 명시된 경우, $ErrorActionPreference의 동작을 덮어썼습니다. 이 변화로 -Verbose-Debug가 더 이상 $ErrorActionPreference의 동작에 영향을 미치지 않습니다.

또한 매개 변수는 -Debug$DebugPreference 대신 계속으로 설정 됩니다.

$PSCulture 세션에서의 문화적 변화 내용을 일관되게 반영하게 하십시오

Windows PowerShell에서는 현재 문화권 값이 캐시되기 때문에, 세션 시작 후에 문화권이 변경되면 값이 동기화되지 않을 수 있습니다. 이 캐싱 동작은 PowerShell 코어에서 수정되었습니다.

명시적으로 지정된 명명된 매개 변수가 해시 테이블 스플래팅에서 동일한 매개 변수를 대체하도록 허용

이 변경 사항으로 인해 스플래팅의 명명된 매개 변수는 명시적으로 지정된 모든 명명된 매개 변수가 먼저 바인딩된 후에 바인딩되도록 매개 변수 목록의 끝으로 이동됩니다. 지정한 명명된 매개 변수를 찾을 수 없는 경우 단순 함수에 대한 매개 변수 바인딩은 오류를 throw하지 않습니다. 알려지지 않은 이름 있는 매개변수는 단순 함수의 매개변수에 $args 묶여 있습니다. 스플랫을 인수 목록의 맨 끝으로 이동시키면 매개변수가 나타나는 순서가 바뀝니다.

다음은 그 예입니다.

function SimpleTest {
    param(
        $Name,
        $Path
    )
    "Name: $Name; Path: $Path; Args: $args"
}

이전 동작에서 MyPath 는 인수 목록의 세 번째 인수이므로 바인딩 -Path 되지 않습니다. ## 그래서 결국 '$args'에 함께 끼워 넣게 돼요 Blah = "World"

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 명령어를 사용해 작업을 관리할 수 있습니다. 파이프라인에서 사용하는 변수들(프로세스별 변수는 제외)은 자동으로 작업에 복사되어 Copy-Item $foo $bar & 그냥 작동합니다. 또한 작업은 사용자의 홈 디렉터리 대신 현재 디렉터리에서 실행됩니다.

새로운 메서드/속성 PSCustomObject

에 새 메서드 및 속성을 추가했습니다 PSCustomObject. PSCustomObject 이제 다른 객체와 같은 속성을 포함합니다 Count/Length .

$PSCustomObject = [pscustomobject]@{foo = 1}

$PSCustomObject.Length
1
$PSCustomObject.Count
1

이 작업에는 ForEachWhere 방법이 포함되어 있으며, 이를 통해 PSCustomObject 항목을 조작하고 필터링할 수 있습니다.

$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

새로운 커맨드렛

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 Get-Error

PowerShell 7.0은 새로운 기본 보기 인 ConciseView를 사용하여 대화형 및 스크립트 오류의 가독성을 향상시키기 위해 오류 메시지의 표시를 향상시킵니다. 뷰는 선호 변수 $ErrorView를 통해 사용자가 선택할 수 있습니다.

ConciseView에서는 스크립트나 파서 오류가 아니면 한 줄의 오류 메시지로 표시됩니다:

Get-ChildItem -Path C:\NotReal
Get-ChildItem: Can't find path 'C:\NotReal' because it doesn't 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

비고

오류 메시지의 악센트 색상 변경을 지원하기 위해 새로운 속성인 ErrorAccentColor 가 추가 $Host.PrivateData 되었습니다.

Get-Errorcmdlet은 원하는 경우 정규화된 오류에 대한 전체 세부 보기를 제공합니다. 기본적으로 cmdlet은 마지막 오류가 발생한 모든 세부 사항과 내부 예외를 표시합니다.

cmdlet은 Get-Error 내장 변수 $Error를 사용하여 파이프라인에서 입력을 지원합니다. Get-Error 모든 파이프 오류 표시.

$Error | Get-Error

cmdlet은 Get-Error최신 매개변수를 지원하여 현재 세션에서 표시하고자 하는 오류 수를 지정할 수 있습니다.

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

병렬 매개변수는 각 입력 로그 이름에 대해 병렬로 실행되는 스크립트 블록을 지정합니다.

새로운 ThrottleLimit 매개변수는 주어진 시간에 병렬로 실행되는 스크립트 블록의 수를 제한합니다. 기본값은 5입니다.

스크립트 블록 내 현재 입력 객체를 나타내는 변수를 $_ 사용하세요. Using: 범위 한정자를 사용하여 실행 중인 스크립트 블록에 변수 참조를 전달합니다.

자세한 내용은 ForEach-Object를 참조하세요.

Windows에서 호환되는 기본 제공 모듈에 대해 system32을(를) 확인하십시오.

Windows 10 1809 업데이트 및 Windows Server 2019 PowerShell과 호환되는 것으로 표시하도록 여러 기본 제공 PowerShell 모듈을 업데이트했습니다.

PowerShell이 시작되면 자동으로 환경 변수의 $windir\System32 일부로 포함됩니다PSModulePath. 그러나 CompatiblePSEditionCore와 호환된다고 표시되는 경우에만 Get-ModuleImport-Module 모듈을 노출합니다.

매개 변수를 사용하여 모든 모듈을 표시하도록 이 동작을 재정의할 -SkipEditionCheck[switch] 수 있습니다. 또한 테이블 출력에 속성을 추가 PSEdition 했습니다.

-lp 모든 -LiteralPath 매개변수에 대한 별칭

모든 기본 제공 PowerShell cmdlet이 매개 변수 -lp을(를) 사용하는 경우 표준 매개 변수 별칭 -LiteralPath을 만들었습니다.

Get-Item -LiteralPath a*b이(가) 실제로 존재하지 않으면 a*b을(를) 수정하여 오류를 반환하십시오.

이전에는 -LiteralPath 와일드카드를 -Path와 동일하게 처리하고, 와일드카드가 파일을 찾지 못하면 조용히 종료했습니다. 올바른 동작은 문자 -LiteralPath 그대로 있어야 하며, 파일이 존재하지 않으면 오류가 발생해야 합니다. 변경은 -Literal와 함께 사용된 와일드카드를 문자 그대로 다루는 것입니다.

에서 작업 디렉터리를 현재 디렉터리로 설정 Start-Job

이제 cmdlet은 Start-Job 현재 디렉터리를 새 작업의 작업 디렉터리로 사용합니다.

-Protocol cmdlet에서 *-Computer 제거

매개 변수가 -Protocol 다음 cmdlet에서 제거되었습니다.

  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

DCOM은 더 이상 원격에 대해 지원되지 않습니다. cmdlet들은 WSMAN 원격만을 지원합니다.

-ComputerName cmdlet에서 *-Service 제거

PSRP의 일관된 사용을 장려하기 위해 -ComputerName 매개변수가 *-Service cmdlet에서 제거되었습니다. 대신 원격 컴퓨터에서 cmdlet을 실행하는 데 사용합니다 Invoke-Command .

반환된 줄에 구분 기호를 포함하지 않도록 수정 Get-Content -Delimiter

이전에는 출력 Get-Content -Delimiter 방식이 일관성이 없고 불편했는데, 구분자를 제거하기 위해 데이터를 추가로 처리해야 했기 때문입니다. 이렇게 변경하면 반환된 줄의 구분 기호가 제거됩니다.

변경 내용 Format-Hex

이제 매개 변수는 -Raw 아무 것도 수행하지 않습니다. cmdlet은 Format-Hex 해당 형식에 대한 모든 바이트를 포함하는 숫자의 실제 표현을 표시합니다. 이 변경 전에는 -Raw 매개 변수가 수행한 작업입니다.

속성 이름의 오타 수정 Get-ComputerInfo

BiosSerialNumber a로 잘못 표기되어 BiosSeralNumber 올바른 철자로 변경되었습니다.

사용 가능한 해시 알고리즘 변경

.NET에서 다음 해시 알고리즘이 제거되었습니다.

  • MACTripleDES
  • RIPEMD160

이 변경 내용은 Get-FileHash cmdlet에 영향을 미칩니다.

$c0 cmdlet에서 $null 전달 시, 오류 대신 모든 개체를 반환하지 않도록 유효성 검사를 추가하십시오.

다음 중 어느 하나로 패스하면 $null 오류가 발생합니다:

  • 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에 있을 때 가져오기 시 적용됩니다.

이전에 Export-Csv로 내보내고 TypeInformation로 가져온 객체는 ConvertFrom-Csv의 형식 정보를 유지하지 않았습니다. 이 변경은 CSV 파일에서 사용할 수 있는 경우 회원에 유형 정보를 pstypenames에 추가합니다.

-NoTypeInformation 가 기본값입니다. Export-Csv

이전에는 cmdlet이 Export-Csv 개체의 형식 이름을 포함하는 첫 번째 줄로 주석을 출력했습니다. 변경 내용은 대부분의 CSV 도구에서 인식되지 않으므로 기본적으로 형식 정보를 제외합니다. 이 변경 사항은 고객 피드백을 해결하기 위해 수행되었습니다.

이전 행동을 유지하기 위해 사용 -IncludeTypeInformation 하세요.

*Remove-Item에 대한 레지스트리 경로에서 사용할 수 있습니다.

이전에는 -LiteralPath 와일드카드를 -Path와 동일하게 취급했고, 와일드카드가 파일을 찾지 못하면 조용히 종료되었습니다. 올바른 동작은 문자 -LiteralPath 그대로 있어야 하며, 파일이 존재하지 않으면 오류가 발생해야 합니다. 변경 사항은 -Literal와 함께 사용되는 와일드카드를 문자 그대로 처리하는 것입니다.

Group-Object 이제 그룹을 정렬합니다.

성능 개선의 일환으로, Group-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은 Windows에서 more.com를 래핑하는 more 기능을 제공했습니다. 이제 해당 함수가 제거되었습니다.

또한 help 함수는 Windows에서는 more.com을 사용하거나, 비 Windows 플랫폼에서는 $Env:PAGER가 지정된 시스템 기본 페이지 프로그램을 사용하도록 변경되었습니다.

cd DriveName: 이제 사용자를 해당 드라이브의 현재 작업 디렉터리로 되돌려 보냅니다

이전에 Set-Location 또는 cd을 사용하여 PSDrive로 돌아가면 사용자가 해당 드라이브의 기본 위치로 자동으로 보내졌습니다. 이제 사용자는 해당 세션에 대해 마지막으로 알려진 현재 작업 디렉터리로 전송됩니다.

cd - 이전 디렉터리로의 반환

C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>

또는 Linux에서 다음을 수행합니다.

PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>

또한, cdcd --$HOME로 변환됩니다.

Update-Help 비관리자로서

대중의 Update-Help 요구에 따라 더 이상 관리자 역할을 할 필요가 없습니다. Update-Help 이제 도움말을 사용자 범위 폴더에 저장하는 것이 기본값입니다.

Where-Object -Not

매개 변수를 -Not에 추가하여, 속성이 없거나 속성 값이 null/비어있는 개체를 파이프라인 Where-Object에서 필터링할 수 있습니다.

예를 들어 이 명령은 정의된 종속 서비스가 없는 모든 서비스를 반환합니다.

Get-Service | Where-Object -Not DependentServices

Web Cmdlet 변경 내용

Web Cmdlet의 기본 .NET API가 System.Net.Http.HttpClient 변경되었습니다. 이 변경은 많은 이점을 제공합니다. 그러나 이러한 변경 및 Internet Explorer와의 상호 운용성 부족으로 인해 Invoke-WebRequestInvoke-RestMethod 내에서 여러 호환성 문제가 발생했습니다.

  • Invoke-WebRequest 이제 기본 HTML 구문 분석만 지원합니다. Invoke-WebRequest 항상 객체를 BasicHtmlWebResponseObject 반환합니다. ParsedHtmlForms 속성이 제거되었습니다.
  • BasicHtmlWebResponseObject.Headers 값은 이제 String[] 가 아니라 String입니다.
  • BasicHtmlWebResponseObject.BaseResponse 이제 객체가 되었다 System.Net.Http.HttpResponseMessage .
  • 웹 Cmdlet 예외의 Response 속성이 이제 System.Net.Http.HttpResponseMessage 객체입니다.
  • 엄격한 RFC 헤더 파싱이 이제 -Headers-UserAgent 매개변수의 기본 설정입니다. 이 부분은 로 -SkipHeaderValidation우회할 수 있습니다.
  • file:// 그리고 ftp:// URI 제도는 더 이상 지원되지 않습니다.
  • System.Net.ServicePointManager 설정은 더 이상 존중되지 않습니다.
  • 현재 macOS에서 사용할 수 있는 인증서 기반 인증이 없습니다.
  • -Credential을(를) http:// URI에서 사용 시 오류가 생깁니다. 오류를 억제하기 위해 URI를 https:// 사용하거나 매개변수를 -AllowUnencryptedAuthentication 제공하세요.
  • -MaximumRedirection 이제 리디렉션 시도가 제공된 한도를 초과하면 마지막 리디렉션 결과를 반환하지 않고 종료 오류가 발생합니다.
  • PowerShell 6.2에서는 JSON 응답에 대한 UTF-8 인코딩을 기본적으로 변경했습니다. JSON 응답에 문자 집합이 제공되지 않는 경우 기본 인코딩은 RFC 8259당 UTF-8이어야 합니다.
  • 응답의 경우 기본 인코딩이 UTF-8 application-json 로 설정됨
  • 표준 규격이 아닌 헤더를 허용하는 -SkipHeaderValidation 매개 변수가 추가 Content-Type
  • 간소화된 지원을 지원하기 위한 매개 변수가 추가 -Formmultipart/form-data
  • 관계 키의 대/소문자를 구분하지 않는 준수하는 처리
  • 웹 cmdlet에 대한 매개 변수 -Resume 추가됨

Invoke-RestMethod 는 데이터가 반환되지 않을 때 유용한 정보를 반환합니다.

API가 null만 반환할 때, Invoke-RestMethod은 이를 문자열 "null" 대신 문자열 $null로 직렬화했습니다. 이 변경은 Invoke-RestMethod의 로직을 수정하여 유효한 단일 값 JSON 리터럴null$null로 올바르게 직렬화합니다.

웹 Cmdlet은 암호화되지 않은 연결을 통해 -Credential가 전송될 때 경고를 표시합니다.

HTTP를 사용하는 경우 콘텐츠가 암호를 포함하여 평문으로 전송됩니다. 이 변경은 기본적으로 이를 허용하지 않으며 자격 증명이 안전하지 않게 전달되는 경우 오류를 반환합니다. 사용자는 스위치를 -AllowUnencryptedAuthentication 이용해 이 과정을 우회할 수 있습니다.

웹 cmdlet의 매개 변수가 다음과 같이 작동하도록 만들기 -OutFile-LiteralPath

PowerShell 7.1부터 웹 cmdlet의 OutFile 매개 변수는 LiteralPath 처럼 작동하며 와일드카드를 처리하지 않습니다.

API 변경 사항

클래스 제거 AddTypeCommandBase

성능 향상을 위해 Add-Type에서 AddTypeCommandBase 클래스가 제거되었습니다. 이 클래스는 cmdlet에서 Add-Type 만 사용되며 사용자에게 영향을 주지 않아야 합니다.

Add-Type에서 지원 언어에서 제외됨 VisualBasic

과거에는 Add-Type cmdlet을 사용하여 Visual Basic 코드를 컴파일할 수 있습니다. Visual Basic은 Add-Type와 거의 사용되지 않았습니다. PowerShell의 크기를 줄이기 위해 이 기능을 제거했습니다.

RunspaceConfiguration 지원이 제거되었습니다

이전에는 API를 사용하여 프로그래밍 방식으로 PowerShell Runspace를 만들 때 레거시 RunspaceConfiguration 또는 최신 InitialSessionState 클래스를 사용할 수 있었습니다. 이 변경으로 인해 RunspaceConfiguration 의 지원이 제거되었고, 오직 InitialSessionState만 지원합니다.

CommandInvocationIntrinsics.InvokeScript에 인수를 바인딩하고 $input 대신 $args에 바인딩합니다.

매개 변수의 위치가 잘못되어 인수가 인수 대신 입력으로 전달되었습니다.

ClrVersion에서 BuildVersion$PSVersionTable 속성을 제거하십시오.

ClrVersion$PSVersionTable 속성은 CoreCLR에서 효과적이지 않습니다. 최종 사용자는 해당 값을 사용하여 호환성을 결정해서는 안 됩니다.

BuildVersion 속성은 Windows 이외의 플랫폼에서 사용할 수 없는 Windows 빌드 버전에 연결되었습니다. GitCommitId 이 속성을 사용하여 PowerShell의 정확한 빌드 버전을 검색합니다.

유니코드 이스케이프 구문 분석 구현

`u#### 또는 `u{####} 해당 유니코드 문자로 변환됩니다. 리터럴 `u를 출력하려면 백틱을 이스케이프합니다: ``u.

PS 함수에서 ValueFromRemainingArguments와(과) 관련된 매개 변수 바인딩 문제

ValueFromRemainingArguments 이제 값들을 단일 값이 아닌 배열로 반환합니다.

CommandTypes.WorkflowWorkflowInfoCleaned의 정리된 사용

CommandTypes.WorkflowWorkflowInfo 사용과 관련된 코드를 정리합니다.

이러한 작은 호환성이 손상되는 변경 사항은 주로 도움말 공급자 코드에 영향을 미칩니다.

  • 공용 생성자를 WorkflowInfo 내부로 변경합니다. 더 이상 워크플로를 지원하지 않으므로 사용자가 인스턴스를 만들 Workflow 수 없도록 하는 것이 좋습니다.
  • 워크플로 디버깅에만 사용되므로 System.Management.Automation.DebugSource 형식을 제거합니다.
  • 워크플로 디버깅에만 사용되는 추상 클래스 SetParent에서 오버로드 를 제거합니다.
  • 파생 클래스 SetParent에서 동일한 오버로드 를 제거합니다.

대리자로 변환할 때 PSObjectScriptBlock로 반환 결과를 래핑하지 마세요.

a ScriptBlock 가 C# 컨텍스트에서 사용할 위임자 타입으로 변환될 때, 결과를 a PSObject 로 감싸는 것은 불필요한 문제를 일으킵니다:

  • 값을 대리자 반환 유형 PSObject로 변환할 때, 본질적으로 언패킹됩니다. 그래서 그건 PSObject 불필요해요.
  • 대리자 반환 타입이 object일 때, 이것은 PSObject으로 감싸져서 C# 코드에서 작업하기 어렵습니다.

이 변경 후에는 반환된 객체가 기본 객체가 됩니다.

원격 지원

WinRM을 사용하는 PSRP(PowerShell Remoting)는 비 Windows 플랫폼에서 지원되지 않습니다. Windows WinRM을 통해 PSRP(PowerShell Remoting)를 사용하여 다른 Windows 머신에 연결할 수 있습니다. 또한 PowerShell은 모든 플랫폼(Windows, macOS 및 Linux)에서 SSH를 통해 원격 작업을 지원합니다. 자세한 내용은 PowerShell에서 SSH 리모팅을 참조하세요.

PowerShell Direct for Containers는 pwsh을(를) 먼저 사용하려고 시도합니다.

PowerShell Direct는 네트워크 연결 또는 기타 원격 관리 서비스 없이 Hyper-V VM 또는 컨테이너에 연결할 수 있는 PowerShell 및 Hyper-V 기능입니다.

과거에는 컨테이너의 기본 제공 Windows PowerShell 인스턴스를 사용하여 PowerShell Direct가 연결되었습니다. 이제 PowerShell Direct는 먼저 사용 가능한 pwsh.exe를 환경 변수 PATH로 연결을 시도합니다. 사용할 수 없을 경우 pwsh.exe를, PowerShell Direct는 powershell.exe을 사용하게 됩니다.

Enable-PSRemoting 이제 프리뷰 버전마다 별도의 리모팅 엔드포인트를 생성합니다

Enable-PSRemoting 이제 두 가지 원격 세션 구성을 생성합니다:

  • PowerShell의 주 버전용 하나입니다. 예: PowerShell.6. 부 버전 업데이트에서 "시스템 수준" PowerShell 6 세션 구성으로 사용할 수 있는 이 엔드포인트
  • 하나의 버전별 세션 구성, 예를 들어: PowerShell.6.1.0

이 동작은 여러 PowerShell 6 버전을 설치하고 동일한 컴퓨터에 액세스할 수 있도록 하려는 경우에 유용합니다.

또한, PowerShell 미리보기 버전은 이제 cmdlet을 Enable-PSRemoting 실행한 후 자체 원격 세션 구성을 갖게 됩니다:

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

user@host:port SSH에서 지원하는 구문

SSH 클라이언트는 일반적으로 user@host:port 형식의 연결 문자열 지원합니다. PowerShell 원격에 대한 프로토콜로 SSH를 추가하여 이 형식의 연결 문자열 대한 지원을 추가했습니다.

Enter-PSSession -HostName fooUser@ssh.contoso.com:2222

원격 분석은 환경 변수로만 비활성화할 수 있습니다.

PowerShell은 시작 시 기본 원격 분석 데이터를 Microsoft 보냅니다. 데이터에는 OS 이름, OS 버전 및 PowerShell 버전이 포함됩니다. 이 데이터를 통해 PowerShell이 사용되는 환경을 더 잘 이해할 수 있으며 새로운 기능 및 수정 사항의 우선 순위를 지정할 수 있습니다.

이 원격 분석을 옵트아웃하려면 환경 변수 POWERSHELL_TELEMETRY_OPTOUTtrue, yes또는 1설정합니다. 텔레메트리를 비활성화하기 위해 파일 DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY 삭제는 더 이상 지원하지 않습니다.