├── AdmxPolicy.Tests
├── admx
│ ├── InvalidExtension.admz
│ ├── DFS.admx
│ ├── ja-JP
│ │ ├── DFS.adml
│ │ ├── DiskDiagnostic.adml
│ │ ├── CipherSuiteOrder.adml
│ │ ├── ActiveXInstallService.adml
│ │ └── ControlPanelDisplay.adml
│ ├── CipherSuiteOrder.admx
│ ├── DiskDiagnostic.admx
│ ├── ActiveXInstallService.admx
│ └── ControlPanelDisplay.admx
└── AdmxPolicy.Tests.ps1
├── AdmxPolicy
├── AddTypes.psm1
├── AdmxPolicy.psd1
├── AdmxPolicy.cs
├── AdmxPolicy.psm1
└── AdmxPolicy.format.ps1xml
├── .github
└── workflows
│ └── build.yml
├── LICENSE
├── .vscode
└── launch.json
└── README.md
/AdmxPolicy.Tests/admx/InvalidExtension.admz:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AdmxPolicy/AddTypes.psm1:
--------------------------------------------------------------------------------
1 | #requires -Version 2.0
2 | Set-Strictmode -Version 2.0
3 | # load AdmxPolicy classes
4 | # In PowerShell 2.0, this file must be loaded first.
5 | $RootPath = Split-path $script:MyInvocation.MyCommand.Path -Parent
6 | if ( $PSVersionTable.PSVersion.Major -lt 5.0 ) {
7 | # PowerShell 2.0 - 4.0 dosen't have System.Management.Automation.HiddenAttribute .
8 | Add-Type -TypeDefinition ((Get-Content (Join-Path $RootPath "AdmxPolicy.cs") -Encoding UTF8) -join "`r`n").Replace('[System.Management.Automation.HiddenAttribute]', '')
9 | } else {
10 | Add-Type -Path (Join-Path $RootPath "AdmxPolicy.cs")
11 | }
12 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | # build workflow
2 | name: build
3 | on:
4 | workflow_dispatch:
5 | jobs:
6 | # Pester test job
7 | pester-test:
8 | runs-on: windows-2019
9 | steps:
10 | # checkout
11 | - uses: actions/checkout@v2
12 | # Runs Pester all *.tests.ps1 scripts
13 | - name: Run Pester tests
14 | run: |
15 | # Pester is not installed by default on Windows Server 2019 - PowerShell 7
16 | Install-Module Pester -Force
17 | Import-Module Pester
18 | Write-Output "Run Pester $(Get-InstalledModule Pester | Select-Object -ExpandProperty Version) ..."
19 | $config = [PesterConfiguration]@{
20 | Run = @{
21 | Path = './AdmxPolicy.Tests/'
22 | # TestExtension is default setting (.Tests.ps1)
23 | }
24 | Output = @{
25 | Verbosity = 'Detailed'
26 | }
27 | }
28 | Invoke-Pester -Configuration $config
29 | shell: pwsh
30 |
--------------------------------------------------------------------------------
/AdmxPolicy/AdmxPolicy.psd1:
--------------------------------------------------------------------------------
1 | #
2 | # Module manifest
3 | #
4 | @{
5 | GUID = 'b05e2e20-3743-443a-b977-5e0b93b418b4'
6 | ModuleVersion = '0.6.2'
7 | Description = 'Get Group Policy information from ADMX files.'
8 |
9 | Author = 'stknohg'
10 | CompanyName = 'stknohg'
11 | Copyright = '(c) 2017 stknohg. All rights reserved.'
12 |
13 | PowerShellVersion = '2.0'
14 | NestedModules = @('AddTypes.psm1', 'AdmxPolicy.psm1')
15 | # TypesToProcess = @()
16 | FormatsToProcess = @('AdmxPolicy.format.ps1xml')
17 | FunctionsToExport = @('Get-AdmlResource', 'Get-AdmxFileInfo', 'Get-AdmxPolicies')
18 | #AliasesToExport = @()
19 |
20 | PrivateData = @{
21 | PSData = @{
22 | ProjectUri = 'https://github.com/stknohg/AdmxPolicy'
23 | LicenseUri = 'https://github.com/stknohg/AdmxPolicy/blob/master/LICENSE'
24 | # IconUri = ''
25 | ReleaseNotes = 'https://github.com/stknohg/AdmxPolicy/releases'
26 | Tags = @('GroupPolicy', 'Admx', 'Adml')
27 | }
28 | }
29 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Takuya Shibata
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/DFS.admx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ja-JP/DFS.adml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 表示名をここに入力する
5 | 説明をここに入力する
6 |
7 |
8 | DFS クライアントがドメイン コントローラーを発見する頻度を構成する
9 | このポリシー設定を使用すると、分散ファイル システム (DFS) クライアントがネットワーク上のドメイン コントローラーの発見を試行する頻度を構成することができます。既定では、DFS は 15 分ごとにドメイン コントローラーの発見を試行します。
10 |
11 | このポリシー設定を有効にした場合、DFS クライアントがドメイン コントローラーの発見を試行する頻度を構成することができます。この値は分単位で指定します。
12 |
13 | このポリシー設定を無効にした場合、または構成しなかった場合は、既定値である 15 分が適用されます。
14 |
15 | 注: 最小値は 15 分です。15 分よりも小さい値を指定すると、既定値の 15 分が適用されます。
16 |
17 |
18 |
19 | 時間 (分):
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // IntelliSense を使用して利用可能な属性を学べます。
3 | // 既存の属性の説明をホバーして表示します。
4 | // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 |
8 | {
9 | "type": "PowerShell",
10 | "request": "launch",
11 | "name": "PowerShell Launch Current File",
12 | "script": "${file}",
13 | "args": [],
14 | "cwd": "${file}"
15 | },
16 | {
17 | "type": "PowerShell",
18 | "request": "launch",
19 | "name": "PowerShell Launch Current File in Temporary Console",
20 | "script": "${file}",
21 | "args": [],
22 | "cwd": "${file}",
23 | "createTemporaryIntegratedConsole": true
24 | },
25 | {
26 | "type": "PowerShell",
27 | "request": "launch",
28 | "name": "PowerShell Launch Current File w/Args Prompt",
29 | "script": "${file}",
30 | "args": [
31 | "${command:SpecifyScriptArgs}"
32 | ],
33 | "cwd": "${file}"
34 | },
35 | {
36 | "type": "PowerShell",
37 | "request": "attach",
38 | "name": "PowerShell Attach to Host Process",
39 | "processId": "${command:PickPSHostProcess}",
40 | "runspaceId": 1
41 | },
42 | {
43 | "type": "PowerShell",
44 | "request": "launch",
45 | "name": "PowerShell Interactive Session",
46 | "cwd": "${workspaceRoot}"
47 | }
48 | ]
49 | }
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/CipherSuiteOrder.admx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ja-JP/DiskDiagnostic.adml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 表示名をここに入力する
5 | 説明をここに入力する
6 |
7 |
8 |
9 |
10 |
11 | デスクトップ エクスペリエンスがインストールされている Windows Server 2008、または Windows Vista
12 |
13 |
14 |
15 | ディスク診断: カスタムの警告テキストを構成する
16 | このポリシー設定により、ディスクで S.M.A.R.T. 障害が報告されたときに、ユーザーに表示するディスク診断メッセージにカスタムの警告テキストを使用します。
17 |
18 | このポリシー設定を有効にした場合は、ディスク診断メッセージにカスタムの警告テキストが表示されます。カスタム テキストは、最大 512 文字です。
19 |
20 | このポリシー設定を無効にした場合、または構成しなかった場合は、ディスク診断メッセージには既定の警告テキストが表示されます。
21 |
22 | このポリシー設定を有効にするために、再起動したり、サービスを再開したりする必要はありません。変更はすぐに有効になります。
23 |
24 | このポリシー設定は、ディスク診断シナリオ ポリシー設定が有効であるか、または構成されておらず診断ポリシー サービス (DPS) が実行状態にある場合にのみ有効です。サービスが停止している場合や無効になっている場合は、診断シナリオが実行されません。DPS は、Microsoft 管理コンソールのサービス スナップインを使用して構成できます。
25 |
26 | 注: Windows Server システムの場合、デスクトップ エクスペリエンス オプション コンポーネントがインストールされていて、リモート デスクトップ サービスの役割がインストールされていない場合にのみ、このポリシー設定が適用されます。
27 |
28 |
29 | ディスク診断
30 | ディスク診断: 実行レベルを構成する
31 | このポリシー設定は、S.M.A.R.T. ベースのディスク診断の実行レベルを決定します。
32 |
33 | S.M.A.R.T. (Self-Monitoring And Reporting Technology) は、記憶装置から Windows に障害を報告するための標準機構です。S.M.A.R.T. 障害が報告されたディスクは、修復または交換が必要な場合があります。S.M.A.R.T. 障害が発生すると、診断ポリシー サービス (DPS) によってその障害が検出され、イベント ログに記録されます。
34 |
35 | このポリシー設定を有効にした場合、DPS はユーザーにも S.M.A.R.T. 障害を警告し、データ損失の可能性を最小限にするため、バックアップおよび回復方法を示します。
36 |
37 | このポリシーを無効にした場合も、S.M.A.R.T. 障害は検出されログに記録されますが、障害への対応はありません。
38 |
39 | このポリシー設定を構成しなかった場合、DPS では S.M.A.R.T. 障害解決が既定で有効になります。
40 |
41 | このポリシー設定は、診断全体のシナリオ実行ポリシーが構成されていない場合のみ有効です。
42 |
43 | このポリシー設定を有効にするために、再起動したり、サービスを再開したりする必要はありません。変更はすぐに有効になります。
44 |
45 | このポリシー設定は、DPS が実行状態である場合にのみ有効です。サービスが停止している場合や無効になっている場合は、診断シナリオが実行されません。DPS は、Microsoft 管理コンソールのサービス スナップインを使用して構成できます。
46 |
47 | 注: Windows Server システムの場合、デスクトップ エクスペリエンス オプション コンポーネントがインストールされていて、リモート デスクトップ サービスの役割がインストールされていない場合にのみ、このポリシー設定が適用されます。
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | カスタムの警告テキストをここに入力します
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/DiskDiagnostic.admx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | -
32 |
33 |
34 |
35 |
36 | -
37 |
38 |
39 |
40 |
41 |
42 |
43 | -
44 |
45 |
46 |
47 |
48 | -
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ja-JP/CipherSuiteOrder.adml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 表示名をここに入力する
5 | 説明をここに入力する
6 |
7 |
8 | SSL 構成設定
9 | SSL 暗号の順位
10 | このポリシー設定では、Secure Socket Layer (SSL) で使用する暗号を決定します。
11 |
12 | このポリシー設定を有効にした場合、指定されている順位で SSL 暗号が優先されます。
13 |
14 | このポリシー設定を無効にした場合、または構成しなかった場合、既定の暗号順位が使用されます。
15 |
16 | すべての暗号に関するリンク: http://go.microsoft.com/fwlink/?LinkId=517265
17 |
18 |
19 |
20 | ECC 曲線の順位
21 | このポリシー設定では、ECDHE 暗号スイートで使用される ECC 曲線の優先順位を決定します。
22 |
23 | このポリシー設定を有効にした場合、指定されている順位で ECC 曲線が優先されます (1 行に 1 つずつ曲線名を入力してください)。
24 |
25 | このポリシー設定を無効にした場合、または構成しなかった場合、既定の ECC 曲線の順位が使用されます。
26 |
27 | 既定の曲線の順位
28 | ============
29 | curve25519
30 | NistP256
31 | NistP384
32 |
33 | システムでサポートされているすべての曲線を表示するには、次のコマンドを使用してください。
34 |
35 | CertUtil.exe -DisplayEccCurve
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_RC4_128_MD5,TLS_RSA_WITH_NULL_SHA256,TLS_RSA_WITH_NULL_SHA,TLS_PSK_WITH_AES_256_GCM_SHA384,TLS_PSK_WITH_AES_128_GCM_SHA256,TLS_PSK_WITH_AES_256_CBC_SHA384,TLS_PSK_WITH_AES_128_CBC_SHA256,TLS_PSK_WITH_NULL_SHA384,TLS_PSK_WITH_NULL_SHA256
44 |
45 |
46 |
47 | ECC 曲線名を優先順位で入力してください (1 行に 1 つの曲線名)。
48 | ECC 曲線の順位:
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AdmxPolicy
2 |
3 | Get Group Policy information from ADMX files.
4 |
5 | ## How to Install
6 |
7 | You can install it from [PowerShell Gallery](https://www.powershellgallery.com/packages/AdmxPolicy/).
8 |
9 | ```ps1
10 | Install-Module -Name AdmxPolicy -Scope CurrentUser
11 | ```
12 |
13 | ## Usage
14 |
15 | ### Get-AdmxFileInfo
16 |
17 | Get ADMX file meta information.
18 |
19 | ```ps1
20 | Get-AdmxFileInfo -FilePath [ADMX file path]
21 | ```
22 |
23 | e.g.
24 |
25 | ```ps1
26 | PS C:\> Get-AdmxFileInfo -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx" | Format-List
27 |
28 |
29 | Name : ActiveXInstallService.admx
30 | DisplayName : ActiveX Installer Service
31 | Description : 承認されたインストール サイトから ActiveX コントロールをインストールする
32 | Categories : {AxInstSv}
33 | ```
34 |
35 | ### Get-AdmxPolicies
36 |
37 | Get group policy information from an ADMX file.
38 |
39 | ```ps1
40 | Get-AdmxPolicies -FilePath [ADMX file path]
41 | ```
42 |
43 | e.g.
44 |
45 | ```ps1
46 | PS C:\> Get-AdmxPolicies -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx" | Select-Object -First 1 | Format-List
47 |
48 |
49 | Name : ApprovedActiveXInstallSites
50 | DisplayName : ActiveX コントロールの承認されたインストール サイト
51 | ExplainText : このポリシー設定では、組織の標準ユーザーがコンピューターに ActiveX コントロールをインストールする際に使用できる ActiveX インストール サイトを
52 | 決定します。この設定が有効になっている場合、管理者は、ホスト URL で指定された、承認された Activex インストール サイトの一覧を作成できます。
53 |
54 | この設定を有効にした場合、管理者は、ホスト URL で指定された、承認された ActiveX インストール サイトの一覧を作成できます。
55 |
56 | このポリシー設定を無効にした場合、または構成しなかった場合は、ActiveX コントロールのインストール前に、管理者資格情報を求めるダイアログが表示
57 | されます。
58 |
59 | 注: ホスト URL を指定する際に、ワイルドカード文字は使用できません。
60 |
61 |
62 | RegistryType : LocalMachine
63 | RegistryRootKeys : {HKEY_LOCAL_MACHINE}
64 | RegistryPath : SOFTWARE\Policies\Microsoft\Windows\AxInstaller
65 | ValueInfo : AdmxPolicy.PolicyValueInfo
66 | FileName : ActiveXInstallService.admx
67 | ```
68 |
69 | Get group policy registry values.
70 |
71 | e.g.
72 |
73 | ```ps1
74 | PS C:\> $policy = Get-AdmxPolicies -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx" | Select-Object -First 1
75 | PS C:\> $policy.Name
76 | ApprovedActiveXInstallSites
77 | PS C:\> $policy.DisplayName
78 | ActiveX コントロールの承認されたインストール サイト
79 | PS C:\> $policy.RegistryType
80 | LocalMachine
81 | PS C:\> $policy.RegistryRootKeys
82 | HKEY_LOCAL_MACHINE
83 | PS C:\> $policy.RegistryPSDrives
84 | HKLM:
85 | PS C:\> $policy.RegistryPath
86 | SOFTWARE\Policies\Microsoft\Windows\AxInstaller
87 | PS C:\> $policy.ValueInfo
88 |
89 | RegistryValueName EnabledValue DisabledValue HasEnabledList HasDisabledList HasElements
90 | ----------------- ------------ ------------- -------------- --------------- -----------
91 | ApprovedList Decimal : 1 Decimal : 0 False False True
92 |
93 |
94 | PS C:\> $policy.ValueInfo.Elements.Items
95 |
96 | ElementType Id RegistryPath RegistryValueName
97 | ----------- -- ------------ -----------------
98 | List ApprovedActiveXInstallSiteslist SOFTWARE\Policies\Microsoft\Windows\AxInstaller\ApprovedActiveXInstallSites
99 | ```
100 |
101 | ## License
102 |
103 | [MIT](./LICENSE)
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ja-JP/ActiveXInstallService.adml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ActiveX Installer Service
5 | 承認されたインストール サイトから ActiveX コントロールをインストールする
6 |
7 |
8 | ActiveX Installer Service
9 | 信頼済みゾーンのサイトに対する ActiveX のインストール ポリシーを確立する
10 | このポリシー設定では、信頼済みゾーンのサイトに対する ActiveX コントロールのインストールを制御します。
11 |
12 | このポリシー設定を有効にした場合、このポリシー設定で定義した設定に従って ActiveX コントロールがインストールされます。
13 |
14 | このポリシー設定を無効にした場合、または構成しなかった場合は、ActiveX コントロールのインストール前に確認のダイアログが表示されます。
15 |
16 | 信頼済みサイトで HTTPS プロトコルが使用されている場合、ActiveX インストーラー サービスで証明書エラーにどのように応答するかについてもこのポリシー設定で制御することができます。既定では、HTTPS 接続で送信されるサーバー証明書はすべての検証条件を満たす必要があります。証明書エラーがあることがわかっている信頼済みサイトを信頼する場合は、無視する証明書エラーを選択することができます。
17 |
18 | 注: このポリシー設定は、信頼済みゾーンのすべてのサイトに適用されます。
19 |
20 |
21 | インストールしない
22 | ユーザーに確認する
23 | 警告なしにインストールする
24 | ActiveX コントロールの承認されたインストール サイト
25 | このポリシー設定では、組織の標準ユーザーがコンピューターに ActiveX コントロールをインストールする際に使用できる ActiveX インストール サイトを決定します。この設定が有効になっている場合、管理者は、ホスト URL で指定された、承認された Activex インストール サイトの一覧を作成できます。
26 |
27 | この設定を有効にした場合、管理者は、ホスト URL で指定された、承認された ActiveX インストール サイトの一覧を作成できます。
28 |
29 | このポリシー設定を無効にした場合、または構成しなかった場合は、ActiveX コントロールのインストール前に、管理者資格情報を求めるダイアログが表示されます。
30 |
31 | 注: ホスト URL を指定する際に、ワイルドカード文字は使用できません。
32 |
33 |
34 |
35 |
36 |
37 | 信頼された発行元によって署名された ActiveX コントロールのインストール ポリシー
38 | 署名済み ActiveX コントロールのインストール ポリシー
39 | 未署名の ActiveX コントロールのインストール ポリシー
40 | 次のサーバー証明書エラーがある信頼済みサイトへの接続を許可します。
41 | 証明機関 (CA) が不明
42 | 証明書の名前 (CN) が無効
43 | 証明書検証日付の期限が切れている
44 | 証明書の使用方法が正しくない
45 |
46 |
47 |
48 | ホスト URL
49 | ホスト URL のポリシーが含まれています。
50 | 例
51 | ホスト名: http://activex.microsoft.com
52 | 値: 2,1,0,0
53 | 各ホスト URL の値は CSV 形式で 4 つ設定されます。
54 | これは "TPSSignedControl,SignedControl,UnsignedControl,ServerCertificatePolicy" を表します。
55 | ポリシーの左側 3 つの値は、署名に基づいて ActiveX コントロールのインストールを制御します。
56 | 以下のいずれかを指定できます。
57 | 0: ActiveX コントロールはインストールされません。
58 | 1: ActiveX コントロールのインストールを求めるメッセージがユーザーに対して表示されます。
59 | 2: ActiveX コントロールがサイレント インストールされます。
60 | 信頼された発行元ストアの証明書で署名されたコントロールは警告なしにインストールされます
61 | 署名されていないコントロールのサイレント インストールはサポートされていません。
62 |
63 | ポリシーで一番右側の値はビットマスク化されたフラグです。
64 | フラグは https 証明書エラーを無視するために使用されます。
65 | 既定値は 0 です。
66 | これは、https 接続がすべてのセキュリティ チェックに合格する必要があることを意味します。
67 |
68 | 無効な証明書エラーを無視するには、
69 | 次の値の組み合わせを使用します。
70 | 0x00000100 不明な CA を無視します。
71 | 0x00001000 無効な CN を無視します。
72 | 0x00002000 無効な証明書日付を無視します。
73 | 0x00000200 誤った証明書の使用法を無視します。
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ActiveXInstallService.admx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | -
34 |
35 |
36 |
37 |
38 | -
39 |
40 |
41 |
42 |
43 | -
44 |
45 |
46 |
47 |
48 |
49 |
50 | -
51 |
52 |
53 |
54 |
55 | -
56 |
57 |
58 |
59 |
60 | -
61 |
62 |
63 |
64 |
65 |
66 |
67 | -
68 |
69 |
70 |
71 |
72 | -
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/AdmxPolicy.Tests.ps1:
--------------------------------------------------------------------------------
1 | BeforeAll {
2 | Import-Module (Join-Path (Split-Path $PSScriptRoot -Parent) "\AdmxPolicy\AdmxPolicy.psd1") -Force
3 | }
4 |
5 | Describe "Get-AdmlResource" {
6 | It "if the adml file was not found, throw exception." {
7 | ( { Get-AdmlResource -FilePath "$PSScriptRoot\admx\notfound.adml" }) | Should -Throw "*not found."
8 | }
9 | It "if the file extension was invalid, throw exception." {
10 | ( { Get-AdmlResource -FilePath "$PSScriptRoot\admx\InvalidExtension.admz" }) | Should -Throw "*must be .adml file."
11 | }
12 | It "get correct string messages." {
13 | $resource = Get-AdmlResource -FilePath "$PSScriptRoot\admx\ja-JP\ActiveXInstallService.adml"
14 | $resource.DisplayName | Should -Be "ActiveX Installer Service"
15 | $resource.Description | Should -Be "承認されたインストール サイトから ActiveX コントロールをインストールする"
16 | $resource.Strings.Count | Should -Be 8
17 | $resource.Strings["TrustedZonePrompt"] | Should -Be "ユーザーに確認する"
18 | }
19 | }
20 |
21 | Describe "Get-AdmxFileInfo" {
22 | It "if the admx file was not found, throw exception." {
23 | ( { Get-AdmxFileInfo -FilePath "$PSScriptRoot\admx\notfound.admx" }) | Should -Throw "*not found."
24 | }
25 | It "if the file extension was invalid, throw exception." {
26 | ( { Get-AdmxFileInfo -FilePath "$PSScriptRoot\admx\InvalidExtension.admz" }) | Should -Throw "*must be .admx file."
27 | }
28 | It "get correct file information." {
29 | $fileInfo = Get-AdmxFileInfo -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP"
30 | $fileInfo.Name | Should -Be "ActiveXInstallService.admx"
31 | $fileInfo.DisplayName | Should -Be "ActiveX Installer Service"
32 | $fileInfo.Description | Should -Be "承認されたインストール サイトから ActiveX コントロールをインストールする"
33 | $fileInfo.Categories.Count | Should -Be 1
34 | $fileInfo.Categories[0].Name | Should -Be "AxInstSv"
35 | }
36 | }
37 |
38 | Describe "Get-AdmxPolicies" {
39 | It "if the admx file was not found, throw exception." {
40 | ( { Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\notfound.admx" }) | Should -Throw "*not found."
41 | }
42 | It "if the file extension was invalid, throw exception." {
43 | ( { Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\InvalidExtension.admz" }) | Should -Throw "*must be .admx file."
44 | }
45 | It "get correct policy counts." {
46 | $policies = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP"
47 | $policies.Count | Should -Be 2
48 | }
49 | It "get correct policy information." {
50 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
51 | | Where-Object { $_.Name -eq "ApprovedActiveXInstallSites"}
52 | $policy | Should -Not -BeNullOrEmpty
53 | $policy.FileName | Should -Be "ActiveXInstallService.admx"
54 | $policy.DisplayName | Should -Be "ActiveX コントロールの承認されたインストール サイト"
55 | $policy.RegistryType | Should -Be LocalMachine
56 | $policy.RegistryRootKeys.Count | Should -Be 1
57 | $policy.RegistryRootKeys[0] | Should -Be "HKEY_LOCAL_MACHINE"
58 | $policy.RegistryPSDrives.Count | Should -Be 1
59 | $policy.RegistryPSDrives[0] | Should -Be "HKLM:"
60 | $policy.RegistryPath | Should -Be "SOFTWARE\Policies\Microsoft\Windows\AxInstaller"
61 | }
62 | # tests for a single value
63 | It "if a policy doesn't have EnabledValue/DisabledValue, each property value is null." {
64 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
65 | | Where-Object { $_.Name -eq "AxISURLZonePolicies"}
66 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
67 | $policy.ValueInfo.RegistryValueName | Should -BeNullOrEmpty
68 | $policy.ValueInfo.EnabledValue | Should -BeNullOrEmpty
69 | $policy.ValueInfo.DisabledValue | Should -BeNullOrEmpty
70 | }
71 | It "get correct RegistryValueName/EnabledValue/DisabledValue(value type is Decimal)." {
72 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
73 | | Where-Object { $_.Name -eq "ApprovedActiveXInstallSites"}
74 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
75 | $policy.ValueInfo.RegistryValueName | Should -Be "ApprovedList"
76 | $policy.ValueInfo.EnabledValue.Type | Should -Be Decimal
77 | $policy.ValueInfo.EnabledValue.RegistryType | Should -Be DWord
78 | $policy.ValueInfo.EnabledValue.Value | Should -Be 1
79 | $policy.ValueInfo.DisabledValue.Type | Should -Be Decimal
80 | $policy.ValueInfo.DisabledValue.RegistryType | Should -Be DWord
81 | $policy.ValueInfo.DisabledValue.Value | Should -Be 0
82 | }
83 | It "get correct RegistryValueName/EnabledValue/DisabledValue(value type is String)." {
84 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ControlPanelDisplay.admx" -CultureName "ja-JP" `
85 | | Where-Object { $_.Name -eq "CPL_Personalization_EnableScreenSaver"}
86 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
87 | $policy.ValueInfo.RegistryValueName | Should -Be "ScreenSaveActive"
88 | $policy.ValueInfo.EnabledValue.Type | Should -Be String
89 | $policy.ValueInfo.EnabledValue.RegistryType | Should -Be String
90 | $policy.ValueInfo.EnabledValue.Value | Should -Be "1"
91 | $policy.ValueInfo.DisabledValue.Type | Should -Be String
92 | $policy.ValueInfo.DisabledValue.RegistryType | Should -Be String
93 | $policy.ValueInfo.DisabledValue.Value | Should -Be "0"
94 | }
95 | # tests for list values.
96 | It "if a policy doesn't have EnabledList/DisabledList, each property value is null." {
97 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
98 | | Where-Object { $_.Name -eq "ApprovedActiveXInstallSites"}
99 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
100 | $policy.ValueInfo.HasEnabledList | Should -Be $false
101 | $policy.ValueInfo.EnabledList | Should -BeNullOrEmpty
102 | $policy.ValueInfo.HasDisabledList | Should -Be $false
103 | $policy.ValueInfo.DisabledList | Should -BeNullOrEmpty
104 | }
105 | It "get correct EnabledList/DisabledList value." {
106 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\DiskDiagnostic.admx" -CultureName "ja-JP" `
107 | | Where-Object { $_.Name -eq "WdiScenarioExecutionPolicy"}
108 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
109 | $policy.ValueInfo.HasEnabledList | Should -Be $true
110 | $policy.ValueInfo.EnabledList.Items.Count | Should -Be 2
111 | $policy.ValueInfo.EnabledList.Items[1].RegistryPath | Should -Be "SOFTWARE\Policies\Microsoft\Windows\WDI\{29689E29-2CE9-4751-B4FC-8EFF5066E3FD}"
112 | $policy.ValueInfo.EnabledList.Items[1].RegistryValueName | Should -Be "EnabledScenarioExecutionLevel"
113 | $policy.ValueInfo.EnabledList.Items[1].Value.Value | Should -Be 2
114 | $policy.ValueInfo.HasDisabledList | Should -Be $true
115 | $policy.ValueInfo.DisabledList.Items.Count | Should -Be 2
116 | $policy.ValueInfo.DisabledList.Items[1].RegistryPath | Should -Be "SOFTWARE\Policies\Microsoft\Windows\WDI\{29689E29-2CE9-4751-B4FC-8EFF5066E3FD}"
117 | $policy.ValueInfo.DisabledList.Items[1].RegistryValueName | Should -Be "EnabledScenarioExecutionLevel"
118 | $policy.ValueInfo.DisabledList.Items[1].Value.Value | Should -Be 1
119 | }
120 | # tests for Elements values.
121 | It "if a policy doesn't have Elements, each property value is null." {
122 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\DiskDiagnostic.admx" -CultureName "ja-JP" `
123 | | Where-Object { $_.Name -eq "WdiScenarioExecutionPolicy"}
124 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
125 | $policy.ValueInfo.HasElements | Should -Be $false
126 | $policy.ValueInfo.Elements | Should -BeNullOrEmpty
127 | }
128 | It "get correct Boolean element value." {
129 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
130 | | Where-Object { $_.Name -eq "AxISURLZonePolicies"}
131 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
132 | $policy.ValueInfo.HasElements | Should -Be $true
133 | $element = $policy.ValueInfo.Elements.Items | Where-Object { $_.Id -eq "IgnoreUnknownCA" }
134 | $element | Should -Not -BeNullOrEmpty
135 | $element.ElementType | Should -Be "Boolean"
136 | $element.RegistryPath | Should -Be ""
137 | $element.RegistryValueName | Should -Be "IgnoreUnknownCA"
138 | $element.TrueValue.Type | Should -Be "Decimal"
139 | $element.TrueValue.Value | Should -Be 1
140 | $element.FalseValue.Type | Should -Be "Decimal"
141 | $element.FalseValue.Value | Should -Be 0
142 | $element.HasTrueList | Should -Be $false
143 | $element.TrueList | Should -BeNullOrEmpty
144 | $element.HasFalseList | Should -Be $false
145 | $element.FalseList | Should -BeNullOrEmpty
146 | }
147 | It "get correct Decimal element value." {
148 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\DFS.admx" -CultureName "ja-JP" `
149 | | Where-Object { $_.Name -eq "DFSDiscoverDC"}
150 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
151 | $policy.ValueInfo.HasElements | Should -Be $true
152 | $element = $policy.ValueInfo.Elements.Items | Where-Object { $_.Id -eq "DFSDiscoverDialog" }
153 | $element | Should -Not -BeNullOrEmpty
154 | $element.ElementType | Should -Be "Decimal"
155 | $element.RegistryPath | Should -Be ""
156 | $element.RegistryValueName | Should -Be "DfsDcNameDelay"
157 | $element.MinValue | Should -Be 15
158 | $element.MaxValue | Should -Be 360
159 | $element.StoreAsText | Should -Be $false
160 | $element.Soft | Should -Be $false
161 | }
162 | # LongDecial doesn't exists?
163 | It "get correct Text element value." {
164 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\DiskDiagnostic.admx" -CultureName "ja-JP" `
165 | | Where-Object { $_.Name -eq "DfdAlertPolicy"}
166 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
167 | $policy.ValueInfo.HasElements | Should -Be $true
168 | $element = $policy.ValueInfo.Elements.Items | Where-Object { $_.Id -eq "DfdAlertPolicyTitle" }
169 | $element | Should -Not -BeNullOrEmpty
170 | $element.ElementType | Should -Be "Text"
171 | $element.RegistryPath | Should -Be ""
172 | $element.RegistryValueName | Should -Be "DfdAlertTextOverride"
173 | $element.Required | Should -Be $true
174 | $element.MaxLength | Should -Be 512
175 | $element.Expandable | Should -Be $false
176 | $element.Soft | Should -Be $false
177 | }
178 | It "get correct MultiText element value." {
179 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\CipherSuiteOrder.admx" -CultureName "ja-JP" `
180 | | Where-Object { $_.Name -eq "SSLCurveOrder"}
181 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
182 | $policy.ValueInfo.HasElements | Should -Be $true
183 | $element = $policy.ValueInfo.Elements.Items | Where-Object { $_.Id -eq "SSLCurveOrderList" }
184 | $element | Should -Not -BeNullOrEmpty
185 | $element.ElementType | Should -Be "MultiText"
186 | $element.RegistryPath | Should -Be ""
187 | $element.RegistryValueName | Should -Be "EccCurves"
188 | $element.Required | Should -Be $false
189 | $element.MaxLength | Should -Be 1023
190 | $element.MaxStrings | Should -Be 0
191 | $element.Soft | Should -Be $false
192 | }
193 | It "get correct Enum element value." {
194 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
195 | | Where-Object { $_.Name -eq "AxISURLZonePolicies"}
196 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
197 | $policy.ValueInfo.HasElements | Should -Be $true
198 | $element = $policy.ValueInfo.Elements.Items | Where-Object { $_.Id -eq "InstallTrustedOCX" }
199 | $element | Should -Not -BeNullOrEmpty
200 | $element.ElementType | Should -Be "Enum"
201 | $element.RegistryPath | Should -Be ""
202 | $element.RegistryValueName | Should -Be "InstallTrustedOCX"
203 | $element.Enums.Count | Should -Be 3
204 | $element.Enums[0].Key | Should -Be "インストールしない"
205 | $element.Enums[0].Value.Value.Type | Should -Be "Decimal"
206 | $element.Enums[0].Value.Value.Value | Should -Be 0
207 | $element.Enums[0].Value.HasValueList | Should -Be $false
208 | $element.Enums[0].Value.ValueList | Should -BeNullOrEmpty
209 | $element.Enums[1].Key | Should -Be "ユーザーに確認する"
210 | $element.Enums[1].Value.Value.Type | Should -Be "Decimal"
211 | $element.Enums[1].Value.Value.Value | Should -Be 1
212 | $element.Enums[1].Value.HasValueList | Should -Be $false
213 | $element.Enums[1].Value.ValueList | Should -BeNullOrEmpty
214 | $element.Enums[2].Key | Should -Be "警告なしにインストールする"
215 | $element.Enums[2].Value.Value.Type | Should -Be "Decimal"
216 | $element.Enums[2].Value.Value.Value | Should -Be 2
217 | $element.Enums[2].Value.HasValueList | Should -Be $false
218 | $element.Enums[2].Value.ValueList | Should -BeNullOrEmpty
219 | }
220 | It "get correct List element value." {
221 | $policy = Get-AdmxPolicies -FilePath "$PSScriptRoot\admx\ActiveXInstallService.admx" -CultureName "ja-JP" `
222 | | Where-Object { $_.Name -eq "ApprovedActiveXInstallSites"}
223 | $policy.ValueInfo | Should -Not -BeNullOrEmpty
224 | $policy.ValueInfo.HasElements | Should -Be $true
225 | $element = $policy.ValueInfo.Elements.Items | Where-Object { $_.Id -eq "ApprovedActiveXInstallSiteslist" }
226 | $element | Should -Not -BeNullOrEmpty
227 | $element.ElementType | Should -Be "List"
228 | $element.RegistryPath | Should -Be "SOFTWARE\Policies\Microsoft\Windows\AxInstaller\ApprovedActiveXInstallSites"
229 | $element.RegistryValueName | Should -Be ""
230 | $element.ValuePrefix | Should -Be ""
231 | $element.Additive | Should -Be $true
232 | $element.Expandable | Should -Be $false
233 | $element.ExplicitValue | Should -Be $true
234 | $element.ClientExtension | Should -Be ""
235 | }
236 | }
237 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ControlPanelDisplay.admx:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
26 |
27 |
28 |
29 |
34 |
35 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
51 |
52 |
53 |
54 |
59 |
60 |
61 |
62 | 1
63 |
64 |
65 | 0
66 |
67 |
68 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
84 |
85 |
86 |
87 | 1
88 |
89 |
90 | 0
91 |
92 |
93 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
109 |
110 |
111 |
112 |
117 |
118 |
119 |
120 |
125 |
126 |
127 |
128 |
133 |
134 |
135 |
136 |
141 |
142 |
143 |
144 |
149 |
150 |
151 |
152 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
168 |
169 |
170 |
171 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
187 |
188 |
189 |
190 |
195 |
196 |
197 |
198 |
203 |
204 |
205 |
206 |
211 |
212 |
213 |
214 |
219 |
220 |
221 |
222 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
250 |
251 |
252 |
253 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
--------------------------------------------------------------------------------
/AdmxPolicy.Tests/admx/ja-JP/ControlPanelDisplay.adml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 表示名をここに入力する
4 | 説明をここに入力する
5 |
6 |
7 | 画面
8 | コントロール パネルの [画面] を無効にする
9 | コントロール パネルの [画面] を無効にします。
10 |
11 | この設定を有効にした場合、コントロール パネルの [画面] は起動されなくなります。ユーザーが [画面] を開始すると、操作は設定によって禁止されているという内容のエラー メッセージが表示されます。
12 |
13 | [コントロール パネルへのアクセスを禁止する] (ユーザーの構成\管理用テンプレート\コントロール パネル) 設定および [[設定] メニューのプログラムを削除する] (ユーザーの構成\管理用テンプレート\タスク バーと [スタート] メニュー) 設定も参照してください。
14 | [設定] タブを非表示にする
15 | コントロール パネルの [画面] から [設定] タブを削除します。
16 |
17 | この設定を有効にした場合、ユーザーはコントロール パネルを使ってコンピューターの画面の設定を追加、構成、または変更することはできなくなります。
18 | 個人用設定
19 | 色とデザインを変更できないようにする
20 | コントロール パネルの [個人用設定] で [色] (または [ウィンドウの色]) ページを無効にする、または個人用設定機能を使用できないシステム上のコントロール パネルで [画面] の [配色] ダイアログを無効にします。
21 |
22 | この設定を使用すると、ユーザーはコントロール パネルを使用して、デスクトップとウィンドウのウィンドウの境界線とタスク バーの色 (Windows 8 の場合)、グラス色 (Windows Vista および Windows 7 の場合)、または配色を変更できなくなります。
23 |
24 | この設定が無効の場合、または構成されていない場合、[色] (または [ウィンドウの色]) ページまたは [配色] ダイアログをコントロール パネルの [個人用設定] または [画面] で使用できます。
25 |
26 | Windows Vista 以前のシステムでは、この設定によってコントロール パネルの [デスクトップの表示とテーマ] タブおよびコントロール パネルの [画面] が表示されなくなります。
27 | スクリーン セーバーを変更できないようにする
28 | コントロール パネルの [個人用設定] または [画面] から [スクリーン セーバー] ダイアログを表示できないようにします。
29 |
30 | この設定を使用すると、ユーザーはコントロール パネルを使用してコンピューター上のスクリーン セーバーの追加、構成、変更が行えなくなります。この場合もスクリーン セーバーは実行できます。
31 |
32 |
33 | スクリーン セーバーを有効にする
34 | デスクトップ スクリーン セーバーを有効にします。
35 |
36 | この設定を無効にした場合、スクリーン セーバーは実行されなくなります。また、コントロール パネルの [個人用設定] または [画面] の [スクリーン セーバー] ダイアログにある [スクリーン セーバー] セクションが無効になります。そのため、ユーザーはスクリーン セーバー オプションを変更できなくなります。
37 |
38 | この設定を構成しない場合、システム上の影響はありません。
39 |
40 | この設定を有効にした場合、次の 2 つの条件を前提としてスクリーン セーバーが実行されます。まず、クライアント上の有効なスクリーン セーバーがクライアント コンピューター上の [スクリーン セーバーの実行可能ファイル名] 設定またはコントロール パネルを使用して指定されていること。次に、スクリーン セーバーのタイムアウトがこの設定またはコントロール パネルで 0 以外の値に設定されていること。
41 |
42 | [スクリーン セーバーを変更できないようにする] 設定も参照してください。
43 | 特定のスクリーン セーバーを強制する
44 | ユーザーのデスクトップのスクリーン セーバーを指定します。
45 |
46 | この設定を有効にした場合、システムでユーザーのデスクトップ上に指定したスクリーン セーバーが表示されます。また、この設定によってコントロール パネルの [個人用設定] または [画面] の [スクリーン セーバー] ダイアログにあるスクリーン セーバーのドロップダウン リストが無効になります。そのため、ユーザーはスクリーン セーバー オプションを変更できなくなります。
47 |
48 | この設定を有効にした場合、スクリーン セーバーが保存されているファイル名を .scr ファイル名拡張子を含めて入力します。スクリーン セーバー ファイルが %Systemroot%\System32 ディレクトリにない場合、そのファイルへの完全修飾パスを入力します。
49 |
50 | 指定されたスクリーン セーバーが設定の適用先コンピューター上にインストールされていない場合、設定は無視されます。
51 |
52 | 注: この設定は、[スクリーン セーバーを有効にする] 設定によって上書きされることがあります。 [スクリーン セーバーを有効にする] 設定が無効になっている場合、この設定は無視され、スクリーン セーバーは実行されません。
53 | スクリーン セーバーをパスワードで保護する
54 | コンピューター上で使用するスクリーン セーバーをパスワードで保護するかどうかを判断します。
55 |
56 | この設定を有効にした場合、すべてのスクリーン セーバーはパスワードで保護されます。この設定を無効にした場合、スクリーン セーバーにパスワード保護を設定することはできません。
57 |
58 | また、この設定によってコントロール パネルの [個人用設定] または [画面] の [スクリーン セーバー] ダイアログにある [パスワード保護] チェック ボックスが無効になります。そのため、ユーザーはパスワード保護設定を変更できなくなります。
59 |
60 | コンピューターが確実にパスワード保護されるようにするには、[スクリーン セーバーを有効にする] 設定を有効にし、[スクリーン セーバーのタイムアウト] 設定を使用してタイムアウトを設定します。
61 |
62 | 注: [スクリーン セーバー] ダイアログを削除するには、[スクリーン セーバーを変更できないようにする] 設定を使用します。
63 | スクリーン セーバーのタイムアウト
64 | コンピューターがアイドル状態になってからスクリーン セーバーが起動されるまでの時間を指定します。
65 |
66 | アイドル時間が構成されている場合は、1 秒から 86,400 秒 (24 時間) の間の数値を指定できます。値を 0 に設定した場合は、スクリーン セーバーは起動されません。
67 |
68 | この設定は次のような状況では何も影響しません。
69 |
70 | - 設定が無効になっているか、構成されていない。
71 |
72 | - 待ち時間が 0 に設定されている。
73 |
74 | - [スクリーン セーバーを有効にする] 設定が無効になっている。
75 |
76 | - [スクリーン セーバーの実行可能ファイル名] 設定、およびクライアント コンピューターのコントロール パネルにある [個人用設定] または [画面] の [スクリーン セーバー] ダイアログで、クライアント上にある既存の有効なスクリーン セーバー プログラムが指定されていない。
77 |
78 | この設定を構成しなかった場合は、コントロール パネルの [個人用設定] または [画面] の [スクリーン セーバー] ダイアログで指定された待ち時間が使用されます。既定値は 15 分です。
79 | デスクトップの背景を変更できないようにする
80 | ユーザーがデスクトップの背景デザインを追加または変更できないようにします。
81 |
82 | 既定では、ユーザーはコントロール パネルの [個人用設定] または [画面] の [デスクトップの背景] ページを使用してデスクトップの背景デザイン (壁紙) をデスクトップに追加できます。
83 |
84 | この設定を有効にした場合、ユーザーは [デスクトップの背景] 設定を変更できなくなります。
85 |
86 | グループ用に壁紙を指定するには、[デスクトップの壁紙] 設定を使用してください。
87 |
88 | 注意: [デスクトップの壁紙] 設定を有効にして、デスクトップの壁紙をユーザーが変更できないようにする必要もあります。詳細については、サポート技術情報の記事 Q327998 を参照してください。
89 |
90 | また、[ビットマップ形式の壁紙のみ有効にする] 設定も参照してください。
91 | サウンドを変更できないようにする
92 | ユーザーがサウンド設定を変更できないようにします。
93 |
94 | 既定では、ユーザーはコントロール パネルの [サウンド] の [サウンド] タブを使用してシステムのサウンド設定を追加、削除、または変更できます。
95 |
96 | この設定を有効にした場合、ユーザーは [サウンド設定] 設定を変更できなくなります。
97 | マウス ポインターを変更できないようにする
98 | ユーザーがマウス ポインターを変更できないようにします。
99 |
100 | 既定では、ユーザーはコントロール パネルの [マウス] の [ポインター] タブを使用してマウス ポインターを追加、削除、または変更できます。
101 |
102 | この設定を有効にした場合、ユーザーはマウス ポインター設定を変更できなくなります。
103 | デスクトップ アイコンを変更できないようにする
104 | ユーザーがデスクトップ アイコンを変更できないようにします。
105 |
106 | 既定では、ユーザーはコントロール パネルの [個人用設定] または [画面] の [デスクトップ アイコンの設定] ダイアログを使用してデスクトップ アイコンの表示、非表示、または変更設定が行えます。
107 |
108 | この設定を有効にした場合、ユーザーはデスクトップ アイコンを変更できなくなります。
109 |
110 | Windows Vista 以前のシステムでは、この設定によってコントロール パネルの [画面] の [デスクトップ] タブが表示されなくなります。
111 | 配色を変更できないようにする
112 | この設定は、テーマで使われる色を既定の色設定に準拠させます。
113 |
114 | この設定を有効にした場合、ユーザーは現在のデスクトップ テーマの色設定を変更することができません。
115 |
116 | この設定を無効にした場合、または構成しなかった場合は、ユーザーは現在のデスクトップ テーマの色設定を変更することができます。
117 |
118 | Windows 7 以降では、[色とデザインを変更できないようにする] 設定を使用してください。
119 | テーマを変更できないようにする
120 | この設定は、コントロール パネルの [個人用設定] にあるテーマ ギャラリーの設定を無効にします。
121 |
122 | この設定を有効にした場合、ユーザーはテーマを変更または保存することができません。 この場合も、デスクトップの背景、色、サウンド、スクリーン セーバーなどの要素は変更できます (これらが無効になるようにポリシーが設定されていない限り)。
123 |
124 | この設定を無効にした場合、または構成しなかった場合は、何も影響はありません。
125 |
126 | 注意: この設定を有効にし、[特定のテーマを適用する] 設定を使用してテーマを指定しなかった場合、テーマはユーザーが以前設定した既定の設定、またはシステムの既定の設定に戻ります。
127 | 特定のテーマを読み込む
128 | ユーザーが初めてログオンしたときにコンピューターに適用するテーマ ファイルを指定します。
129 |
130 | この設定を有効にした場合、新しいユーザーが初めてログオンしたときに、指定したテーマが適用されます。 この設定を有効にした場合も、ユーザーは初回のログオン後に、テーマや、デスクトップの背景、色、サウンド、スクリーン セーバーなどのテーマ要素を変更できます。
131 |
132 | この設定を無効にした場合、または構成しなかった場合は、初回のログオン時に既定のテーマが適用されます。
133 | ウィンドウとボタンの視覚スタイルを変更できないようにする
134 | 画面上に表示されたウィンドウやボタンの視覚スタイルをユーザーまたはアプリケーションが変更できないようにします。
135 |
136 | Windows XP でこの設定を有効にした場合、[画面のプロパティ] の [デザイン] タブにある [ウィンドウとボタン] のドロップダウン リストは使用不可になります。
137 |
138 | Windows XP 以降のシステムでこの設定を有効にした場合、ユーザーおよびアプリケーションはコマンド ラインから視覚スタイルを変更できなくなります。 また、ユーザーはテーマの変更時に他の視覚スタイルを適用することはできなくなります。
139 | 特定の視覚スタイル ファイルを強制するか、または Windows クラシックを強制する
140 | この設定を使用すると、視覚スタイル ファイルへのパス (場所) を入力することで、その視覚スタイル ファイルを強制することができます。
141 |
142 | ローカル コンピューターの視覚スタイル (aero.msstyles)、またはリモート サーバーにあるファイルを UNC 形式 (\\サーバー\共有\aero.msstyles) で指定します。
143 |
144 | この設定を有効にした場合、指定された視覚スタイル ファイルが使用されます。また、ユーザーはテーマの変更時に他の視覚スタイルを適用することはできなくなります。
145 |
146 | この設定を無効にした場合、または構成しなかった場合は、ユーザーはテーマの変更時に使用する視覚スタイルを選択できます (コントロール パネルの [個人用設定] を使用できる場合)。
147 |
148 | 注: この設定を有効にしてファイルがユーザーのログオン時に利用できない場合は、既定の視覚スタイルが読み込まれます。
149 |
150 | 注: Windows XP で Luna 視覚スタイルを選択するには次のように入力します: %windir%\resources\Themes\Luna\Luna.msstyles
151 |
152 | 注: Windows クラシックを選択するには、[視覚スタイル ファイルへのパス] ボックスを空欄にし、この設定を有効にします。Windows 8 または Windows RT を実行しているときは、"Windows クラシック" 視覚スタイルを適用できません。
153 | 視覚スタイルのフォント サイズを変更できないようにする
154 | 画面上のウィンドウやボタンに表示されるフォントのサイズをユーザーが変更できないようにします。
155 |
156 | この設定を有効にした場合、[画面のプロパティ] の [デザイン] タブにある [フォント サイズ] ボックスは使用できなくなります。
157 |
158 | この設定を無効にした場合、または構成しなかった場合は、ユーザーは [デザイン] タブの [フォント サイズ] ボックスを使ってフォントのサイズを変更することができます。
159 | ロック画面を表示しない
160 | このポリシー設定では、ロック画面をユーザーに表示するかどうかを制御します。
161 |
162 | このポリシー設定を有効にした場合、サインイン前に Ctrl + Alt + Del キーを押す必要がないユーザーが PC をロックした後、選ばれたタイルが表示されます。
163 |
164 | このポリシー設定を無効にした場合、または構成しなかった場合、サインイン前に Ctrl + Alt + Del キーを押す必要がないユーザーが PC をロックした後、ロック画面が表示されます。ロック画面を閉じるには、タッチまたはキーボードを使うか、マウスで画面をドラッグする必要があります。
165 |
166 | 注意: この設定は、Enterprise SKU、Education SKU、Server SKU にのみ適用されます。
167 | ロック画面とログオン イメージを変更できないようにする
168 | ユーザーが、コンピューターのロック時またはログオン画面に表示される背景画像を変更できないようにします。
169 |
170 | 既定では、ユーザーは、コンピューターのロック時またはログオン画面に表示される背景画像を変更できます。
171 |
172 | この設定を有効にした場合、ユーザーは、ロック画面とログオン イメージを変更できなくなり、代わりに既定のイメージが表示されます。
173 |
174 | 注意: この設定は、Enterprise SKU、Education SKU、Server SKU にのみ適用されます。
175 | 特定の既定のロック画面とログオン イメージを強制する
176 | この設定を使用すると、イメージ ファイルへのパス (場所) を入力することで、その既定のロック画面とログオン イメージを強制することができます。ロック画面とログオン画面の両方に同じイメージが使用されます。
177 |
178 | この設定では、ユーザーがサインインしていないときに表示される既定のロック画面とログオン イメージを指定できるようにし、また、指定されたイメージをすべてのユーザーの既定に設定します (受信トレイの既定のイメージを置き換えます)。
179 |
180 | このポリシーを使うには、既定のロック画面とログオン イメージへの完全修飾パスとファイル名を入力します。C:\windows\web\screen\lockscreen.jpg などのローカル パス、または \\サーバー\共有\Corp.jpg などの UNC パスを入力できます。
181 |
182 | これは、指定されたロック画面とログオン イメージが常に強制的に表示されるようにするため、"ロック画面とログオン イメージを変更できないようにする" 設定とともに使用できます。
183 |
184 | 注: この設定は、ドメインに参加しているコンピューターにのみ適用され、Enterprise SKU、Education SKU、および Server SKU では無条件に適用されます。
185 | ロック画面カメラを有効にできないようにする
186 | PC 設定でロック画面カメラのトグル スイッチを無効にし、ロック画面でカメラを呼び出せないようにします。
187 |
188 | 既定では、ユーザーはロック画面で使用可能なカメラを呼び出すことができます。
189 |
190 | この設定を有効にした場合、ユーザーは、PC 設定でロック画面カメラへのアクセスを有効または無効にできなくなり、ロック画面でカメラを呼び出せなくなります。
191 | ロック画面スライド ショーを有効にできないようにする
192 | PC 設定でロック画面スライド ショー設定を無効にし、ロック画面でスライド ショーを再生できないようにします。
193 |
194 | 既定では、ユーザーは、コンピューターのロック後に実行されるスライド ショーを有効にできます。
195 |
196 | この設定を有効にした場合、ユーザーは、PC 設定でスライド ショー設定を修正できなくなり、スライド ショーが開始されることもなくなります。
197 | 特定の背景とアクセント カラーを強制する
198 | 背景とアクセントに指定した色を使用するよう Windows に強制します。色の値は 16 進数の #RGB 形式で指定します。
199 |
200 | 既定では、ユーザーは、背景とアクセント カラーを変更できます。
201 |
202 | この設定を有効にした場合、Windows の背景とアクセント カラーは指定した色に設定され、ユーザーはその色を変更できません。指定した色が白色のテキストで 2:1 のコントラスト比を実現できない場合、この設定は適用されません。
203 | 特定のスタート画面の背景を強制する
204 | 利用可能な背景 (1 ~ 20 個の背景) の 1 つを使用するようスタート画面に強制し、ユーザーがその背景を変更できないようにします。
205 |
206 | この設定に 0 を指定した場合、または構成しなかった場合、スタート画面では既定の背景が使用され、ユーザーは背景を変更できます。
207 |
208 | この設定に 0 以外の値を指定した場合、スタート画面では指定した背景が使用され、ユーザーは背景を変更できません。指定した背景がサポートされていない場合は、既定の背景が使用されます。
209 |
210 |
211 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 | スクリーン セーバーを起動するまでの時間 (秒)
231 |
232 | 時間 (秒):
233 |
234 |
235 |
236 |
237 |
238 | Aero の種類を選択するには:
239 | %windir%\resources\Themes\Aero\aero.msstyles
240 |
241 | 他の視覚スタイルを選択するには:
242 | ie: \\<サーバー>\share\Corp.msstyles
243 |
244 | Windows クラシックを選択するには、上のボックスを
245 | 空欄のままにして、この設定を有効にします。
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 | 例: ローカル パスの例: C:\windows\web\screen\lockscreen.jpg
257 | 例: UNC パスの例: \\Server\Share\Corp.jpg
258 |
259 | ロック画面にトリビアやヒントなどの情報を表示しない
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 | 背景 ID:
271 |
272 |
273 |
274 |
275 |
--------------------------------------------------------------------------------
/AdmxPolicy/AdmxPolicy.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | namespace AdmxPolicy
4 | {
5 | [Flags]
6 | public enum RegistryTypes
7 | {
8 | Unknown = 0,
9 | LocalMachine = 1,
10 | CurrentUser = 2,
11 | Both = LocalMachine + CurrentUser
12 | }
13 |
14 | public sealed class AdmlResource
15 | {
16 | private string _DisplayName;
17 | public string DisplayName { get { return _DisplayName; } }
18 | private string _Description;
19 | public string Description { get { return _Description; } }
20 | private Dictionary _Strings = new Dictionary();
21 | public Dictionary Strings { get { return _Strings; } }
22 | private Dictionary _Windows = new Dictionary();
23 | public Dictionary Windows { get { return _Windows; } }
24 | public AdmlResource()
25 | {
26 | _DisplayName = "";
27 | _Description = "";
28 | }
29 | public AdmlResource(string displayName, string description)
30 | {
31 | _DisplayName = displayName;
32 | _Description = description;
33 | }
34 | }
35 |
36 | public sealed class AdmxFileInfo
37 | {
38 | private string _Name;
39 | public string Name { get { return _Name; } }
40 | private string _DisplayName;
41 | public string DisplayName { get { return _DisplayName; } }
42 | private string _Description;
43 | public string Description { get { return _Description; } }
44 | private List _Categories = new List();
45 | public List Categories { get { return _Categories; } }
46 | public AdmxFileInfo(string name, string displayName, string description)
47 | {
48 | _Name = name;
49 | _DisplayName = displayName;
50 | _Description = description;
51 | }
52 | public override string ToString()
53 | {
54 | return _Name;
55 | }
56 | }
57 |
58 | public sealed class CategoryInfo
59 | {
60 | private string _Name;
61 | public string Name { get { return _Name; } }
62 | private string _DisplayName;
63 | public string DisplayName { get { return _DisplayName; } }
64 | public CategoryInfo(string name, string displayName)
65 | {
66 | _Name = name;
67 | _DisplayName = displayName;
68 | }
69 | }
70 |
71 | public sealed class PolicyInfo
72 | {
73 | private AdmxFileInfo _FileInfo;
74 | public AdmxFileInfo FileInfo { get { return _FileInfo; } }
75 | public string FileName { get { return _FileInfo == null ? "" : _FileInfo.Name; } }
76 | private string _Name;
77 | public string Name { get { return _Name; } }
78 | private string _DisplayName;
79 | public string DisplayName { get { return _DisplayName; } }
80 | private string _ExplainText;
81 | public string ExplainText { get { return _ExplainText; } }
82 | private RegistryTypes _RegistryType;
83 | public RegistryTypes RegistryType { get { return _RegistryType; } }
84 | public string[] RegistryRootKeys
85 | {
86 | get
87 | {
88 | switch (_RegistryType)
89 | {
90 | case RegistryTypes.LocalMachine: { return new string[] { "HKEY_LOCAL_MACHINE" }; }
91 | case RegistryTypes.CurrentUser: { return new string[] { "HKEY_CURRENT_USER" }; }
92 | case RegistryTypes.Both: { return new string[] { "HKEY_LOCAL_MACHINE", "HKEY_CURRENT_USER" }; }
93 | default: { return new string[] { "" }; }
94 | }
95 | }
96 | }
97 | public string[] RegistryPSDrives
98 | {
99 | get
100 | {
101 | switch (_RegistryType)
102 | {
103 | case RegistryTypes.LocalMachine: { return new string[] { "HKLM:" }; }
104 | case RegistryTypes.CurrentUser: { return new string[] { "HKCU:" }; }
105 | case RegistryTypes.Both: { return new string[] { "HKLM:", "HKCU:" }; }
106 | default: { return new string[] { "" }; }
107 | }
108 | }
109 | }
110 | private string _RegistryPath;
111 | public string RegistryPath { get { return _RegistryPath; } }
112 | private PolicyValueInfo _ValueInfo;
113 | public PolicyValueInfo ValueInfo { get { return _ValueInfo; } }
114 | public PolicyInfo(AdmxFileInfo fileInfo, string name, string displayName, string explainText,
115 | RegistryTypes registryType, string registryPath, PolicyValueInfo valueInfo)
116 | {
117 | _FileInfo = fileInfo;
118 | _Name = name;
119 | _DisplayName = displayName;
120 | _ExplainText = explainText;
121 | _RegistryType = registryType;
122 | _RegistryPath = registryPath;
123 | _ValueInfo = valueInfo;
124 | }
125 | }
126 |
127 | public enum ValueTypes
128 | {
129 | Unknown = 0,
130 | Delete,
131 | Decimal,
132 | LongDecimal,
133 | String
134 | }
135 |
136 | // same values as Microsoft.Win32.RegistryValueKind
137 | public enum RegistryValueKind
138 | {
139 | Unknown = 0,
140 | String = 1,
141 | DWord = 4,
142 | MultiString = 7,
143 | QWord = 11,
144 | None = -1
145 | }
146 |
147 | public sealed class ValueDefinition
148 | {
149 | private ValueTypes _Type;
150 | public ValueTypes Type { get { return _Type; } }
151 | public RegistryValueKind RegistryType
152 | {
153 | get
154 | {
155 | switch (_Type)
156 | {
157 | case ValueTypes.Delete: { return RegistryValueKind.None; }
158 | case ValueTypes.Decimal: { return RegistryValueKind.DWord; }
159 | case ValueTypes.LongDecimal: { return RegistryValueKind.QWord; }
160 | case ValueTypes.String: { return RegistryValueKind.String; }
161 | default: { return RegistryValueKind.Unknown; }
162 | }
163 | }
164 | }
165 | private object _Value;
166 | public object Value { get { return _Value; } }
167 | public ValueDefinition(ValueTypes type, object value)
168 | {
169 | _Type = type;
170 | _Value = value;
171 | }
172 | public override string ToString()
173 | {
174 | return String.Format("{0} : {1}", _Type, _Value);
175 | }
176 | }
177 |
178 | public static class DefaultValueDefinition
179 | {
180 | // maybe, maybe...
181 | public static readonly ValueDefinition Enabled = new ValueDefinition(ValueTypes.Decimal, (UInt32)1);
182 | public static readonly ValueDefinition Disabled = new ValueDefinition(ValueTypes.Delete, null);
183 | }
184 |
185 | public sealed class ValueDefinitionList
186 | {
187 | private List _Items = new List();
188 | public List Items { get { return _Items; } }
189 | private string _DefaultRegistryPath;
190 | public string DefaultRegistryPath { get { return _DefaultRegistryPath; } }
191 | public ValueDefinitionList()
192 | {
193 | _DefaultRegistryPath = "";
194 | }
195 | public ValueDefinitionList(string defaultRegistryPath)
196 | {
197 | _DefaultRegistryPath = defaultRegistryPath;
198 | }
199 | }
200 |
201 | public sealed class ListItem
202 | {
203 | private string _RegistryPath;
204 | public string RegistryPath { get { return _RegistryPath; } }
205 | private string _RegistryValueName;
206 | public string RegistryValueName { get { return _RegistryValueName; } }
207 | private ValueDefinition _Value;
208 | public ValueDefinition Value { get { return _Value; } }
209 | public ListItem(string registryPath, string registryValueName, ValueDefinition value)
210 | {
211 | _RegistryPath = registryPath;
212 | _RegistryValueName = registryValueName;
213 | _Value = value;
214 | }
215 | }
216 |
217 | public enum ElementTypes
218 | {
219 | Unknown = 0,
220 | Boolean,
221 | Decimal,
222 | LongDecimal,
223 | Text,
224 | MultiText,
225 | Enum,
226 | List
227 | }
228 |
229 | public interface IValueDefinitionElement
230 | {
231 | ElementTypes ElementType { get; }
232 | string Id { get; }
233 | string RegistryValueName { get; }
234 | }
235 |
236 | public abstract class ValueDefinitionElementBase : IValueDefinitionElement
237 | {
238 | public virtual ElementTypes ElementType { get { return ElementTypes.Unknown; } }
239 | private string _Id;
240 | public string Id { get { return _Id; } }
241 | private string _RegistryPath;
242 | public string RegistryPath { get { return _RegistryPath; } }
243 | private string _RegistryValueName;
244 | public string RegistryValueName { get { return _RegistryValueName; } }
245 | public ValueDefinitionElementBase(string id, string registryPath, string registryValueName)
246 | {
247 | _Id = id;
248 | _RegistryPath = registryPath;
249 | _RegistryValueName = registryValueName;
250 | }
251 | }
252 |
253 | public sealed class BooleanDefinitionElement : ValueDefinitionElementBase
254 | {
255 | public override ElementTypes ElementType { get { return ElementTypes.Boolean; } }
256 | private ValueDefinition _TrueValue;
257 | public ValueDefinition TrueValue { get { return _TrueValue; } }
258 | private ValueDefinition _FalseValue;
259 | public ValueDefinition FalseValue { get { return _FalseValue; } }
260 | private ValueDefinitionList _TrueList;
261 | public ValueDefinitionList TrueList { get { return _TrueList; } }
262 | public bool HasTrueList { get { return (_TrueList != null && _TrueList.Items.Count > 0); } }
263 | private ValueDefinitionList _FalseList;
264 | public ValueDefinitionList FalseList { get { return _FalseList; } }
265 | public bool HasFalseList { get { return (_FalseList != null && _FalseList.Items.Count > 0); } }
266 | [System.Management.Automation.HiddenAttribute]
267 | public void set_Properties(ValueDefinition trueValue, ValueDefinition falseValue, ValueDefinitionList trueList, ValueDefinitionList falseList)
268 | {
269 | _TrueValue = trueValue;
270 | _FalseValue = falseValue;
271 | _TrueList = trueList;
272 | _FalseList = falseList;
273 | }
274 | public BooleanDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
275 | {
276 | }
277 | }
278 |
279 | public sealed class DecimalDefinitionElement : ValueDefinitionElementBase
280 | {
281 | public override ElementTypes ElementType { get { return ElementTypes.Decimal; } }
282 | private bool _Required;
283 | public bool Required { get { return _Required; } }
284 | private Decimal _MinValue;
285 | public Decimal MinValue { get { return _MinValue; } }
286 | private Decimal _MaxValue = 9999;
287 | public Decimal MaxValue { get { return _MaxValue; } }
288 | private bool _StoreAsText;
289 | public bool StoreAsText { get { return _StoreAsText; } }
290 | private bool _Soft;
291 | public bool Soft { get { return _Soft; } }
292 | [System.Management.Automation.HiddenAttribute]
293 | public void set_Properties(bool required, Decimal minValue, Decimal maxValue, bool storeAsText, bool soft)
294 | {
295 | _Required = required;
296 | _MinValue = minValue;
297 | _MaxValue = maxValue;
298 | _StoreAsText = storeAsText;
299 | _Soft = soft;
300 | }
301 | public DecimalDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
302 | {
303 | }
304 | }
305 |
306 | public sealed class LongDecimalDefinitionElement : ValueDefinitionElementBase
307 | {
308 | public override ElementTypes ElementType { get { return ElementTypes.LongDecimal; } }
309 | private bool _Required;
310 | public bool Required { get { return _Required; } }
311 | private Decimal _MinValue;
312 | public Decimal MinValue { get { return _MinValue; } }
313 | private Decimal _MaxValue = 9999;
314 | public Decimal MaxValue { get { return _MaxValue; } }
315 | private bool _StoreAsText;
316 | public bool StoreAsText { get { return _StoreAsText; } }
317 | private bool _Soft;
318 | public bool Soft { get { return _Soft; } }
319 | [System.Management.Automation.HiddenAttribute]
320 | public void set_Properties(bool required, Decimal minValue, Decimal maxValue, bool storeAsText, bool soft)
321 | {
322 | _Required = required;
323 | _MinValue = minValue;
324 | _MaxValue = maxValue;
325 | _StoreAsText = storeAsText;
326 | _Soft = soft;
327 | }
328 | public LongDecimalDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
329 | {
330 | }
331 | }
332 |
333 | public sealed class TextDefinitionElement : ValueDefinitionElementBase
334 | {
335 | public override ElementTypes ElementType { get { return ElementTypes.Text; } }
336 | private bool _Required;
337 | public bool Required { get { return _Required; } }
338 | private Decimal _MaxLength = 1023;
339 | public Decimal MaxLength { get { return _MaxLength; } }
340 | private bool _Expandable;
341 | public bool Expandable { get { return _Expandable; } }
342 | private bool _Soft;
343 | public bool Soft { get { return _Soft; } }
344 | [System.Management.Automation.HiddenAttribute]
345 | public void set_Properties(bool required, Decimal maxLength, bool expandable, bool soft)
346 | {
347 | _Required = required;
348 | _MaxLength = maxLength;
349 | _Expandable = expandable;
350 | _Soft = soft;
351 | }
352 | public TextDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
353 | {
354 | }
355 | }
356 |
357 | public sealed class MultiTextDefinitionElement : ValueDefinitionElementBase
358 | {
359 | public override ElementTypes ElementType { get { return ElementTypes.MultiText; } }
360 | private bool _Required;
361 | public bool Required { get { return _Required; } }
362 | private Decimal _MaxLength = 1023;
363 | public Decimal MaxLength { get { return _MaxLength; } }
364 | private Decimal _MaxStrings;
365 | public Decimal MaxStrings { get { return _MaxStrings; } }
366 | private bool _Soft;
367 | public bool Soft { get { return _Soft; } }
368 | [System.Management.Automation.HiddenAttribute]
369 | public void set_Properties(bool required, Decimal maxLength, Decimal maxStrings, bool soft)
370 | {
371 | _Required = required;
372 | _MaxLength = maxLength;
373 | _MaxStrings = maxStrings;
374 | _Soft = soft;
375 | }
376 | public MultiTextDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
377 | {
378 | }
379 | }
380 |
381 | public sealed class EnumValue
382 | {
383 | private ValueDefinition _Value;
384 | public ValueDefinition Value { get { return _Value; } }
385 | private ValueDefinitionList _ValueList;
386 | public ValueDefinitionList ValueList { get { return _ValueList; } internal set { _ValueList = value; } }
387 | public bool HasValueList { get { return (_ValueList != null && _ValueList.Items.Count > 0); } }
388 | public EnumValue(ValueDefinition value)
389 | {
390 | _Value = value;
391 | }
392 | public override string ToString()
393 | {
394 | return _Value.ToString();
395 | }
396 | }
397 |
398 | public sealed class EnumDefinitionElement : ValueDefinitionElementBase
399 | {
400 | public override ElementTypes ElementType { get { return ElementTypes.Enum; } }
401 | private bool _Required;
402 | public bool Required { get { return _Required; } }
403 | [System.Management.Automation.HiddenAttribute]
404 | public void set_Properties(bool required)
405 | {
406 | _Required = required;
407 | }
408 | private List> _Enums = new List>();
409 | public List> Enums { get { return _Enums; } }
410 | [System.Management.Automation.HiddenAttribute]
411 | public void add_EnumsItem(string displayName, ValueDefinition value, ValueDefinitionList valueList)
412 | {
413 | EnumValue enumvalue = new EnumValue(value);
414 | if (valueList != null)
415 | {
416 | enumvalue.ValueList = valueList;
417 | }
418 | _Enums.Add(new KeyValuePair(displayName, enumvalue));
419 | }
420 | public EnumDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
421 | {
422 | }
423 | }
424 |
425 | public sealed class ListDefinitionElement : ValueDefinitionElementBase
426 | {
427 | public override ElementTypes ElementType { get { return ElementTypes.List; } }
428 | private string _ValuePrefix;
429 | public string ValuePrefix { get { return _ValuePrefix; } }
430 | private bool _Additive;
431 | public bool Additive { get { return _Additive; } }
432 | private bool _Expandable;
433 | public bool Expandable { get { return _Expandable; } }
434 | private bool _ExplicitValue;
435 | public bool ExplicitValue { get { return _ExplicitValue; } }
436 | private string _ClientExtension;
437 | public string ClientExtension { get { return _ClientExtension; } }
438 | [System.Management.Automation.HiddenAttribute]
439 | public void set_Properties(string valuePrefix, bool additive, bool expandable, bool explicitValue, string clientExtension)
440 | {
441 | _ValuePrefix = valuePrefix;
442 | _Additive = additive;
443 | _Expandable = expandable;
444 | _ExplicitValue = explicitValue;
445 | _ClientExtension = clientExtension;
446 | }
447 | public ListDefinitionElement(string id, string registryPath, string registryValueName) : base(id, registryPath, registryValueName)
448 | {
449 | }
450 | }
451 |
452 | public sealed class ValueDefinitionElements
453 | {
454 | private List _Items = new List();
455 | public List Items { get { return _Items; } }
456 | }
457 |
458 | public sealed class PolicyValueInfo
459 | {
460 | // Registry value information.
461 | private string _RegistryValueName;
462 | public string RegistryValueName { get { return _RegistryValueName; } }
463 | // single Enabled/Disabled value definitions.
464 | private ValueDefinition _EnabledValue;
465 | public ValueDefinition EnabledValue { get { return _EnabledValue; } }
466 | private ValueDefinition _DisabledValue;
467 | public ValueDefinition DisabledValue { get { return _DisabledValue; } }
468 | [System.Management.Automation.HiddenAttribute]
469 | public void set_RegistryValue(string valueName, ValueDefinition enabledValue, ValueDefinition disabledValue)
470 | {
471 | _RegistryValueName = valueName;
472 | _EnabledValue = enabledValue;
473 | _DisabledValue = disabledValue;
474 | }
475 | // list value definitions.
476 | private ValueDefinitionList _EnabledList;
477 | public ValueDefinitionList EnabledList { get { return _EnabledList; } }
478 | public bool HasEnabledList { get { return (_EnabledList != null && _EnabledList.Items.Count > 0); } }
479 | private ValueDefinitionList _DisabledList;
480 | public ValueDefinitionList DisabledList { get { return _DisabledList; } }
481 | public bool HasDisabledList { get { return (_DisabledList != null && _DisabledList.Items.Count > 0); } }
482 | [System.Management.Automation.HiddenAttribute]
483 | public void set_EnabledListValue(ValueDefinitionList list)
484 | {
485 | _EnabledList = list;
486 | }
487 | [System.Management.Automation.HiddenAttribute]
488 | public void set_DisabledListValue(ValueDefinitionList list)
489 | {
490 | _DisabledList = list;
491 | }
492 | // element value definition.
493 | private ValueDefinitionElements _Elements;
494 | public ValueDefinitionElements Elements { get { return _Elements; } }
495 | public bool HasElements { get { return (_Elements != null && _Elements.Items.Count > 0); } }
496 | [System.Management.Automation.HiddenAttribute]
497 | public void set_ElementsValue(ValueDefinitionElements elements)
498 | {
499 | _Elements = elements;
500 | }
501 | }
502 | }
--------------------------------------------------------------------------------
/AdmxPolicy/AdmxPolicy.psm1:
--------------------------------------------------------------------------------
1 | #requires -Version 2.0
2 | Set-Strictmode -Version 2.0
3 |
4 | <#
5 | .SYNOPSIS
6 | Get resources from an ADML file.
7 | .DESCRIPTION
8 | This function reads an ADML file and loads message resources.
9 | .EXAMPLE
10 | Get-AdmlResource -FilePath "C:\Windows\PolicyDefinitions\ja-JP\ActiveXInstallService.adml"
11 |
12 | Set ADML file path.
13 | #>
14 | function Get-AdmlResource() {
15 | [OutputType([AdmxPolicy.AdmlResource])]
16 | [CmdletBinding()]
17 | param (
18 | [Parameter(ValueFromPipeline = $true, Mandatory = $true)]
19 | [string]$FilePath,
20 | [switch]$ForAdmxId = $false,
21 | [switch]$WithWindowsAdml = $false
22 | )
23 | begin {
24 | Write-Verbose "Start Get-AdmlResource..."
25 | Write-Verbose "ForAdmxId : $ForAdmxId"
26 | Write-Verbose "WithWindowsAdml : $WithWindowsAdml"
27 | }
28 | process {
29 | # validation
30 | Write-Verbose "FilePath : $FilePath"
31 | if ( -not (Test-Path $FilePath -PathType Leaf) ) {
32 | throw [IO.FileNotFoundException] "Get-AdmlResource : $FilePath not found."
33 | }
34 | if ( [IO.Path]::GetExtension($FilePath) -ne ".adml" ) {
35 | throw [ArgumentException] "Get-AdmlResource : $FilePath must be .adml file."
36 | }
37 |
38 | # load xml
39 | try {
40 | $xml = [xml]((Get-Content -LiteralPath $FilePath -Encoding UTF8))
41 | } catch {
42 | Write-Error $_
43 | return
44 | }
45 |
46 | # displayname / description
47 | $Result = New-Object "AdmxPolicy.AdmlResource" -ArgumentList ($xml.policyDefinitionResources.displayName, $xml.policyDefinitionResources.description)
48 | # stringResource
49 | $strings = $xml.policyDefinitionResources.resources.stringTable.string
50 | foreach ( $string in $strings ) {
51 | $id = $string.id
52 | if ($ForAdmxId) {
53 | $id = "`$(string.{0})" -f $string.id
54 | }
55 | $Result.Strings.Add($id, $string.InnerText)
56 | }
57 | # windows AdmlResource
58 | if ( $WithWindowsAdml ) {
59 | $windowsAdmlFullName = Join-Path (Split-Path $FilePath -Parent) "windows.adml"
60 | if ( -not (Test-Path $windowsAdmlFullName -PathType Leaf) ) {
61 | Write-Warning "$windowsAdmlFullName not found."
62 | } else {
63 | $windowsXml = [xml]((Get-Content -LiteralPath $windowsAdmlFullName -Encoding UTF8))
64 | $strings2 = $windowsXml.policyDefinitionResources.resources.stringTable.string
65 | foreach ( $string in $strings2 ) {
66 | $id = $string.id
67 | if ( $ForAdmxId ) {
68 | $id = "`$(windows.{0})" -f $string.id
69 | }
70 | $Result.Windows.Add($id, $string.InnerText)
71 | }
72 | }
73 | }
74 | return $Result
75 | }
76 | }
77 |
78 | # Private
79 | function GetAdmxFileInfoFromXml ([string]$Name, [xml]$Xml, [AdmxPolicy.AdmlResource]$AdmlResource) {
80 | $Result = New-Object "AdmxPolicy.AdmxFileInfo" -ArgumentList ($Name, $AdmlResource.DisplayName, $AdmlResource.Description)
81 | try {
82 | $categories = $xml.policyDefinitions.categories.category
83 | foreach ($category in $categories) {
84 | $displayName = ""
85 | if ( $AdmlResource.Strings.ContainsKey($category.displayName) ) {
86 | $displayName = $AdmlResource.Strings[$category.displayName]
87 | }
88 | $item = New-Object "AdmxPolicy.CategoryInfo" -ArgumentList ($category.name, $displayName)
89 | $Result.Categories.Add($item)
90 | }
91 | } catch {
92 | # do nothing
93 | }
94 | return $Result
95 | }
96 |
97 | <#
98 | .SYNOPSIS
99 | Get ADMX file meta information.
100 | .DESCRIPTION
101 | This function reads an ADMX file and get meta information.
102 | .EXAMPLE
103 | Get-AdmxFileInfo -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx"
104 |
105 | Set ADMX file path.
106 | .EXAMPLE
107 | Get-AdmxFileInfo -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx" -CultureName "ja-JP"
108 |
109 | Specify culture name.
110 | #>
111 | function Get-AdmxFileInfo () {
112 | [OutputType([AdmxPolicy.AdmxFileInfo])]
113 | [CmdletBinding()]
114 | param (
115 | [Parameter(ValueFromPipeline = $true, Mandatory = $true)]
116 | [string]$FilePath = "",
117 | [string]$CultureName = ((Get-Culture).Name),
118 | [string]$FallbackCultureName = "en-US"
119 | )
120 | begin {
121 | Write-Verbose "Start Get-AdmxFileInfo..."
122 | Write-Verbose "CultureName : $CultureName"
123 | Write-Verbose "FallbackCultureName : $FallbackCultureName"
124 | # set default
125 | if ( $CultureName -eq "" ) {
126 | $CultureName = (Get-Culture).Name
127 | }
128 | if ( $FallbackCultureName -eq "" ) {
129 | $FallbackCultureName = "en-US"
130 | }
131 | }
132 | process {
133 | # validation
134 | Write-Verbose "FilePath : $FilePath"
135 | if ( -not (Test-Path $FilePath -PathType Leaf) ) {
136 | throw [IO.FileNotFoundException] "Get-AdmxFileInfo : $FilePath not found."
137 | }
138 | if ( [IO.Path]::GetExtension($FilePath) -ne ".admx" ) {
139 | throw [ArgumentException] "Get-AdmxFileInfo : $FilePath must be .admx file."
140 | }
141 |
142 | # load xml
143 | try {
144 | $xml = [xml](Get-Content -LiteralPath $FilePath -Encoding UTF8)
145 | } catch {
146 | Write-Error $_
147 | return
148 | }
149 |
150 | # get adml resource
151 | $admlFileName = [IO.Path]::GetFileNameWithoutExtension($FilePath)
152 | $admlPath = Join-Path (Split-Path $FilePath -Parent) "$($CultureName)\$($admlFileName).adml"
153 | if ( -not (Test-Path -LiteralPath $admlPath) ) {
154 | if ( $CultureName -eq $FallbackCultureName ) {
155 | # do not fallback
156 | $admlPath = ""
157 | } else {
158 | Write-Verbose "ADML file($admlPath) not found. Try to fallback $FallbackCultureName ..."
159 | $admlPath = Join-Path (Split-Path $FilePath -Parent) "$($FallbackCultureName)\$($admlFileName).adml"
160 | if ( -not (Test-Path -LiteralPath $admlPath) ) {
161 | $admlPath = ""
162 | }
163 | }
164 | }
165 | if ( $admlPath -eq "" ) {
166 | Write-Warning "ADML file($admlFileName) not found."
167 | $admlResource = New-Object "AdmxPolicy.AdmlResource"
168 | } else {
169 | Write-Verbose "Get Adml resource from $($admlPath) ..."
170 | $admlResource = Get-AdmlResource -FilePath $admlPath -ForAdmxId:$true
171 | }
172 |
173 | # get FileInfo
174 | $Result = GetAdmxFileInfoFromXml -Name ([IO.Path]::GetFileName($FilePath)) -Xml $xml -AdmlResource $admlResource
175 | Write-Output $Result
176 | }
177 | }
178 |
179 | # Private
180 | function TryGetAttribute ([Xml.XmlElement]$Element, [string]$AttributeName, [object]$Default) {
181 | if ( $Element.HasAttribute($AttributeName) ) {
182 | return $Element.$AttributeName
183 | }
184 | return $Default
185 | }
186 |
187 | # Private
188 | function GetValueDefinitionFromXmlNode ([Xml.XmlElement]$ValueElement) {
189 | $type = [AdmxPolicy.ValueTypes]::Unknown
190 | $value = $null
191 | switch ( $ValueElement.FirstChild.Name ) {
192 | "delete" {
193 | $type = [AdmxPolicy.ValueTypes]::Delete
194 | $value = $null
195 | }
196 | "decimal" {
197 | $type = [AdmxPolicy.ValueTypes]::Decimal
198 | $value = [UInt32]$ValueElement.FirstChild.value
199 | }
200 | "longdecimal" {
201 | $type = [AdmxPolicy.ValueTypes]::LongDecimal
202 | $value = [UInt64]$ValueElement.FirstChild.value
203 | }
204 | "string" {
205 | $type = [AdmxPolicy.ValueTypes]::String
206 | $value = [string]$ValueElement.FirstChild.'#Text'
207 | }
208 | Default {
209 | $type = [AdmxPolicy.ValueTypes]::Unknown
210 | $value = $ValueElement.FirstChild.value
211 | }
212 | }
213 | return New-Object "AdmxPolicy.ValueDefinition" -ArgumentList ($type, $value)
214 | }
215 |
216 | # Private
217 | function GetValueListDefinitionFromXmlNode ( [Xml.XmlElement]$Element ) {
218 | $defaultKey = TryGetAttribute $Element "defaultKey" ""
219 | $Result = New-Object "AdmxPolicy.ValueDefinitionList" -ArgumentList $defaultKey
220 | foreach ( $i in $Element.item ) {
221 | $Result.Items.Add((New-Object "AdmxPolicy.ListItem" `
222 | -ArgumentList ($i.key, $i.valueName, (GetValueDefinitionFromXmlNode -ValueElement $i.value))))
223 | }
224 | return $Result
225 | }
226 |
227 | # Private
228 | function GetElementsInfoFromXmlNode ([Xml.XmlElement]$Elements, [AdmxPolicy.AdmlResource]$AdmlResource) {
229 | $Result = New-Object "AdmxPolicy.ValueDefinitionElements"
230 | foreach ( $element in $Elements.ChildNodes ) {
231 | if ( $element.NodeType -ne "Element" ) {
232 | # skip comment, text etc.
233 | continue
234 | }
235 | $item = $null
236 | $id = $element.id
237 | $registryPath = TryGetAttribute $element "key" ""
238 | $registryValueName = TryGetAttribute $element "valueName" ""
239 | switch ( $element.name ) {
240 | "boolean" {
241 | $item = New-Object "AdmxPolicy.BooleanDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
242 | $trueValue = $null
243 | if ( $element.Item("trueValue") ) {
244 | $trueValue = GetValueDefinitionFromXmlNode -ValueElement $element.trueValue
245 | }
246 | $falseValue = $null
247 | if ( $element.Item("falseValue") ) {
248 | $falseValue = GetValueDefinitionFromXmlNode -ValueElement $element.falseValue
249 | }
250 | $trueList = $null
251 | if ( $element.Item("trueList") ) {
252 | $trueList = GetValueListDefinitionFromXmlNode -Element $element.trueList
253 | }
254 | $falseList = $null
255 | if ( $element.Item("falseList") ) {
256 | $falseList = GetValueListDefinitionFromXmlNode -Element $element.falseList
257 | }
258 | $item.set_Properties($trueValue, $falseValue, $trueList, $falseList)
259 | }
260 | "decimal" {
261 | $item = New-Object "AdmxPolicy.DecimalDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
262 | $required = TryGetAttribute $element "required" $false
263 | $minValue = TryGetAttribute $element "minValue" 0
264 | $maxValue = TryGetAttribute $element "maxValue" 9999
265 | $storeAsText = TryGetAttribute $element "storeAsText" $false
266 | $soft = TryGetAttribute $element "soft" $false
267 | $item.set_Properties($required, $minValue, $maxValue, $storeAsText, $soft)
268 | }
269 | "longdecimal" {
270 | $item = New-Object "AdmxPolicy.LongDecimalDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
271 | $required = TryGetAttribute $element "required" $false
272 | $minValue = TryGetAttribute $element "minValue" 0
273 | $maxValue = TryGetAttribute $element "maxValue" 9999
274 | $storeAsText = TryGetAttribute $element "storeAsText" $false
275 | $soft = TryGetAttribute $element "soft" $false
276 | $item.set_Properties($required, $minValue, $maxValue, $storeAsText, $soft)
277 | }
278 | "text" {
279 | $item = New-Object "AdmxPolicy.TextDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
280 | $required = TryGetAttribute $element "required" $false
281 | $maxLength = TryGetAttribute $element "maxLength" 1023
282 | $soft = TryGetAttribute $element "soft" $false
283 | $expandable = TryGetAttribute $element "expandable" $false
284 | $item.set_Properties($required, $maxLength, $soft, $expandable)
285 | }
286 | "multitext" {
287 | $item = New-Object "AdmxPolicy.MultiTextDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
288 | $required = TryGetAttribute $element "required" $false
289 | $maxLength = TryGetAttribute $element "maxLength" 1023
290 | $maxStrings = TryGetAttribute $element "maxStrings" 0
291 | $soft = TryGetAttribute $element "soft" $false
292 | $item.set_Properties($required, $maxLength, $maxStrings, $soft)
293 | }
294 | "enum" {
295 | $item = New-Object "AdmxPolicy.EnumDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
296 | $required = TryGetAttribute $element "required" $false
297 | $item.set_Properties($required)
298 | foreach ($i in $element.item) {
299 | # key
300 | $enumKey = $i.displayName
301 | if ( $admlResource.Strings.ContainsKey($enumKey) ) {
302 | $enumKey = $admlResource.Strings[$enumKey]
303 | }
304 | # value /valueList
305 | $enumValue = GetValueDefinitionFromXmlNode -ValueElement $i.value
306 | $valueList = $null
307 | if ( $i.Item("valueList") ) {
308 | $valueList = GetValueListDefinitionFromXmlNode -Element $i.valueList
309 | }
310 | $item.add_EnumsItem($enumKey, $enumValue, $valueList)
311 | }
312 | }
313 | "list" {
314 | $item = New-Object "AdmxPolicy.ListDefinitionElement" -ArgumentList ($id, $registryPath, $registryValueName)
315 | $prefix = TryGetAttribute $element "valuePrefix" ""
316 | $additive = TryGetAttribute $element "additive" $false
317 | $expandable = TryGetAttribute $element "expandable" $false
318 | $explicitValue = TryGetAttribute $element "explicitValue" $false
319 | $clientExtension = TryGetAttribute $element "clientExtension" ""
320 | $item.set_Properties($prefix, $additive, $expandable, $explicitValue, $clientExtension)
321 | }
322 | Default {
323 | # unknown type. do nothing.
324 | }
325 | }
326 | if ( $null -ne $item ) {
327 | $Result.Items.Add($item)
328 | }
329 | }
330 | return $Result
331 | }
332 |
333 | # Private
334 | function GetValueInfoFromXmlNode ([Xml.XmlElement]$PolicyElement, [AdmxPolicy.AdmlResource]$AdmlResource) {
335 | $Result = New-Object "AdmxPolicy.PolicyValueInfo"
336 |
337 | # base value definitions
338 | $valueName = TryGetAttribute $PolicyElement "valueName" ""
339 | $enabledValue = $null
340 | if ( $PolicyElement.Item("enabledValue") ) {
341 | $enabledValue = GetValueDefinitionFromXmlNode -ValueElement $PolicyElement.enabledValue
342 | }
343 | $disabledValue = $null
344 | if ( $PolicyElement.Item("disabledValue") ) {
345 | $disabledValue = GetValueDefinitionFromXmlNode -ValueElement $PolicyElement.disabledValue
346 | }
347 | $Result.set_RegistryValue($valueName, $enabledValue, $disabledValue)
348 |
349 | # list value definitions
350 | if ( $PolicyElement.Item("enabledList") ) {
351 | Write-Verbose "Get enabledList information..."
352 | $list = GetValueListDefinitionFromXmlNode -Element $PolicyElement.enabledList
353 | $Result.set_EnabledListValue($list)
354 | }
355 | if ( $PolicyElement.Item("disabledList") ) {
356 | Write-Verbose "Get disabledList information..."
357 | $list = GetValueListDefinitionFromXmlNode -Element $PolicyElement.disabledList
358 | $Result.set_DisabledListValue($list)
359 | }
360 |
361 | # element value definition
362 | if ( $PolicyElement.Item("elements") ) {
363 | $Result.set_ElementsValue((GetElementsInfoFromXmlNode -Elements $PolicyElement.elements -AdmlResource $AdmlResource))
364 | }
365 |
366 | return $Result
367 | }
368 |
369 | <#
370 | .SYNOPSIS
371 | Get group policy information from an ADMX file.
372 | .DESCRIPTION
373 | This function reads an ADMX file and get group policy information.
374 | .EXAMPLE
375 | Get-AdmxPolicies -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx"
376 |
377 | Set ADMX file path.
378 | .EXAMPLE
379 | Get-AdmxPolicies -FilePath "C:\Windows\PolicyDefinitions\ActiveXInstallService.admx" -CultureName "ja-JP"
380 |
381 | Specify culture name.
382 | #>
383 | function Get-AdmxPolicies () {
384 | [OutputType([AdmxPolicy.PolicyInfo])]
385 | [CmdletBinding()]
386 | param (
387 | [Parameter(ValueFromPipeline = $true, Mandatory = $true)]
388 | [string]$FilePath = "",
389 | [string]$CultureName = ((Get-Culture).Name),
390 | [string]$FallbackCultureName = "en-US"
391 | )
392 | begin {
393 | Write-Verbose "Start Get-AdmxPolicies..."
394 | Write-Verbose "CultureName : $CultureName"
395 | Write-Verbose "FallbackCultureName : $FallbackCultureName"
396 | # set default
397 | if ( $CultureName -eq "" ) {
398 | $CultureName = (Get-Culture).Name
399 | }
400 | if ( $FallbackCultureName -eq "" ) {
401 | $FallbackCultureName = "en-US"
402 | }
403 | }
404 | process {
405 | # validation
406 | Write-Verbose "FilePath : $FilePath"
407 | if ( -not (Test-Path $FilePath -PathType Leaf) ) {
408 | throw [IO.FileNotFoundException] "Get-AdmxPolicies : $FilePath not found."
409 | }
410 | if ( [IO.Path]::GetExtension($FilePath) -ne ".admx" ) {
411 | throw [ArgumentException] "Get-AdmxPolicies : $FilePath must be .admx file."
412 | }
413 |
414 | # load xml
415 | try {
416 | $xml = [xml](Get-Content -LiteralPath $FilePath -Encoding UTF8)
417 | } catch {
418 | Write-Error $_
419 | return
420 | }
421 |
422 | # get adml resource
423 | $admlFileName = [IO.Path]::GetFileNameWithoutExtension($FilePath)
424 | $admlPath = Join-Path (Split-Path $FilePath -Parent) "$($CultureName)\$($admlFileName).adml"
425 | if ( -not (Test-Path -LiteralPath $admlPath) ) {
426 | if ( $CultureName -eq $FallbackCultureName ) {
427 | # do not fallback
428 | $admlPath = ""
429 | } else {
430 | Write-Verbose "ADML file($admlPath) not found. Try to fallback $FallbackCultureName ..."
431 | $admlPath = Join-Path (Split-Path $FilePath -Parent) "$($FallbackCultureName)\$($admlFileName).adml"
432 | if ( -not (Test-Path -LiteralPath $admlPath) ) {
433 | $admlPath = ""
434 | }
435 | }
436 | }
437 | if ( $admlPath -eq "" ) {
438 | Write-Warning "ADML file($admlFileName) not found."
439 | $admlResource = New-Object "AdmxPolicy.AdmlResource"
440 | } else {
441 | Write-Verbose "Get Adml resource from $($admlPath) ..."
442 | $admlResource = Get-AdmlResource -FilePath $admlPath -ForAdmxId:$true
443 | }
444 |
445 | # get policies
446 | $policies = $null
447 | try {
448 | $policies = $xml.policyDefinitions.policies.policy
449 | } catch {
450 | # WindowsProducts.admx などPolicy定義のないadmxファイルもある
451 | }
452 | foreach ( $policy in $policies ) {
453 | if ( $null -eq $policy ) {
454 | # for PowerShell 2.0
455 | continue
456 | }
457 |
458 | # get FileInfo
459 | # * create new FileInfo object for each PolicyInfo.
460 | Write-Verbose "Get $($policy.name) FileInfo..."
461 | $fileInfo = GetAdmxFileInfoFromXml -Name ([IO.Path]::GetFileName($FilePath)) -Xml $xml -AdmlResource $admlResource
462 |
463 | Write-Verbose "Get $($policy.name) informations..."
464 | # get DisplayName
465 | $policyDisplayName = ""
466 | if ( $admlResource.Strings.ContainsKey($policy.displayName) ) {
467 | $policyDisplayName = $admlResource.Strings[$policy.displayName]
468 | }
469 | # get ExplainText
470 | $policyExplainText = ""
471 | if ( $admlResource.Strings.ContainsKey($policy.explainText) ) {
472 | $policyExplainText = $admlResource.Strings[$policy.explainText]
473 | }
474 | # get registry key
475 | $RegistryType = [AdmxPolicy.RegistryTypes]::Unknown
476 | switch ($policy.class) {
477 | "Machine" {
478 | $RegistryType = [AdmxPolicy.RegistryTypes]::LocalMachine
479 | }
480 | "User" {
481 | $RegistryType = [AdmxPolicy.RegistryTypes]::CurrentUser
482 | }
483 | "Both" {
484 | $RegistryType = [AdmxPolicy.RegistryTypes]::Both
485 | }
486 | }
487 | $RegistryPath = $policy.key
488 | # get valueInfo
489 | $valueInfo = GetValueInfoFromXmlNode -PolicyElement $policy -AdmlResource $admlResource
490 |
491 | # set return value
492 | $Result = New-Object "AdmxPolicy.PolicyInfo" `
493 | -ArgumentList ($fileInfo, $policy.name, $policyDisplayName, $policyExplainText, $RegistryType, $RegistryPath, $valueInfo)
494 | Write-Output $Result
495 | }
496 | }
497 | }
498 |
--------------------------------------------------------------------------------
/AdmxPolicy/AdmxPolicy.format.ps1xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Default
7 |
8 | AdmxPolicy.PolicyInfo
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | Name
27 |
28 |
29 | DisplayName
30 |
31 |
32 | FileName
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Default
42 |
43 | AdmxPolicy.PolicyInfo
44 |
45 |
46 |
47 |
48 |
49 |
50 | Name
51 |
52 |
53 | DisplayName
54 |
55 |
56 | ExplainText
57 |
58 |
59 | RegistryType
60 |
61 |
62 | RegistryRootKeys
63 |
64 |
65 | RegistryPath
66 |
67 |
68 | ValueInfo
69 |
70 |
71 | FileName
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | Default
81 |
82 | AdmxPolicy.PolicyValueInfo
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | RegistryValueName
110 |
111 |
112 | EnabledValue
113 |
114 |
115 | DisabledValue
116 |
117 |
118 | HasEnabledList
119 |
120 |
121 | HasDisabledList
122 |
123 |
124 | HasElements
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 | Default
134 |
135 | AdmxPolicy.PolicyValueInfo
136 |
137 |
138 |
139 |
140 |
141 |
142 | RegistryValueName
143 |
144 |
145 | EnabledValue
146 |
147 |
148 | DisabledValue
149 |
150 |
151 | EnabledList
152 |
153 |
154 | DisabledList
155 |
156 |
157 | Elements
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 | Default
167 |
168 | AdmxPolicy.BooleanDefinitionElement
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 | ElementType
196 |
197 |
198 | Id
199 |
200 |
201 | RegistryPath
202 |
203 |
204 | RegistryValueName
205 |
206 |
207 | TrueValue
208 |
209 |
210 | FalseValue
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 | Default
220 |
221 | AdmxPolicy.BooleanDefinitionElement
222 |
223 |
224 |
225 |
226 |
227 |
228 | ElementType
229 |
230 |
231 | Id
232 |
233 |
234 | RegistryPath
235 |
236 |
237 | RegistryValueName
238 |
239 |
240 | TrueValue
241 |
242 |
243 | FalseValue
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 | Default
253 |
254 | AdmxPolicy.DecimalDefinitionElement
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 | ElementType
282 |
283 |
284 | Id
285 |
286 |
287 | RegistryPath
288 |
289 |
290 | RegistryValueName
291 |
292 |
293 | MinValue
294 |
295 |
296 | MaxValue
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 | Default
306 |
307 | AdmxPolicy.DecimalDefinitionElement
308 |
309 |
310 |
311 |
312 |
313 |
314 | ElementType
315 |
316 |
317 | Id
318 |
319 |
320 | RegistryPath
321 |
322 |
323 | RegistryValueName
324 |
325 |
326 | MinValue
327 |
328 |
329 | MaxValue
330 |
331 |
332 | Required
333 |
334 |
335 | StoreAsText
336 |
337 |
338 | Soft
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 | Default
348 |
349 | AdmxPolicy.LongDecimalDefinitionElement
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 | ElementType
377 |
378 |
379 | Id
380 |
381 |
382 | RegistryPath
383 |
384 |
385 | RegistryValueName
386 |
387 |
388 | MinValue
389 |
390 |
391 | MaxValue
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 | Default
401 |
402 | AdmxPolicy.LongDecimalDefinitionElement
403 |
404 |
405 |
406 |
407 |
408 |
409 | ElementType
410 |
411 |
412 | Id
413 |
414 |
415 | RegistryPath
416 |
417 |
418 | RegistryValueName
419 |
420 |
421 | MinValue
422 |
423 |
424 | MaxValue
425 |
426 |
427 | Required
428 |
429 |
430 | StoreAsText
431 |
432 |
433 | Soft
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 | Default
443 |
444 | AdmxPolicy.TextDefinitionElement
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 | ElementType
472 |
473 |
474 | Id
475 |
476 |
477 | RegistryPath
478 |
479 |
480 | RegistryValueName
481 |
482 |
483 | Required
484 |
485 |
486 | MaxLength
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 | Default
496 |
497 | AdmxPolicy.TextDefinitionElement
498 |
499 |
500 |
501 |
502 |
503 |
504 | ElementType
505 |
506 |
507 | Id
508 |
509 |
510 | RegistryPath
511 |
512 |
513 | RegistryValueName
514 |
515 |
516 | Required
517 |
518 |
519 | MaxLength
520 |
521 |
522 | Expandable
523 |
524 |
525 | Soft
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 | Default
535 |
536 | AdmxPolicy.MultiTextDefinitionElement
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 | ElementType
567 |
568 |
569 | Id
570 |
571 |
572 | RegistryPath
573 |
574 |
575 | RegistryValueName
576 |
577 |
578 | Required
579 |
580 |
581 | MaxLength
582 |
583 |
584 | MaxStrings
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 | Default
594 |
595 | AdmxPolicy.MultiTextDefinitionElement
596 |
597 |
598 |
599 |
600 |
601 |
602 | ElementType
603 |
604 |
605 | Id
606 |
607 |
608 | RegistryPath
609 |
610 |
611 | RegistryValueName
612 |
613 |
614 | Required
615 |
616 |
617 | MaxLength
618 |
619 |
620 | MaxStrings
621 |
622 |
623 | Soft
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 | Default
633 |
634 | AdmxPolicy.EnumDefinitionElement
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 | ElementType
662 |
663 |
664 | Id
665 |
666 |
667 | RegistryPath
668 |
669 |
670 | RegistryValueName
671 |
672 |
673 | Required
674 |
675 |
676 | Enums
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 | Default
686 |
687 | AdmxPolicy.EnumDefinitionElement
688 |
689 |
690 |
691 |
692 |
693 |
694 | ElementType
695 |
696 |
697 | Id
698 |
699 |
700 | RegistryPath
701 |
702 |
703 | RegistryValueName
704 |
705 |
706 | Required
707 |
708 |
709 | Enums
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 | Default
719 |
720 | AdmxPolicy.ListDefinitionElement
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 | ElementType
742 |
743 |
744 | Id
745 |
746 |
747 | RegistryPath
748 |
749 |
750 | RegistryValueName
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 | Default
760 |
761 | AdmxPolicy.ListDefinitionElement
762 |
763 |
764 |
765 |
766 |
767 |
768 | ElementType
769 |
770 |
771 | Id
772 |
773 |
774 | RegistryPath
775 |
776 |
777 | RegistryValueName
778 |
779 |
780 | Additive
781 |
782 |
783 | Expandable
784 |
785 |
786 | ExplicitValue
787 |
788 |
789 | ClientExtension
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
--------------------------------------------------------------------------------