다음을 통해 공유


비 Windows 플랫폼의 PowerShell의 차이점

PowerShell은 지원되는 모든 플랫폼에서 기능 패리티를 제공하기 위해 노력하고 있습니다. 그러나 일부 기능은 다르게 동작하거나 .NET Core와 플랫폼별 차이점의 차이로 인해 사용할 수 없습니다. Windows가 아닌 플랫폼에서 PowerShell의 상호 운용성을 개선하기 위해 다른 변경 사항이 적용되었습니다.

.NET Framework 및 .NET Core

Linux 및 macOS의 PowerShell은 Microsoft Windows에서 전체 .NET Framework의 하위 집합인 .NET Core를 사용합니다. 따라서 Windows에서 실행되는 스크립트는 프레임워크의 차이로 인해 비 Windows 플랫폼에서 실행되지 않을 수 있습니다.

.NET Core 변경 사항에 대한 자세한 내용은 .NET Framework에서 .NET Core로 마이그레이션하는 경우의 중대한 변경 사항을 참조하세요.

일반 Unix 상호 운용성 변경

  • Unix 플랫폼에서 네이티브 명령 패턴 매칭에 대한 지원이 추가되었습니다. 즉, ls *.txt같은 네이티브 명령과 함께 와일드카드를 사용할 수 있습니다.
  • more 기능은 Linux $PAGER을 준수하고 기본값은 less입니다.
  • 네이티브 명령 인수를 처리할 때 후행 백슬래시는 자동으로 이스케이프됩니다.
  • Unix 플랫폼에서 NoEcho 적용하도록 ConsoleHost를 수정했습니다.
  • Unix에 PATHEXT 환경 변수를 추가하지 마세요.
  • powershell 맨 페이지가 패키지에 포함됩니다.

실행 정책

PowerShell은 Windows가 아닌 플랫폼에서 실행할 때 실행 정책을 무시합니다. Linux 및 macOS에서 Get-ExecutionPolicy무제한를 반환합니다. Set-ExecutionPolicy Linux 및 macOS에서 아무 작업도 수행하지 않습니다.

PowerShell의 대/소문자 구분

지금까지 PowerShell은 몇 가지 예외를 제외하고 균일하게 대/소문자를 구분하지 않았습니다. Unix와 유사한 운영 체제에서 파일 시스템은 주로 대/소문자를 구분하며 PowerShell은 파일 시스템의 표준을 준수합니다.

  • PowerShell에서 파일 이름을 지정할 때는 대/소문자를 정확하게 사용해야 합니다.
  • 스크립트가 모듈을 로드하려고 시도하고 모듈 이름이 올바르게 대/소문자를 지정하지 않으면 모듈 로드가 실패합니다. 모듈에서 참조하는 이름이 실제 파일 이름의 적절한 사례와 일치하지 않는 경우 이 동작으로 인해 기존 스크립트에 문제가 발생할 수 있습니다.
  • 파일 시스템의 이름은 대소문자를 구분하지만, 파일 이름의 탭 완성 기능은 대소문자를 구분하지 않습니다. 탭 완성은 대/소문자를 구분하지 않는 일치를 사용하여 이름 목록을 순환합니다.
  • Get-Help Unix 플랫폼에서 대/소문자를 구분하지 않는 패턴 일치를 지원합니다.
  • Import-Module 모듈 이름을 확인하기 위해 파일 이름과 함께 사용할 때 대/소문자를 구분하지 않습니다.

Linux 및 macOS에 대한 파일 시스템 지원

  • cmdlet에 지정된 경로는 이제 슬래시에 구애받지 않습니다(/\ 모두 디렉터리 구분 기호로 작동).
  • 이제 XDG 기본 디렉터리 사양이 준수되고 기본적으로 사용됩니다.
    • Linux/macOS 프로필 경로는 ~/.config/powershell/profile.ps1
    • 기록 저장 경로는 ~/.local/share/powershell/PSReadLine/ConsoleHost_history.txt
    • 사용자 모듈 경로는 ~/.local/share/powershell/Modules
  • Unix의 콜론 문자가 포함된 파일 및 폴더 이름 지원
  • 쉼표가 있는 스크립트 이름 또는 전체 경로 지원
  • LiteralPath 매개 변수를 사용하여 탐색 명령에서 와일드카드 확장을 억제하는 경우를 감지합니다.
  • *nix ls -R 및 Windows DIR /S 네이티브 명령처럼 작동하도록 Get-ChildItem 업데이트되었습니다. 이제 Get-ChildItem 재귀 검색 중에 발생한 심볼릭 링크를 반환하고 해당 링크가 대상으로 하는 디렉터리를 검색하지 않습니다.

.PS1 파일 확장자

PowerShell 스크립트는 인터프리터가 현재 프로세스에서 로드하고 실행하는 방법을 이해하려면 .ps1 종료해야 합니다. 현재 프로세스에서 스크립트를 실행하는 것은 PowerShell에 대해 예상되는 일반적인 동작입니다. .ps1 확장이 없는 스크립트에 #! 매직 번호를 추가할 수 있지만 이렇게 하면 새 PowerShell 인스턴스에서 스크립트가 실행되어 개체를 교환할 때 스크립트가 제대로 작동하지 않습니다. 이 동작은 Bash 또는 다른 셸에서 PowerShell 스크립트를 실행할 때 적합할 수 있습니다.

편의 별칭이 제거됨

PowerShell은 사용자 편의를 위해 Linux 명령 이름에 매핑되는 별칭 집합을 Windows에 제공합니다. Linux 및 macOS에서 기본 명령에 대한 "편의 별칭"은 경로를 지정하지 않고 네이티브 실행 파일을 실행할 수 있도록 ls, cp, mv, rm, cat, man, mountps 제거되었습니다.

로깅 (로그 기록)

macOS에서 PowerShell은 네이티브 os_log API를 사용하여 Apple의 통합 로깅 시스템로깅합니다. Linux에서 PowerShell은 유비쿼터스 로깅 솔루션인 Syslog사용합니다.

작업 제어

Linux 또는 macOS의 PowerShell에는 Unix 스타일 작업 제어 지원이 없습니다. fgbg 명령을 사용할 수 없습니다. 그러나 모든 플랫폼에서 작동하는 PowerShell 작업 사용할 수 있습니다.

파이프라인의 끝에 & 배치하면 파이프라인이 PowerShell 작업으로 실행됩니다. 파이프라인이 백그라운드로 설정되면 작업 개체가 반환됩니다. 파이프라인이 작업으로 실행되면 모든 *-Job cmdlet을 사용하여 작업을 관리할 수 있습니다. 파이프라인에서 사용되는 변수(프로세스별 변수 무시)는 작업에 자동으로 복사되므로 Copy-Item $foo $bar & 작동합니다. 작업은 사용자의 홈 디렉터리 대신 현재 디렉터리에서 실행됩니다.

원격 지원

Unix 플랫폼에서 WinRM을 사용하는 PSRP(PowerShell Remoting)에는 HTTPS를 통한 NTLM/Negotiate 또는 기본 인증이 필요합니다. macOS의 PSRP는 HTTPS를 통한 기본 인증만 지원합니다. Kerberos 기반 인증은 지원되지 않습니다.

PowerShell은 모든 플랫폼(Windows, Linux 및 macOS)에서 SSH를 통해 PSRP(PowerShell 원격)를 지원합니다. 자세한 내용은 PowerShell SSH 원격을 참조하세요.

JUST-Enough-Administration(JEA) 지원

Linux 또는 macOS의 PowerShell에서는 JEA(제한된 관리) 원격 엔드포인트를 만들 수 없습니다.

sudo, exec및 PowerShell

PowerShell은 대부분의 명령을 메모리에서 실행하므로(예: Python 또는 Ruby처럼) PowerShell의 기본 제공 명령에서 직접 sudo을(를) 사용할 수 없습니다. sudo에서 pwsh을 실행할 수 있습니다. sudo사용하여 PowerShell 내에서 PowerShell cmdlet을 실행해야 하는 경우(예: sudo Set-Date 8/18/2016) sudo pwsh Set-Date 8/18/2016사용합니다.

비 Windows 플랫폼에 포함된 모듈

Windows가 아닌 플랫폼의 경우 PowerShell에는 다음 모듈이 포함됩니다.

  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • 패키지 관리
  • PowerShellGet
  • PSReadLine
  • ThreadJob

PowerShell에서 일반적으로 사용할 수 있는 명령(cmdlet)은 Linux 또는 macOS에서 사용할 수 없습니다. 이러한 명령은 종종 이러한 플랫폼에 적용되지 않습니다. 예를 들어 레지스트리 또는 서비스와 같은 Windows 관련 기능에 대한 명령은 사용할 수 없습니다. Set-ExecutionPolicy같은 다른 명령은 존재하지만 작동하지 않습니다.

모듈 및 cmdlet의 포괄적인 목록과 지원하는 플랫폼에 대해서는 릴리스 기록모듈 및 cmdlet 참조하세요.

모듈이 더 이상 PowerShell과 함께 제공되지 않음

다양한 호환성을 위해 다음 모듈은 더 이상 PowerShell에 포함되지 않습니다.

  • ISE
  • Microsoft.PowerShell.LocalAccounts
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Operation.Validation
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

다음 Windows 관련 모듈은 Linux 또는 macOS용 PowerShell에 포함되지 않습니다.

  • CimCmdlets
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.WSMan.Management
  • PSDiagnostics

비 Windows 플랫폼에서는 Cmdlet을 사용할 수 없음

일부 cmdlet이 PowerShell에서 제거되었습니다. 다른 플랫폼은 사용할 수 없거나 Windows가 아닌 플랫폼에서 다르게 작동할 수 있습니다. PowerShell에서 제거된 cmdlet의 포괄적인 목록은 PowerShell 제거된Cmdlet을 참조하세요.

Microsoft.PowerShell.Core

Linux 또는 macOS에서는 다음 cmdlet을 사용할 수 없습니다.

  • Disable-PSRemoting
  • Enable-PSRemoting
  • Connect-PSSession
  • Disconnect-PSSession
  • Receive-PSSession
  • Get-PSSessionCapability
  • Disable-PSSessionConfiguration
  • Enable-PSSessionConfiguration
  • Get-PSSessionConfiguration
  • Register-PSSessionConfiguration
  • Set-PSSessionConfiguration
  • Unregister-PSSessionConfiguration
  • Test-PSSessionConfigurationFile

Get-Help ShowWindow 매개 변수는 비 Windows 플랫폼에서 사용할 수 없습니다. PowerShell 7.3은 linux 및 macOS용 Switch-Process cmdlet 및 exec 함수를 추가했습니다. 이러한 명령은 Windows에서 사용할 수 없습니다.

Microsoft.PowerShell.Security cmdlet

Linux 또는 macOS에서는 다음 cmdlet을 사용할 수 없습니다.

  • Get-Acl
  • Set-Acl
  • Get-AuthenticodeSignature
  • Set-AuthenticodeSignature
  • New-FileCatalog
  • Test-FileCatalog

이러한 cmdlet은 PowerShell 7.1부터만 사용할 수 있습니다.

  • Get-CmsMessage
  • Protect-CmsMessage
  • Unprotect-CmsMessage

Microsoft.PowerShell.Management cmdlet들

Linux 및 macOS에서는 다음 cmdlet을 사용할 수 없습니다.

  • Rename-Computer
  • Get-ComputerInfo
  • Get-HotFix
  • Clear-RecycleBin
  • Get-Service
  • New-Service
  • Remove-Service
  • Restart-Service
  • Resume-Service
  • Set-Service
  • Start-Service
  • Stop-Service
  • Suspend-Service
  • Set-TimeZone

다음 cmdlet은 제한 사항과 함께 사용할 수 있습니다.

  • Get-Clipboard - PowerShell 7.0 이상에서 사용 가능
  • Set-Clipboard - PowerShell 7.0 이상에서 사용 가능
  • Restart-Computer - PowerShell 7.1 이상에서 Linux 및 macOS에 사용할 수 있음
  • Stop-Computer - PowerShell 7.1 이상에서 Linux 및 macOS에 사용할 수 있음

Microsoft.PowerShell.Utility cmdlets

Linux 및 macOS에서는 다음 cmdlet을 사용할 수 없습니다.

  • Convert-String
  • ConvertFrom-String
  • ConvertFrom-SddlString
  • Out-GridView
  • Out-Printer
  • Show-Command

Linux 또는 macOS에서 사용할 수 없는 별칭

다음 표에서는 Windows가 아닌 플랫폼에서 사용할 수 없는 Windows에 사용할 수 있는 별칭을 나열합니다. 별칭이 해당 플랫폼의 네이티브 명령과 충돌하기 때문에 이러한 별칭을 사용할 수 없습니다.

별명 cmdlet
ac Add-Content
cat Get-Content
clear Clear-Host
compare Compare-Object
cp Copy-Item
cpp Copy-ItemProperty
diff Compare-Object
kill Stop-Process
ls Get-ChildItem
man help
mount New-PSDrive
mv Move-Item
ps Get-Process
rm Remove-Item
rmdir Remove-Item
sleep Start-Sleep
sort Sort-Object
start Start-Process
tee Tee-Object
write Write-Output

테이블에는 비 Windows 플랫폼에 존재하지 않는 cmdlet에 사용할 수 없는 별칭이 포함되어 있지 않습니다.

PowerShell 필요한 상태 구성(DSC)

PowerShell 7.2부터 PSDesiredStateConfiguration 모듈이 PowerShell에서 제거되어 PowerShell 갤러리에 게시되었습니다. 자세한 내용은 PowerShell 팀 블로그의 공지 참조하세요. Linux에서 DSC를 사용하는 방법에 대한 자세한 내용은 Linux용 DSC시작하기를 참조하세요. DSC v1.1 및 v2.x는 macOS에서 지원되지 않습니다. DSC v3는 Windows, Linux 및 macOS에서 지원되지만 아직 초기 개발 중입니다.