Control de la visibilidad de la herramienta en una solución

Se aplica a: Windows Admin Center, versión preliminar de Windows Admin Center

Puede haber ocasiones en las que quiera excluir (u ocultar) la extensión o la herramienta de la lista de herramientas disponibles. Por ejemplo, si la herramienta solo tiene como destino Windows Server 2016 (no versiones anteriores), es posible que no quiera que un usuario que se conecta a un servidor Windows Server 2012 R2 vea la herramienta en absoluto. (Imagine la experiencia del usuario: hace clic en ella, espera a que la herramienta se cargue, solo para obtener un mensaje que indica que sus características no están disponibles para su conexión). Puede definir cuándo mostrar (u ocultar) la característica en el archivo manifest.json de la herramienta.

Opciones para decidir cuándo mostrar una herramienta

Hay tres opciones diferentes que puede usar para determinar si la herramienta debe mostrarse y estar disponible para una conexión de servidor o clúster específica.

  • localhost
  • inventory (una matriz de propiedades)
  • script

Localhost

La propiedad localHost del objeto Conditions contiene un valor booleano que se puede evaluar para deducir si el nodo que se conecta es localHost (el mismo equipo en el que está instalado Windows Admin Center) o no. Al pasar un valor a la propiedad , se indica cuándo (la condición) para mostrar la herramienta. Por ejemplo, si solo desea que la herramienta se muestre si el usuario se conecta de hecho al host local, esta configuración:

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

Como alternativa, si solo desea que la herramienta se muestre cuando el nodo de conexión no sea localhost:

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

Este es el aspecto de las opciones de configuración para mostrar solo una herramienta cuando el nodo de conexión no es 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
        }
        ]
    }
    ]
}

Propiedades de inventario

El SDK incluye un conjunto seleccionado previamente de propiedades de inventario que puede usar para generar condiciones para determinar cuándo debe estar disponible o no la herramienta. Hay nueve propiedades diferentes en la matriz "inventory":

Nombre de propiedad Tipo de valor esperado
computerManufacturer string
operatingSystemSKU number
operatingSystemVersion version_string (por ejemplo: "10.1.*")
productType number
clusterFqdn string
isHyperVRoleInstalled boolean
isHyperVPowershellInstalled boolean
isManagementToolsAvailable boolean
isWmfInstalled boolean

Todos los objetos de la matriz de inventario deben ajustarse a la siguiente estructura JSON:

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

Valores de operador

Operador Descripción
gt mayor que
ge Mayor o igual que
lt menor que
le Menor o igual que
eq igual a
ne not equal to
is comprobar si un valor es true
not comprobar si un valor es false
contiene item existe en una cadena
notContains item no existe en una cadena

Tipos de datos

Opciones disponibles para la propiedad 'type':

Tipo Descripción
version un número de versión (por ejemplo: 10.1.*)
number un valor numérico
string un valor de cadena
boolean true o false

Tipos de valor

La propiedad 'value' acepta estos tipos:

  • cadena
  • número
  • boolean

Un conjunto de condiciones de inventario correctamente formado tiene el siguiente aspecto:

"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 último, puede ejecutar un script de PowerShell personalizado para identificar la disponibilidad y el estado del nodo. Todos los scripts deben devolver un objeto con la siguiente estructura:

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

La propiedad State es el valor importante que controlará la decisión de mostrar u ocultar la extensión en la lista de herramientas. Los valores permitidos son:

Value Descripción
Disponible La extensión debe mostrarse en la lista de herramientas.
NotSupported La extensión no debe mostrarse en la lista de herramientas.
NoConfigurado Se trata de un valor de marcador de posición para el trabajo futuro que solicitará al usuario una configuración adicional antes de que la herramienta esté disponible. Actualmente, este valor dará lugar a que se muestre la herramienta y es el equivalente funcional a "Disponible".

Por ejemplo, si queremos que una herramienta se cargue solo si el servidor remoto tiene Instalado BitLocker, el script tiene el siguiente aspecto:

$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

Una configuración de punto de entrada mediante la opción de script tiene el siguiente aspecto:

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

Compatibilidad con varios conjuntos de requisitos

Puede usar más de un conjunto de requisitos para determinar cuándo mostrar la herramienta mediante la definición de varios bloques de "requisitos".

Por ejemplo, para mostrar la herramienta si "escenario A" O "escenario B" es true, defina dos bloques de requisitos; Si cualquiera de ellos es true (es decir, se cumplen todas las condiciones de un bloque de requisitos), se muestra la herramienta.

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

Compatibilidad con intervalos de condiciones

También puede definir un intervalo de condiciones mediante la definición de varios bloques de "condiciones" con la misma propiedad, pero con operadores diferentes.

Cuando se define la misma propiedad con operadores diferentes, la herramienta se muestra siempre y cuando el valor esté entre las dos condiciones.

Por ejemplo, esta herramienta se muestra siempre que el sistema operativo sea una versión entre 6.3.0 y 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"
                }
            }
        }
        ]
    }
    ]
}