Condividi tramite


Controllare la visibilità dello strumento in una soluzione

In alcuni casi, potrebbe essere necessario escludere (o nascondere) l'estensione o lo strumento dall'elenco degli strumenti disponibili. Ad esempio, se lo strumento è destinato solo a Windows Server 2016 (non alle versioni precedenti), potrebbe non essere necessario che un utente che si connette a un server Windows Server 2012 R2 visualizzi lo strumento. (Si immagini l'esperienza utente: viene fatto clic, si attende il caricamento dello strumento, per poi ricevere un messaggio che indica che le funzionalità non sono disponibili per la connessione). È possibile definire quando mostrare (o nascondere) la funzionalità nel file manifest.json dello strumento.

Opzioni per decidere quando mostrare uno strumento

Sono disponibili tre diverse opzioni per determinare se lo strumento deve essere visualizzato e disponibile per uno specifico server o connessione di cluster.

  • localhost
  • inventario (una matrice di proprietà)
  • script

LocalHost

La proprietà localHost dell'oggetto Conditions contiene un valore booleano che può essere valutato per dedurre se il nodo di connessione è localHost (lo stesso computer in cui è installato Windows Admin Center) o meno. Passando un valore alla proprietà, si indica quando (la condizione) visualizzare lo strumento. Ad esempio, se si vuole che lo strumento venga visualizzato solo se l'utente si connette effettivamente all'host locale, è possibile impostarlo come segue:

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

In alternativa, se si vuole che lo strumento venga visualizzato solo quando il nodo di connessione non è localhost:

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

Ecco come appaiono le impostazioni di configurazione per mostrare uno strumento solo quando il nodo di connessione non è 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
        }
        ]
    }
    ]
}

Inventario delle proprietà

L'SDK include un set pre-curato di proprietà dell'inventario che è possibile usare per creare condizioni che determinano quando lo strumento deve essere disponibile o meno. Sono presenti nove proprietà diverse nella matrice "inventario":

Nome proprietà Tipo di valore previsto
computerManufacturer string
operatingSystemSKU number
operatingSystemVersion version_string (ad esempio: "10.1.*")
productType number
clusterFqdn string
isHyperVRoleInstalled boolean
isHyperVPowershellInstalled boolean
isManagementToolsAvailable boolean
isWmfInstalled boolean

Ogni oggetto nella matrice dell'inventario deve essere conforme alla seguente struttura json:

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

Valori dell'operatore

Operator Descrizione
gt maggiore di
ge maggiore o uguale a
lt minore di
le minore o uguale a
eq uguale a
ne diverso da
è verificare se un valore è true
not verificare se un valore è false
contiene elemento esistente in una stringa
notContains elemento non esistente in una stringa

Tipo di dati

Opzioni disponibili per la proprietà "type":

Type Description
versione un numero di versione (ad esempio: 10.1.*)
number un valore numerico
string un valore stringa
boolean true o false

Tipi di valori

La proprietà "value" accetta questi tipi:

  • string
  • number
  • boolean

Un set di condizioni di inventario correttamente formato si presenta come segue:

"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

Infine, è possibile eseguire uno script di PowerShell personalizzato per identificare la disponibilità e lo stato del nodo. Tutti gli script devono restituire un oggetto con la struttura seguente:

@{
    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 proprietà State è il valore importante che controlla la decisione di mostrare o nascondere l'estensione nell'elenco degli strumenti. I valori consentiti sono:

Valore Descrizione
Disponibile L'estensione deve essere visualizzata nell'elenco degli strumenti.
NotSupported L'estensione non deve essere visualizzata nell'elenco degli strumenti.
NotConfigured Si tratta di un valore segnaposto per un lavoro futuro che richiederà all'utente una configurazione aggiuntiva prima che lo strumento venga reso disponibile. Attualmente questo valore determina la visualizzazione dello strumento ed è l'equivalente funzionale di "Disponibile".

Ad esempio, se si vuole che uno strumento venga caricato solo se nel server remoto è installato BitLocker, lo script sarà simile al seguente:

$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 configurazione del punto di ingresso che usa l'opzione script è simile alla seguente:

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

Supporto di più set di requisiti

È possibile usare più di un set di requisiti per determinare quando visualizzare lo strumento, definendo più blocchi "requisiti".

Ad esempio, per visualizzare lo strumento se "lo scenario A" O "lo scenario B" è true, definire due blocchi di requisiti; se uno dei due è true (ovvero se tutte le condizioni all'interno di un blocco di requisiti vengono soddisfatte), lo strumento viene visualizzato.

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

Supporto degli intervalli di condizioni

È anche possibile definire un intervallo di condizioni definendo più blocchi "condizioni" con la stessa proprietà, ma con operatori diversi.

Quando la stessa proprietà viene definita con operatori diversi, lo strumento viene visualizzato finché il valore è compreso tra le due condizioni.

Ad esempio, questo strumento viene visualizzato se il sistema operativo è una versione compresa tra 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"
                }
            }
        }
        ]
    }
    ]
}