Compartilhar via


Controlar a visibilidade da ferramenta em uma solução

Pode haver ocasiões em que você deseja excluir (ou ocultar) sua extensão ou ferramenta da lista de ferramentas disponíveis. Por exemplo, se sua ferramenta for direcionada apenas para o Windows Server 2016 (não versões mais antigas), talvez você não queira que um usuário que se conecte a um servidor Windows Server 2012 R2 para ver sua ferramenta. (Imagine a experiência do usuário – ele clica nela, aguarda a ferramenta carregar, apenas para obter uma mensagem de que seus recursos não estão disponíveis para sua conexão.) Você pode definir quando mostrar (ou ocultar) seu recurso no arquivo manifest.json da ferramenta.

Opções para decidir quando mostrar uma ferramenta

Há três opções diferentes que você pode usar para determinar se sua ferramenta deve ser exibida e estar disponível para uma conexão específica de servidor ou cluster.

  • localhost
  • estoque (uma matriz de propriedades)
  • Script

LocalHost

A propriedade localHost do objeto Conditions contém um valor booliano que pode ser avaliado para inferir se o nó de conexão é localHost (o mesmo computador no qual o Windows Admin Center está instalado) ou não. Ao passar um valor para a propriedade, você indica quando (a condição) exibir a ferramenta. Por exemplo, se você quiser que a ferramenta seja exibida somente se o usuário estiver de fato se conectando ao host local, configure-a da seguinte maneira:

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

Como alternativa, se você quiser que sua ferramenta seja exibida apenas quando o nó de conexão não for localhost:

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

Esta é a aparência das definições de configuração para mostrar apenas uma ferramenta quando o nó de conexão não for 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
        }
        ]
    }
    ]
}

Propriedades de estoque

O SDK inclui um conjunto pré-coletado de propriedades de estoque que você pode usar para criar condições para determinar quando sua ferramenta deve estar disponível ou não. Há nove propriedades diferentes na matriz de 'estoque':

Nome da propriedade Tipo de valor esperado
computerManufacturer string
operatingSystemSKU número
operatingSystemVersion version_string (por exemplo: "10.1.*")
productType número
clusterFqdn string
isHyperVRoleInstalled booleano
isHyperVPowershellInstalled booleano
isManagementToolsAvailable booleano
isWmfInstalled booleano

Cada objeto na matriz de estoque deve estar em conformidade com a seguinte estrutura json:

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

Valores do operador

Operador Descrição
gt maior que
ge maior que ou igual a
lt menor que
le menor que ou igual a
eq igual a
ne diferente de
está verificando se um valor é true
não verificando se um valor é true
contém o item existe em uma cadeia de caracteres
notContains o item não existe em uma cadeia de caracteres

Tipos de dados

Opções disponíveis para a propriedade 'type':

Type Descrição
version um número de versão (por exemplo: 10.1.*)
número um valor numérico
string um valor de cadeia de caracteres
booleano true ou false

Tipos de valor

A propriedade 'value' aceita estes tipos:

  • cadeia de caracteres
  • número
  • booleano

Um conjunto de condições de estoque corretamente formado tem esta aparência:

"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

Por fim, você pode executar um script personalizado do PowerShell para identificar a disponibilidade e o estado do nó. Todos os scripts devem retornar um objeto com a seguinte estrutura:

@{
    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'; };
}

A propriedade State é o valor importante que vai controlar a decisão de mostrar ou ocultar sua extensão na lista de ferramentas. Os valores permitidos são:

Valor Descrição
Disponível A extensão deve ser exibida na lista de ferramentas.
NotSupported A extensão não deve ser exibida na lista de ferramentas.
NotConfigured Esse é um valor de espaço reservado para trabalho futuro que solicitará ao usuário uma configuração adicional antes que a ferramenta fique disponível. Atualmente, esse valor resultará na exibição da ferramenta e é o equivalente funcional a 'Disponível'.

Por exemplo, se quisermos que uma ferramenta seja carregada somente se o servidor remoto tiver o BitLocker instalado, o script terá esta aparência:

$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

Uma configuração de ponto de entrada usando a opção de script tem esta aparência:

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

Suporte a vários conjuntos de requisitos

Você pode usar mais de um conjunto de requisitos para determinar quando exibir sua ferramenta definindo vários blocos de "requisitos".

Por exemplo, para exibir sua ferramenta se "cenário A" OU "cenário B" for verdadeiro, defina dois blocos de requisitos; se qualquer um for verdadeiro (ou seja, todas as condições dentro de um bloco de requisitos serão atendidas), a ferramenta será exibida.

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

Suporte a intervalos de condições

Você também pode definir um intervalo de condições definindo vários blocos de "condições" com a mesma propriedade, mas com operadores diferentes.

Quando a mesma propriedade é definida com operadores diferentes, a ferramenta é exibida desde que o valor esteja entre as duas condições.

Por exemplo, essa ferramenta é exibida desde que o sistema operacional seja uma versão entre 6.3.0 e 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"
                }
            }
        }
        ]
    }
    ]
}