Specifica dei parametri Nome computer e credenziali

Al momento di creare script personalizzati, specificare il tipo di destinazione nei metadati dello script. Tenere in mente il tipo di destinazione al momento di scrivere lo script. La cosa principale da considerare, al momento di scrivere lo script, sarà se includere i parametri Nome computer e Credenziale sui comandi. L'ambiente ITScripts fornisce il nome del computer nella variabile ST_ComputerName e la credenziale per tale computer nella variabile ST_Credential. Ad esempio, al momento di scrivere uno script con il tipo di destinazione "Qualsiasi" è possibile specificare questo comando:

Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential

Tuttavia, questo comando non riuscirà se verrà eseguito rispetto al computer locale con il seguente errore:

Get-WmiObject : le credenziali utente non possono essere utilizzate per le connessioni locali

In altre parole, questo comando funzionerà se il tipo di destinazione è “Qualsiasi” e il computer di destinazione non è la console, ma fallirà nei seguenti casi:

  • Il tipo di destinazione è ‘Console’
  • Il tipo di destinazione è ‘WinRM in remoto’
  • Il tipo di destinazione è ‘Qualsiasi’ e la destinazione è il computer della console

Per prendere in esame tutti questi casi, il proprio script potrebbe dover testare se sta utilizzando la modalità remota, o se la destinazione è il computer della console. Per semplificare la creazione dello script, ITScripts fornisce due funzioni: ST-ComputerAndCredential e ST-SubCC.

ST-ComputerAndCredential

Questa funzione restituisce una stringa contenente la stringa appropriata da utilizzare per

i parametri -ComputerName e -Credential in base al tipo di script, se l'esecuzione sta avvenendo sulla console e se le credenziali sono state fornite per il computer. Restituirà una delle seguenti stringhe:

“-ComputerName $ST_ComputerName –Credential $ST_Credential”

“-ComputerName $ST_ComputerName”

“”

È possibile utilizzarlo nel proprio comando script senza preoccuparsi dell'ambiente in cui lo si sta eseguendo. Ad esempio:

$cc = ST-ComputerAndCredential

$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"

Invoke-Expression è utilizzato al fine di sostituire il valore di $cc prima di eseguire il comando. Il problema di questo costrutto è che è necessario ricordarsi di eseguire l'escape dei caratteri speciali nel proprio comando. Ad esempio, per i caratteri “$” e per le virgolette è necessario eseguire l'escape nel seguente comando:

$ST_CC = ST-ComputerAndCredential

$registryObject = Invoke-Expression "Get-WmiObject -list

-namespace root\default $ST_CC |

where-object { `$_.name -eq `"StdRegProv`" }"

La funzione seguente rende il tutto ancora più semplice.

ST-SubCC

Questa funzione combina i due comandi mostrati nell'esempio precedente. La prima volta in cui viene richiamato, inserisce il risultato di ST-ComputerAndCredential in una variabile PowerShell denominata ST_CC. Passa quindi il comando risultante in Invoke-Expression. La cosa da ricordare al momento di utilizzare ST_SubCC è posizionare il comando all'interno di virgolette singole e non doppie. Gli esempi precedenti sarebbero:

$shares = ST-SubCC ‘Get-WmiObject win32_Share $ST_CC’

 

$registryObject = ST-SubCC ‘Get-WmiObject -list

-namespace root\default $ST_CC |

where-object { $_.name -eq "StdRegProv" }’