Comparteix a través de


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

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

A veces, podría interesarle excluir (u ocultar) la extensión o 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 de Windows Server 2012 R2 vea la herramienta. (Imagine la experiencia del usuario: hace clic en la herramienta, espera a que se cargue y obtiene un mensaje que le indica que las características no están disponibles para su conexión). Puede definir cuándo se debe mostrar (u ocultar) la característica en el archivo manifest.json de la herramienta.

Opciones para decidir cuándo mostrar una herramienta

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

  • localhost
  • inventario (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 de conexión es localhost (el mismo equipo en el que está instalado Windows Admin Center) o no. Al pasar un valor a la propiedad, está indicando cuándo (esto es, la condición) se muestra la herramienta. Por ejemplo, si solo quiere que la herramienta se muestre si el usuario se está conectando al host local, establézcalo de la manera siguiente:

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

Si solo quiere que la herramienta se muestre cuando el nodo de conexión no es localhost:

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

Este es el aspecto que tienen los valores de configuración al 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 previamente mantenido de propiedades de inventario que puede usar para crear condiciones que le permitan determinar cuándo debe estar disponible o no la herramienta. Hay nueve propiedades diferentes en la matriz de inventario:

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

Cada objeto de la matriz de inventario debe 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 del 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 comprobación de si un valor es true
not comprobación de si un valor es false
contains el elemento existe en una cadena
notContains el elemento no existe en una cadena

Tipos de datos

Opciones disponibles para la propiedad "type":

Tipo Descripción
version número de versión (por ejemplo, "10.1.*")
number valor numérico
string 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 formado correctamente tiene este 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 estructura siguiente:

@{
    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 un valor importante que controlará la decisión de mostrar u ocultar la extensión en la lista de herramientas. Los valores permitidos son:

Valor 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 hará 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 BitLocker instalado, el script tiene este 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 con la opción script tiene este 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 se mostrará la herramienta. Para ello, defina varios bloques de tipo "requirements".

Por ejemplo, para mostrar la herramienta si "scenario A" o "scenario B" son true, defina dos bloques de requisitos; si se cumple alguno de ellos (es decir, si se cumplen todas las condiciones de un bloque de requisitos), la herramienta se mostrará.

"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. Para ello, defina varios bloques de tipo "conditions" con la misma propiedad, pero con operadores diferentes.

Cuando la misma propiedad se define con operadores diferentes, la herramienta se muestra siempre que el valor se encuentre 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"
                }
            }
        }
        ]
    }
    ]
}