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.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 Workflow Foundation(WF ) 위에 구축되어 장시간 실행 또는 병렬화된 작업을 위한 견고한 런북을 생성할 수 있게 합니다.
.NET Core의 Windows Workflow Foundation에 대한 지원이 부족하여 PowerShell에서 PowerShell 워크플로를 제거했습니다.
나중에 PowerShell 워크플로 없이 PowerShell 언어에서 네이티브 병렬 처리/동시성을 사용하도록 설정하려고 합니다.
OS를 다시 시작한 후 검사점을 사용하여 스크립트를 다시 시작해야 하는 경우 작업 스케줄러를 사용하여 OS 시작 시 스크립트를 실행하는 것이 좋지만 스크립트는 자체 상태를 유지해야 합니다(예: 파일에 유지).
PowerShell에서 제거된 Cmdlet
PowerShell에 포함된 모듈의 경우 다양한 호환성 이유 또는 지원되지 않는 API 사용을 위해 PowerShell에서 다음 cmdlet이 제거되었습니다.
CimCmdlets
Export-BinaryMiLog
Microsoft.PowerShell.Core
Add-PSSnapinExport-ConsoleGet-PSSnapinRemove-PSSnapinResume-JobSuspend-Job
Microsoft.PowerShell.Diagnostics
Export-CounterImport-Counter
Microsoft.PowerShell.Management
Add-ComputerCheckpoint-ComputerClear-EventLogComplete-TransactionDisable-ComputerRestoreEnable-ComputerRestoreGet-ComputerRestorePointGet-ControlPanelItemGet-EventLogGet-TransactionGet-WmiObjectInvoke-WmiMethodLimit-EventLogNew-EventLogNew-WebServiceProxyRegister-WmiEventRemove-ComputerRemove-EventLogRemove-WmiObjectReset-ComputerMachinePasswordRestore-ComputerSet-WmiInstanceShow-ControlPanelItemShow-EventLogStart-TransactionTest-ComputerSecureChannelUndo-TransactionUse-TransactionWrite-EventLog
Microsoft.PowerShell.Utility
Convert-StringConvertFrom-String
PSDesiredStateConfiguration
Disable-DscDebugEnable-DscDebugGet-DscConfigurationGet-DscConfigurationStatusGet-DscLocalConfigurationManagerPublish-DscConfigurationRemove-DscConfigurationDocumentRestore-DscConfigurationSet-DscLocalConfigurationManagerStart-DscConfigurationStop-DscConfigurationTest-DscConfigurationUpdate-DscConfiguration
WMI v1 cmdlet
다음 WMI v1 cmdlet이 PowerShell에서 제거되었습니다.
Register-WmiEventSet-WmiInstanceInvoke-WmiMethodGet-WmiObjectRemove-WmiObject
CimCmdlets 모듈(일명 WMI v2) cmdlet은 동일한 기능을 수행하고 새 기능과 다시 디자인된 구문을 제공합니다.
New-WebServiceProxy 명령어 삭제
.NET Core는 SOAP 프로토콜을 사용하기 위한 서비스를 제공하는 Windows Communication Framework를 지원하지 않습니다. 이 cmdlet은 SOAP가 필요하기 때문에 제거되었습니다.
*-Transaction 삭제된 CMDLETS
이러한 cmdlet은 사용량이 매우 제한적입니다. 그들을 위한 지원을 중단하기로 결정했습니다.
Complete-TransactionGet-TransactionStart-TransactionUndo-TransactionUse-Transaction
*-EventLog cmdlet
지원되지 않는 API *-EventLog 를 사용하므로 powerShell에서 cmdlet이 제거되었습니다.
Get-WinEvent
New-WinEvent 그리고 윈도우에서 이벤트를 생성하고 생성할 수 있습니다.
WPF(Windows Presentation Framework)를 사용하는 Cmdlet
.NET Core 3.1은 WPF에 대한 지원을 추가했기 때문에 PowerShell 7.0 릴리스는 다음과 같은 Windows 관련 기능을 복원했습니다.
-
Show-Command커맨드 렛 (cmdlet) -
Out-GridView커맨드렛 -
의 ShowWindow 매개 변수
Get-Help
PowerShell 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를 에서 로 변경했습니다. 이 변경은 비윈도우 플랫폼에서 비PowerShell 셸에서 실행되는 PowerShell 스크립트의 사용#!(즉, shebang)을 수정합니다. 또한pwsh foo.ps1pwsh fooScript-File. 하지만 이 변경은 명령어를 실행할-c때 명시적으로 또는-Command를 지정pwsh.exe -Command Get-Command해야 합니다. -
pwsh는 대화형 셸을 나타내기 위해-i스위치(또는-Interactive스위치)를 수용합니다. 이렇게 하면 PowerShell을 Unix 플랫폼에서 기본 셸로 사용할 수 있습니다. - 매개변수 와
-ImportSystemModules를-PSConsoleFile제거했습니다pwsh.exe. - 변경
pwsh -Version된 도움말과 내장된 도움말pwsh.exe은 다른 네이티브 도구들과 일치합니다. -
-File및-Command에 대한 잘못된 인수 오류 메시지와 Unix 표준에 따른 종료 코드 - Windows에 매개변수를 추가했습니다
-WindowStyle. 마찬가지로, 비 Windows 플랫폼의 패키지 기반 설치 업데이트는 현재 위치 업데이트입니다.
단축된 이름은 Windows가 아닌 플랫폼의 셸 이름 지정과도 일치합니다.
bool 매개 변수를 사용하여 PowerShell 스크립트 실행 지원
PowerShell 스크립트를 실행하기 위해 pwsh.exe를 사용할 때 이전에는 $true/$false를 매개 변수 값으로 전달할 방법이 제공되지 않았습니다. 파라미터에 대한 파싱된 값 지원 $true/$false 이 추가되었습니다. 스위치 값도 지원됩니다.
Windows PowerShell과의 향상된 하위 호환성
Windows의 경우, 새로운 스위치 매개변수 UseWindowsPowerShell 이 Import-Module추가되었습니다. 이 스위치는 PowerShell 7에서 로컬 Windows PowerShell 프로세스를 사용하여 해당 모듈에 포함된 모든 cmdlet을 암묵적으로 실행하는 프록시 모듈을 생성합니다. 자세한 내용은 Import-Module참조하세요.
어떤 Microsoft 모듈이 PowerShell 7.0과 호환되는지에 대한 자세한 내용은 모듈 호환성 표를 참조하세요.
Windows Microsoft Update 지원
PowerShell 7.2는 Microsoft 업데이트에 대한 지원을 추가했습니다. 이 기능을 활성화하면 Windows Update for Business, WSUS, SCCM, 또는 설정의 인터랙티브 WU 대화 중 어떤 방식이든 전통적인 Windows Update(WU) 관리 흐름에서 최신 PowerShell 7 업데이트를 받게 됩니다.
PowerShell 7.2 MSI 패키지에는 다음과 같은 명령줄 옵션이 포함되어 있습니다:
-
USE_MU- 이 속성에는 다음 두 가지 가능한 값이 있습니다.-
1(기본값) - Microsoft Update 또는 WSUS를 통한 업데이트 선택에 -
0- Microsoft 업데이트 또는 WSUS를 통해 업데이트를 옵트인하지 마세요.
-
ENABLE_MU-
1(기본값) - Microsoft Update, 자동 업데이트 또는 Windows 업데이트 사용에 옵트함 -
0- Microsoft 업데이트 자동 업데이트 또는 Windows 업데이트 사용을 옵트인하지 마세요.
-
엔진 변경 사항
PowerShell을 기본 Unix 셸로 지원
Unix에서는 셸이 대화형 셸을 수락하도록 하는 것은 관례이며, 많은 도구가 이러한 동작을 기대합니다(예:script PowerShell을 기본 셸로 설정할 때). 이 경우, 셸은 -i 스위치를 사용하여 호출됩니다. 이 변화는 이전에는 약어-i로 사용될 수 있었던 것으로, -InputFormat 이제는 가 필요합니다-in.
사용자 지정 스냅인
PowerShell 스냅인은 PowerShell 커뮤니티에서 널리 채택되지 않는 PowerShell 모듈의 선행 작업입니다.
스냅인을 지원하는 복잡성과 커뮤니티에서의 사용 부족으로 인해 PowerShell에서 사용자 지정 스냅인을 더 이상 지원하지 않습니다.
실험적 기능 플래그
PowerShell 6.2는 실험적 기능을 지원합니다. 이를 통해 PowerShell 개발자는 디자인이 완료되기 전에 새 기능을 제공하고 피드백을 받을 수 있습니다. 이렇게 하면 디자인이 진화함에 따라 호환성이 손상되는 변경을 방지할 수 있습니다.
사용 가능한 실험 기능 목록을 얻기 위해 사용하세요 Get-ExperimentalFeature . 이 기능들은 와 Enable-ExperimentalFeature로 활성화 Disable-ExperimentalFeature 하거나 비활성화할 수 있습니다.
GAC에서 로드하기 전에 모듈 기본 경로에서 어셈블리 로드
이전에, 이진 모듈이 GAC에 모듈 어셈블리를 포함하고 있을 때, 우리는 GAC에서 어셈블리를 먼저 로드하고 나서 모듈 기본 경로에서 로드했습니다.
값 형식 요소 형식이 있는 컬렉션에 대한 null 요소 검사 건너뛰기
매개변수와 Mandatory 속성 ValidateNotNull 에 대해, ValidateNotNullOrEmpty 컬렉션의 요소 유형이 값 유형이라면 널 요소 검사를 건너뛰세요.
$?
ParenExpression, SubExpression 및 ArrayExpression에 대한 보존
이 PR은 (...)하위 파이프라인$(...), 하위 표현식@() 및 배열 표현식을 컴파일하는 방식을 변경하여 $? 자동으로 true가 되지 않도록 합니다. 대신 값 $? 은 실행된 파이프라인 또는 문의 결과에 따라 달라집니다.
$?가 네이티브 명령이 stderr에 쓸 때 $false이 되지 않도록 수정합니다.
$?는 네이티브 명령이 stderr에 쓸 때 $false로 설정되지 않습니다. 네이티브 명령은 실패를 나타낼 의도 없이 stderr에 쓰는 것이 일반적입니다. 네이티브 명령이 0이 아닌 종료 코드를 가질 때에만 $?가 $false로 설정됩니다.
$ErrorActionPreference가 네이티브 명령의 stderr 출력에 영향을 미치지 않도록 함
네이티브 명령은 실패를 나타낼 의도 없이 stderr에 쓰는 것이 일반적입니다. 이 변경 stderr 으로 인해 출력은 여전히 ErrorRecord 객체에 캡처되지만, $ErrorActionPreference가 네이티브 명령어에서 나온 경우 런타임은 더 이상 적용되지 않습니다.
ASCII 대신 인코딩을 사용하도록 $OutputEncoding 변경 UTF-8 NoBOM
이전 인코딩 ASCII(7비트)는 경우에 따라 출력을 잘못 변경합니다. 기본값을 설정하면 UTF-8 NoBOM 대부분의 도구 및 운영 체제에서 지원하는 인코딩을 사용하여 유니코드 출력이 유지됩니다.
매개 변수 -Encoding가 System.Text.Encoding 형식인 cmdlet 통합
FileSystem -Encoding 공급자 cmdlet에서 값 Byte 이 제거되었습니다. 새로운 매개변수 -AsByteStream, 는 바이트 스트림이 입력으로 필요한지 또는 출력이 바이트 스트림임을 지정하는 데 사용됩니다.
비 Windows 플랫폼에서 인코딩을 New-ModuleManifest에서 UTF8NoBOM로 변경
New-ModuleManifest는 이전에 BOM을 사용하여 UTF-16 형식으로 매니페스트를 생성하여 Linux 도구에 문제를 일으켰습니다psd1. 이 획기적인 변경으로 인해 비윈도우 플랫폼에서는 인 New-ModuleManifest 코딩이 UTF(BOM 없음)로 변경됩니다.
대부분의 기본 별칭에서 AllScope를 제거하십시오.
스코프 생성 AllScope 속도를 높이기 위해 대부분의 기본 별칭에서 제거되었습니다.
AllScope 조회가 더 빠른 몇몇 자주 사용되는 가명에 남겨졌습니다.
-Verbose 및 -Debug은 더 이상 $ErrorActionPreference을 재정의하지 않습니다.
이전에는 -Verbose 만약 또는 -Debug 명시되어 있었다면, 의 $ErrorActionPreference동작을 덮어썼다. 이 변화 -Verbose-Debug 로 인해 더 이상 의 $ErrorActionPreference동작에 영향을 미치지 않습니다.
또한 매개 변수는 -Debug$DebugPreference 대신 계속으로 설정 됩니다.
$PSCulture 세션에서의 문화적 변화 내용을 일관되게 반영하게 하십시오
Windows PowerShell에서는 현재 문화권 값이 캐시되기 때문에 세션 시작 후에 문화권이 변경되면 값이 동기화되지 않을 수 있습니다. 이 캐싱 동작은 PowerShell 코어에서 수정되었습니다.
명시적으로 지정된 명명된 매개 변수가 해시 테이블 스플래팅에서 동일한 매개 변수를 대체하도록 허용
이 변경 사항으로 인해 스플래팅의 명명된 매개 변수는 명시적으로 지정된 모든 명명된 매개 변수가 먼저 바인딩된 후에 바인딩되도록 매개 변수 목록의 끝으로 이동됩니다. 지정한 명명된 매개 변수를 찾을 수 없는 경우 단순 함수에 대한 매개 변수 바인딩은 오류를 throw하지 않습니다. 알려지지 않은 이름 있는 매개변수는 단순 함수의 매개변수에 $args 묶여 있습니다. 스플랫을 인수 목록의 맨 끝으로 이동시키면 매개변수가 나타나 $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
이 작업에는 항목에 ForEach 대해 조작하고 필터링할 수 있는 방법도 포함됩니다:WherePSCustomObject
$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 콘텐츠를 렌더링하는 데 사용되는 색과 스타일을 설정합니다.
- 표시-Markdown - 콘솔 또는 HTML로 Markdown 콘텐츠를 표시합니다.
새 Test-Json cmdlet
Test-Json cmdlet은 문자열이 유효한 JSON(JavaScript Object Notation) 문서인지 여부를 테스트하고 제공된 스키마에 대해 JSON 문서를 선택적으로 확인할 수 있습니다.
이 cmdlet은 PowerShell 6.1에서 도입되었습니다.
실험적 기능을 지원하는 새 cmdlet
실험적 기능을 지원하기 위해 PowerShell 6.2에 다음 cmdlet이 추가되었습니다.
- 실험적 기능 비활성화
- Enable-ExperimentalFeature
- Get-ExperimentalFeature
새 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. 그러나 이 방법은 it Get-Module 가 와 호환Import-Module된다고 표시될 때만 가군 CompatiblePSEditionCore 을 노출한다.
이 동작을 스위치 매개변수를 사용 -SkipEditionCheck 해 모든 모듈을 표시하도록 오버라이드할 수 있습니다.
또한 테이블 출력에 속성을 추가 PSEdition 했습니다.
-lp 모든 -LiteralPath 매개변수에 대한 별칭
모든 기본 제공 PowerShell cmdlet이 매개 변수 -LiteralPath을(를) 사용하는 경우 표준 매개 변수 별칭 -lp을 만들었습니다.
a*b이(가) 실제로 존재하지 않으면 Get-Item -LiteralPath a*b을(를) 수정하여 오류를 반환하십시오.
이전에는 -LiteralPath 와일드카드 -Path 가 파일을 찾지 못하면 조용히 종료했습니다. 올바른 동작은 문자 -LiteralPath 그대로 있어야 하며, 파일이 존재하지 않으면 오류가 발생해야 합니다. 변경은 와 -Literal 일드카드를 문자 그대로 다루는 것입니다.
에서 작업 디렉터리를 현재 디렉터리로 설정 Start-Job
이제 cmdlet은 Start-Job 현재 디렉터리를 새 작업의 작업 디렉터리로 사용합니다.
*-Computer cmdlet에서 -Protocol 제거
매개 변수가 -Protocol 다음 cmdlet에서 제거되었습니다.
Rename-ComputerRestart-ComputerStop-Computer
DCOM은 더 이상 원격에 대해 지원되지 않습니다. cmdlet들은 WSMAN 원격만을 지원합니다.
*-Service cmdlet에서 -ComputerName 제거
PSRP -ComputerName 의 일관된 사용을 장려하기 위해 이 매개변수가 명령어에서 제거 *-Service 되었습니다. 대신 원격 컴퓨터에서 cmdlet을 실행하는 데 사용합니다 Invoke-Command .
반환된 줄에 구분 기호를 포함하지 않도록 수정 Get-Content -Delimiter
이전에는 출력 Get-Content -Delimiter 방식이 일관성이 없고 불편했는데, 구분자를 제거하기 위해 데이터를 추가로 처리해야 했기 때문입니다. 이렇게 변경하면 반환된 줄의 구분 기호가 제거됩니다.
변경 내용 Format-Hex
이제 매개 변수는 -Raw 아무 것도 수행하지 않습니다. cmdlet은 Format-Hex 해당 형식에 대한 모든 바이트를 포함하는 숫자의 실제 표현을 표시합니다. 이 변경 전에는 -Raw 매개 변수가 수행한 작업입니다.
속성 이름의 오타 수정 Get-ComputerInfo
BiosSerialNumber a로 잘못 표기되어 BiosSeralNumber 올바른 철자로 변경되었습니다.
사용 가능한 해시 알고리즘 변경
.NET에서 다음 해시 알고리즘이 제거되었습니다.
MACTripleDESRIPEMD160
이 변경 내용은 Get-FileHash cmdlet에 영향을 미칩니다.
$c0 cmdlet에서 $null 전달 시, 오류 대신 모든 개체를 반환하지 않도록 유효성 검사를 추가하십시오.
다음 중 어느 하나로 패스하면 $null 오류가 발생합니다:
Get-Credential -UserNameGet-Event -SourceIdentifierGet-EventSubscriber -SourceIdentifierGet-Help -NameGet-PSBreakpoint -ScriptGet-PSProvider -PSProviderGet-PSSessionConfiguration -NameGet-Runspace -NameGet-RunspaceDebug -RunspaceNameGet-Service -NameGet-TraceSource -NameGet-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
이제 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 에 '랩드(wrapped more.com)'라는 함수를 제공했습니다. 이제 해당 함수가 제거되었습니다.
또한, 이 help 기능은 Windows에서 사용 more.com 되도록 변경되었고, 비Windows 플랫폼에서는 시스템 기본 $Env:PAGER 호출기로 지정되었습니다.
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>
또한, cdcd -- 로 $HOME변환
Update-Help 비관리자로서
대중의 Update-Help 요구에 따라 더 이상 관리자 역할을 할 필요가 없습니다.
Update-Help 이제 도움말을 사용자 범위 폴더에 저장하는 것이 기본값입니다.
Where-Object -Not
매개 변수를 -Not에 추가하여, 속성이 없거나 속성 값이 null/비어있는 개체를 파이프라인 Where-Object에서 필터링할 수 있습니다.
예를 들어 이 명령은 정의된 종속 서비스가 없는 모든 서비스를 반환합니다.
Get-Service | Where-Object -Not DependentServices
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. - 웹 Cmdlet 예외에 관한 속성은
Response이제 객체가 되었습니다System.Net.Http.HttpResponseMessage. - 엄격한 RFC 헤더 파싱이 이제 AND
-Headers매개변수에-UserAgent기본값이 되었습니다. 이 부분은 로-SkipHeaderValidation우회할 수 있습니다. -
file://그리고ftp://URI 제도는 더 이상 지원되지 않습니다. -
System.Net.ServicePointManager설정은 더 이상 존중되지 않습니다. - 현재 macOS에서 사용할 수 있는 인증서 기반 인증이 없습니다.
- URI 위에
-Credential오버 사용하면http://오류가 발생합니다. 오류를 억제하기 위해 URI를https://사용하거나 매개변수를-AllowUnencryptedAuthentication제공하세요. -
-MaximumRedirection이제 리디렉션 시도가 제공된 한도를 초과하면 마지막 리디렉션 결과를 반환하지 않고 종료 오류가 발생합니다. - PowerShell 6.2에서는 JSON 응답에 대한 UTF-8 인코딩을 기본적으로 변경했습니다. JSON 응답에 문자 집합이 제공되지 않는 경우 기본 인코딩은 RFC 8259당 UTF-8이어야 합니다.
- 응답의 경우 기본 인코딩이 UTF-8
application-json로 설정됨 - 표준 규격이 아닌 헤더를 허용하는
-SkipHeaderValidation매개 변수가 추가Content-Type됨 - 간소화된 지원을 지원하기 위한 매개 변수가 추가
-Form됨multipart/form-data - 관계 키의 대/소문자를 구분하지 않는 준수하는 처리
- 웹 cmdlet에 대한 매개 변수
-Resume추가됨
Invoke-RestMethod 는 데이터가 반환되지 않을 때 유용한 정보를 반환합니다.
API가 null만 반환할 때, Invoke-RestMethod은 이를 문자열 $null 대신 문자열 "null"로 직렬화했습니다. 이 변경은 유효한 단일 값 JSON Invoke-RestMethod 리터럴null을 올바르게 직렬화하는 로직 $null 을 수정합니다.
웹 Cmdlet은 암호화되지 않은 연결을 통해 -Credential가 전송될 때 경고를 표시합니다.
HTTP를 사용하는 경우 암호를 포함한 콘텐츠가 지우기 텍스트로 전송됩니다. 이 변경은 기본적으로 이를 허용하지 않으며 자격 증명이 안전하지 않게 전달되는 경우 오류를 반환합니다. 사용자는 스위치를 -AllowUnencryptedAuthentication 이용해 이 과정을 우회할 수 있습니다.
웹 cmdlet의 매개 변수가 다음과 같이 작동하도록 만들기 -OutFile-LiteralPath
PowerShell 7.1부터 웹 cmdlet의 OutFile 매개 변수는 LiteralPath 처럼 작동하며 와일드카드를 처리하지 않습니다.
API 변경 사항
클래스 제거 AddTypeCommandBase
AddTypeCommandBase 성능 향상을 위해 이 클래스는 제외 Add-Type 되었습니다. 이 클래스는 cmdlet에서 Add-Type 만 사용되며 사용자에게 영향을 주지 않아야 합니다.
Add-Type에서 지원 언어에서 제외됨 VisualBasic
과거에는 cmdlet을 사용해 Add-Type Visual Basic 코드를 컴파일할 수 있었습니다. Visual Basic은 .Add-Type PowerShell의 크기를 줄이기 위해 이 기능을 제거했습니다.
RunspaceConfiguration 지원이 제거되었습니다
이전에는 API를 사용하여 프로그래밍 방식으로 PowerShell Runspace를 만들 때 레거시 RunspaceConfiguration 또는 최신 InitialSessionState 클래스를 사용할 수 있었습니다. 이 변경으로 인해 지원 RunspaceConfiguration 은 제거되었고, 오직 InitialSessionState.
CommandInvocationIntrinsics.InvokeScript에 인수를 바인딩하고 $args 대신 $input에 바인딩합니다.
매개 변수의 위치가 잘못되어 인수가 인수 대신 입력으로 전달되었습니다.
$PSVersionTable에서 ClrVersion 및 BuildVersion 속성을 제거하십시오.
$PSVersionTable의 ClrVersion 속성은 CoreCLR에서 효과적이지 않습니다. 최종 사용자는 해당 값을 사용하여 호환성을 결정해서는 안 됩니다.
이 속성은 BuildVersion Windows가 아닌 플랫폼에서는 사용할 수 없는 Windows 빌드 버전에 연결되었습니다.
GitCommitId 이 속성을 사용하여 PowerShell의 정확한 빌드 버전을 검색합니다.
유니코드 이스케이프 구문 분석 구현
`u#### 또는 `u{####} 해당 유니코드 문자로 변환됩니다. 리터럴 `u를 출력하려면 백틱을 이스케이프합니다: ``u.
PS 함수에서 ValueFromRemainingArguments와(과) 관련된 매개 변수 바인딩 문제
ValueFromRemainingArguments 이제 값들을 단일 값이 아닌 배열로 반환합니다.
그리고 의 정정된 사용 CommandTypes.WorkflowWorkflowInfoCleaned
CommandTypes.Workflow의 WorkflowInfo 사용과 관련된 코드를 정리합니다.
이러한 작은 호환성이 손상되는 변경 사항은 주로 도움말 공급자 코드에 영향을 미칩니다.
- 공용 생성자를
WorkflowInfo내부로 변경합니다. 더 이상 워크플로를 지원하지 않으므로 사용자가 인스턴스를 만들Workflow수 없도록 하는 것이 좋습니다. - 워크플로 디버깅에만 사용되므로 System.Management.Automation.DebugSource 형식을 제거합니다.
- 워크플로 디버깅에만 사용되는 추상 클래스
SetParent에서 오버로드 를 제거합니다. - 파생 클래스
SetParent에서 동일한 오버로드 를 제거합니다.
대리자로 변환할 때 ScriptBlock를 PSObject로 반환 결과를 래핑하지 마세요.
a ScriptBlock 가 C# 컨텍스트에서 사용할 위임자 타입으로 변환될 때, 결과를 a PSObject 로 감싸는 것은 불필요한 문제를 일으킵니다:
- 값을 delegate return 타입
PSObject으로 변환하면 본질적으로 언래핑됩니다. 그래서 그건PSObject불필요해요. - 대리자 반환 타입이 이면
objectaPSObject로 감싸져 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 는 PowerShell 및 Hyper-V의 기능으로, 네트워크 연결이나 기타 원격 관리 서비스 없이 Hyper-V VM이나 컨테이너에 연결할 수 있게 해줍니다.
과거에는 컨테이너의 기본 제공 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 삭제는 더 이상 지원하지 않습니다.
PowerShell