Поделиться через


Управление видимостью средства в решении

Иногда может возникнуть возможность исключения (или скрытия) расширения или средства из списка доступных средств. Например, если средство предназначено только для Windows Server 2016 (не более ранних версий), возможно, вам не нужен пользователь, который подключается к серверу Windows Server 2012 R2, чтобы просмотреть средство. (Представьте себе, что пользовательский интерфейс — он щелкает его, дождитесь загрузки инструмента, только чтобы получить сообщение о том, что его функции недоступны для подключения.) Вы можете определить, когда отображать (или скрывать) функцию в manifest.json файле средства.

Параметры выбора того, когда будет отображаться средство

Существует три различных варианта, которые можно использовать для определения необходимости отображения и доступности средства для конкретного сервера или подключения к кластеру.

  • localhost
  • инвентаризация (массив свойств)
  • Скрипт

LocalHost

Свойство localHost объекта Conditions содержит логическое значение, которое можно оценить, если соединительный узел является localHost (тот же компьютер, на котором установлен Центр администрирования Windows) или нет. Передав значение свойству, вы указываете, когда (условие) для отображения средства. Например, если вы хотите, чтобы средство отображалось, если пользователь на самом деле подключается к локальному узлу, настройте его следующим образом:

"conditions": [
{
    "localhost": true
}]

Кроме того, если вы хотите, чтобы средство отображалось только при подключении узла не localhost:

"conditions": [
{
    "localhost": false
}]

Вот как выглядят параметры конфигурации, чтобы показать только средство, если соединительный узел не является localhost:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
        "msft.sme.server-manager!windowsClients"
        ],
        "connectionTypes": [
        "msft.sme.connection-type.windows-client"
        ],
        "conditions": [
        {
            "localhost": true
        }
        ]
    }
    ]
}

Свойства инвентаризации

Пакет SDK включает предварительно подготовленный набор свойств инвентаризации, которые можно использовать для создания условий, чтобы определить, когда средство должно быть доступно или нет. В массиве "инвентаризация" есть девять различных свойств:

Имя свойства Ожидаемый тип значения
computerManufacturer строка
operatingSystemSKU number
operatingSystemVersion version_string (например: "10.1.*")
productType number
clusterFqdn строка
isHyperVRoleInstalled boolean
isHyperVPowershellInstalled boolean
isManagementToolsAvailable boolean
isWmfInstalled boolean

Каждый объект в массиве инвентаризации должен соответствовать следующей структуре json:

"<property name>": {
    "type": "<expected type>",
    "operator": "<defined operator to use>",
    "value": "<expected value to evaluate using the operator>"
}

Значения операторов

Operator Description
gt больше чем
ge больше или равно
lt Менее
le меньше или равно
eq равно
ne не равно
- Проверка правильности значения
not Проверка, имеет ли значение false
содержит элемент существует в строке
notContains Элемент не существует в строке

Типы данных

Доступные параметры для свойства type:

Тип Описание
версия номер версии (например, 10.1.*)
number числовое значение
строка строковое значение
boolean true или false

Типы значений

Свойство value принимает следующие типы:

  • строка
  • number
  • boolean

Правильно сформированный набор условий инвентаризации выглядит следующим образом:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
        "msft.sme.server-manager!servers"
        ],
        "connectionTypes": [
        "msft.sme.connection-type.server"
        ],
        "conditions": [
        {
            "inventory": {
            "operatingSystemVersion": {
                "type": "version",
                "operator": "gt",
                "value": "6.3"
            },
            "operatingSystemSKU": {
                "type": "number",
                "operator": "eq",
                "value": "8"
            }
            }
        }
        ]
    }
    ]
}

Скрипт

Наконец, можно запустить пользовательский скрипт PowerShell, чтобы определить доступность и состояние узла. Все скрипты должны возвращать объект со следующей структурой:

@{
    State = 'Available' | 'NotSupported' | 'NotConfigured';
    Message = '<Message to explain the reason of state such as not supported and not configured.>';
    Properties =
        @{ Name = 'Prop1'; Value = 'prop1 data'; Type = 'string' },
        @{Name='Prop2'; Value = 12345678; Type='number'; };
}

Свойство State — это важное значение, которое будет управлять решением показывать или скрывать расширение в списке инструментов. Допустимые значения:

значение Описание
На месте Расширение должно отображаться в списке инструментов.
NotSupported Расширение не должно отображаться в списке инструментов.
NotConfigured Это значение заполнителя для будущих работ, которое предложит пользователю получить дополнительную конфигурацию до того, как средство станет доступным. В настоящее время это значение приведет к отображению средства и является функциональным эквивалентом "Доступно".

Например, если требуется, чтобы средство загружалось только в том случае, если на удаленном сервере установлен BitLocker, сценарий выглядит следующим образом:

$response = @{
    State = 'NotSupported';
    Message = 'Not executed';
    Properties = @{ Name = 'Prop1'; Value = 'prop1 data'; Type = 'string' },
        @{Name='Prop2'; Value = 12345678; Type='number'; };
}

if (Get-Module -ListAvailable -Name servermanager) {
    Import-module servermanager;
    $isInstalled = (Get-WindowsFeature -name bitlocker).Installed;
    $isGood = $isInstalled;
}

if($isGood) {
    $response.State = 'Available';
    $response.Message = 'Everything should work.';
}

$response

Конфигурация точки входа с помощью параметра скрипта выглядит следующим образом:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
        "msft.sme.server-manager!windowsClients"
        ],
        "connectionTypes": [
        "msft.sme.connection-type.windows-client"
        ],
        "conditions": [
        {
            "localhost": true,
            "inventory": {
            "operatingSystemVersion": {
                "type": "version",
                "operator": "eq",
                "value": "10.0.*"
            },
            "operatingSystemSKU": {
                "type": "number",
                "operator": "eq",
                "value": "4"
            }
            },
            "script": "$response = @{ State = 'NotSupported'; Message = 'Not executed'; Properties = @{ Name = 'Prop1'; Value = 'prop1 data'; Type = 'string' }, @{Name='Prop2'; Value = 12345678; Type='number'; }; }; if (Get-Module -ListAvailable -Name servermanager) { Import-module servermanager; $isInstalled = (Get-WindowsFeature -name bitlocker).Installed; $isGood = $isInstalled; }; if($isGood) { $response.State = 'Available'; $response.Message = 'Everything should work.'; }; $response"
        }
        ]
    }
    ]
}

Поддержка нескольких наборов обязательных элементов

Вы можете использовать несколько наборов требований, чтобы определить, когда будет отображаться средство, определяя несколько блоков "требований".

Например, чтобы отобразить средство, если "сценарий A" ИЛИ "сценарий B" имеет значение true, определите два блока требований; Значение true (то есть все условия в блоке требований выполняются), отображается средство.

"entryPoints": [
{
    "requirements": [
    {
        "solutionIds": [
            …"scenario A"…
        ],
        "connectionTypes": [
            …"scenario A"…
        ],
        "conditions": [
            …"scenario A"…
        ]
    },
    {
        "solutionIds": [
            …"scenario B"…
        ],
        "connectionTypes": [
            …"scenario B"…
        ],
        "conditions": [
            …"scenario B"…
        ]
    }
    ]
}

Поддержка диапазонов условий

Можно также определить диапазон условий, определив несколько блоков "условия" с одинаковым свойством, но с различными операторами.

Если одно и то же свойство определено с разными операторами, средство отображается до тех пор, пока значение находится между двумя условиями.

Например, это средство отображается до тех пор, пока операционная система имеет версию от 6.3.0 до 10.0.0:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
             "msft.sme.server-manager!servers"
        ],
        "connectionTypes": [
             "msft.sme.connection-type.server"
        ],
        "conditions": [
        {
            "inventory": {
                "operatingSystemVersion": {
                    "type": "version",
                    "operator": "gt",
                    "value": "6.3.0"
                },
            }
        },
        {
            "inventory": {
                "operatingSystemVersion": {
                    "type": "version",
                    "operator": "lt",
                    "value": "10.0.0"
                }
            }
        }
        ]
    }
    ]
}