다음을 통해 공유


UseCompatibleCommands

심각도 수준: 경고

묘사

이 규칙은 대상 PowerShell 플랫폼에서 사용할 수 없는 명령을 식별합니다.

PowerShell 플랫폼은 다음 형식의 이름으로 식별됩니다.

<os-name>_<os-arch>_<os-version>_<ps-version>_<ps-arch>_<dotnet-version>_<dotnet-edition>

어디:

  • <os-name>: PowerShell이 실행 중인 운영 체제의 이름입니다. Windows에서는 SKU 번호가 포함됩니다. Linux에서 이 이름은 배포의 이름입니다.
  • <os-arch>: 운영 체제가 실행 중인 컴퓨터 아키텍처입니다(일반적으로 x64).
  • <os-version>: 자체 보고된 운영 체제 버전입니다(Linux에서는 배포 버전임).
  • <ps-version>: PowerShell 버전($PSVersionTable.PSVersion)입니다.
  • <ps-arch>: PowerShell 프로세스의 컴퓨터 아키텍처입니다.
  • <dotnet-version>: 보고된 버전의 .NET 런타임 PowerShell이 System.Environment.Version실행 중입니다.
  • <dotnet-edition>: .NET 런타임 버전 PowerShell이 실행 중입니다(현재 framework 또는 core).

예를 들어:

  • win-4_x64_10.0.18312.0_5.1.18312.1000_x64_4.0.30319.42000_framework x64용 Windows 10 Enterprise(빌드 18312)에서 실행되는 PowerShell 5.1입니다.
  • win-4_x64_10.0.18312.0_6.1.2_x64_4.0.30319.42000_core 동일한 운영 체제에서 실행되는 PowerShell 6.1.2입니다.
  • ubuntu_x64_18.04_6.2.0_x64_4.0.30319.42000_core Ubuntu 18.04에서 실행되는 PowerShell 6.2.0입니다.

일부 플랫폼은 PSScriptAnalyzer를 JSON 파일로 번들로 제공하며, 구성에서 대상으로 지정하기 위해 이러한 방식으로 명명됩니다.

기본적으로 번들로 제공되는 플랫폼은 다음과 같습니다.

PowerShell 버전 운영 체제 아이디
3.0 Windows Server 2012 win-8_x64_6.2.9200.0_3.0_x64_4.0.30319.42000_framework
4.0 Windows Server 2012 R2 win-8_x64_6.3.9600.0_4.0_x64_4.0.30319.42000_framework
5.1 Windows Server 2016 win-8_x64_10.0.14393.0_5.1.14393.2791_x64_4.0.30319.42000_framework
5.1 Windows Server 2019 win-8_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework
5.1 Windows 10 Pro win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework
6.2 Ubuntu 18.04 LTS ubuntu_x64_18.04_6.2.4_x64_4.0.30319.42000_core
6.2 Windows 10.0.14393 win-8_x64_10.0.14393.0_6.2.4_x64_4.0.30319.42000_core
6.2 Windows 10.0.17763 win-8_x64_10.0.17763.0_6.2.4_x64_4.0.30319.42000_core
6.2 Windows 10.0.18362 win-4_x64_10.0.18362.0_6.2.4_x64_4.0.30319.42000_core
7.0 Ubuntu 18.04 LTS ubuntu_x64_18.04_7.0.0_x64_3.1.2_core
7.0 Windows 10.0.14393 win-8_x64_10.0.14393.0_7.0.0_x64_3.1.2_core
7.0 Windows 10.0.17763 win-8_x64_10.0.17763.0_7.0.0_x64_3.1.2_core
7.0 Windows 10.0.18362 win-4_x64_10.0.18362.0_7.0.0_x64_3.1.2_core

다른 프로필은 GitHub 리포지토리찾을 수 있습니다.

PSCompatibilityCollector 모듈사용하여 고유한 플랫폼 프로필을 생성할 수도 있습니다.

호환성 프로필 설정은 TargetProfiles대상 플랫폼 목록을 사용합니다. 플랫폼은 다음과 같이 지정할 수 있습니다.

  • 플랫폼 이름(예: ubuntu_x64_18.04_6.1.1_x64_4.0.30319.42000_core)은 .json 끝에 추가되고 기본 프로필 디렉터리에서 검색됩니다.
  • 기본 프로필 디렉터리에서 검색되는 파일 이름(예: my_custom_platform.json)입니다.
  • 파일의 절대 경로(예: D:\PowerShellProfiles\TargetMachine.json)입니다.

기본 프로필 디렉터리가 $PSScriptRoot/compatibility_profiles PSScriptAnalzyer 모듈 아래에 있습니다(여기서 $PSScriptRootPSScriptAnalyzer.psd1포함하는 디렉터리를 참조함).

호환성 분석은 대상 프로필과 'union' 프로필 모두에 사용되는 명령을 비교합니다(프로필 dir의 모든 프로필에 사용할 수 있는 모든 명령 포함). 명령이 공용 구조체 프로필에 없으면 로컬로 만들어지고 무시되는 것으로 간주됩니다. 그렇지 않으면 명령이 공용 구조체 프로필에 있지만 대상에 없는 경우 해당 대상과 호환되지 않는 것으로 간주됩니다.

구성 설정

구성 키 의미 허용되는 값 필수 본보기
Enable 규칙을 활성화합니다. bool($true/$false) 아니요(기본값: $false) $true
TargetProfiles 대상으로 지정할 PowerShell 프로필 목록 string[]: 프로필 디렉터리의 프로필 파일 또는 프로필 이름에 대한 절대 경로 아니요(기본값: @()) @('ubuntu_x64_18.04_6.1.3_x64_4.0.30319.42000_core', 'win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework')
ProfileDirPath 이름으로 프로필을 검색하고 공용 구조체 프로필 생성에 사용할 위치입니다. string: 새 프로필 dir에 대한 절대 경로 아니요(기본값: PSScriptAnalyzer 모듈의 compatibility_profiles 디렉터리 C:\Users\me\Documents\pssaCompatProfiles
IgnoreCommands 스크립트의 호환성을 무시하는 명령 string[]: 무시할 명령의 이름 아니요(기본값: @()) @('Get-ChildItem','Import-Module')

예제 구성은 다음과 같을 수 있습니다.

@{
    Rules = @{
        PSUseCompatibleCommands = @{
            Enable = $true
            TargetProfiles = @(
                'ubuntu_x64_18.04_6.1.3_x64_4.0.30319.42000_core'
                'win-48_x64_10.0.17763.0_5.1.17763.316_x64_4.0.30319.42000_framework'
                'MyProfile'
                'another_custom_profile_in_the_profiles_directory.json'
                'D:\My Profiles\profile1.json'
            )
            # You can specify commands to not check like this, which also will ignore its parameters:
            IgnoreCommands = @(
                'Install-Module'
            )
        }
    }
}

진압

명령 호환성 진단은 다른 규칙과 마찬가지로 scriptblock의 param 블록에 있는 특성으로 표시하지 않을 수 있습니다.

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands', '')]

특정 명령에 대해서만 규칙을 표시하지 않을 수도 있습니다.

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
    'Start-Service')]

또한 매개 변수에 대해서만 표시되지 않습니다.

[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseCompatibleCommands',
    'Import-Module/FullyQualifiedName')]