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 모듈 아래에 있습니다(여기서 $PSScriptRoot
PSScriptAnalyzer.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')]