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

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

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

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

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

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 string
operatingSystemSKU number
operatingSystemVersion version_string (например: "10.1.*")
productType number
clusterFqdn string
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 не равно
is Проверка правильности значения
not Проверка, имеет ли значение false
contains элемент существует в строке
notContains Элемент не существует в строке

Типы данных

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

Type Description
version номер версии (например, 10.1.*)
number числовое значение
string строковое значение
boolean true или false

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

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

  • string
  • 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"
            }
            }
        }
        ]
    }
    ]
}

Script

Наконец, можно запустить пользовательский скрипт 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 — это важное значение, которое будет управлять решением показывать или скрывать расширение в списке инструментов. Допустимые значения:

Value Description
Available Расширение должно отображаться в списке инструментов.
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"
                }
            }
        }
        ]
    }
    ]
}