Neste guia, algumas propriedades de Get-CimInstance -ClassName Win32_Battery
são traduzidas de um int
valor para um valor de string (mais explicativo).
O mapeamento é realizado da seguinte forma, no caso de exemplo da propriedade BatteryStatus
:
Update-TypeData -MemberName BatteryStatus -TypeName "Microsoft.Management.Infrastructure.CimInstance#root/cimv2/win32_battery" -MemberType ScriptProperty -Value {
Enum EnumBatteryStatus
{
Battery_Power = 1
AC_Power = 2
Fully_Charged = 3
Low = 4
Critical = 5
Charging = 6
Charging_and_High = 7
Charging_and_Low = 8
Charging_and_Critical = 9
Undefined = 10
Partially_Charged = 11
}
[EnumBatteryStatus]($this.PSBase.CimInstanceProperties['BatteryStatus'].Value)
} -Force
Também é afirmado que
Este comando precisa ser executado apenas uma vez por sessão do PowerShell.
Gostaria de executá-los somente se necessário, ou seja: somente se na sessão atual eles ainda não tiverem sido executados.
Mas como identificar a sessão atual? Existe algum ID disponível? A única informação que encontrei se refere a Get-PSSession
, mas (como estou na máquina local, não em uma remota) no meu caso, a saída está vazia.
Estou usando o PowerShell 7.5.
A sessão não é importante. O que o seu comando faz é adicionar uma definição de tipo, então o que você deve verificar é se a definição de tipo já existe no contexto atual ou não – ou seja, se
Get-TypeData
retorna um objeto não nulo.Até onde sei, não há mal nenhum em adicionar a mesma definição de tipo duas vezes. (De fato, a
Force
opção parece ser feita para isso.)Apesar de sua formulação, "Este comando precisa ser executado apenas uma vez por sessão do PowerShell" não parece restringir sua execução várias vezes, mas apenas declarar que não é necessário executá-lo várias vezes, pois seus efeitos são persistentes naquela instância do PS.