Arrays Powershell:如何使用数组或哈希表作为内联查找
我正在使用Powershell调用win32\u computersystem。我想列出有关机器的数据,包括Arrays Powershell:如何使用数组或哈希表作为内联查找,arrays,powershell,hashtable,Arrays,Powershell,Hashtable,我正在使用Powershell调用win32\u computersystem。我想列出有关机器的数据,包括$\u thermalstate-这是我的代码 代码看起来应该可以工作,但返回一个空值。我想创建一个内联数组或哈希表,该值$\u0.thermalstate引用该数组或哈希表 Get-WmiObject win32_computersystem | select Name, Model, Caption, @{n="Timezone"; e={$_.currenttimezone}}, D
$\u thermalstate
-这是我的代码
代码看起来应该可以工作,但返回一个空值。我想创建一个内联数组或哈希表,该值$\u0.thermalstate
引用该数组或哈希表
Get-WmiObject win32_computersystem | select Name, Model, Caption, @{n="Timezone"; e={$_.currenttimezone}}, Description, DNShostname,Domain,@{n='Domain Role'; E={$_.domainrole}},Roles,Status,@{n='System Type'; e={$_.systemtype}},@{n='Thermal State'; e={$_.thermalstate[@{'3'='safe'}]}}
输出
Name : MYPC
Model : Latitude E5470
Caption : MYPC
Timezone : 600
Description : AT/AT COMPATIBLE
DNShostname : MYPC
Domain : work.biz
Domain Role : 1
Roles : {LM_Workstation, LM_Server, NT}
Status : OK
System Type : x64-based PC
Thermal State : Safe
您的查找结构是。。。错。[咧嘴笑] 替换此重新格式化版本代码的最后一行
Get-WmiObject win32_computersystem |
Select-Object Name, Model, Caption,
@{n="Timezone"; e={$_.currenttimezone}},
Description, DNShostname,Domain,
@{n='Domain Role'; E={$_.domainrole}},
Roles,Status,
@{n='System Type'; e={$_.systemtype}},
@{n='Thermal State'; e={$_.thermalstate[@{'3'='safe'}]}}
。。。用这句话
@{n='Thermal State'; e={@{'3'='Safe'}["$($_.ThermalState)"]}}
请注意,查找表位于[]
的外部,并且该值被强制为字符串
不过,我不会这样做。太挑剔了。在调用之前创建查找表,并使用该表执行查找 您的代码看起来像是在试图声明/初始化哈希表,同时还试图将thermalstate用作哈希数组。 如果首先初始化哈希数组,代码如下所示:
$h = @{'3'='safe'}; Get-WmiObject win32_computersystem | select Name, Model, Caption, @{n="Timezone"; e={$_.currenttimezone}}, Description, DNShostname,Domain,@{n='Domain Role';E={$_.domainrole}},Roles,Status,@{n='System Type'; e={$_.systemtype}},@{n='Thermal State'; e={$h[$_.thermalstate.toString()]}}
据
您可以创建一个枚举
enum ThermalState {
Other = 1
Unknown = 2
Safe = 3
Warning = 4
Critical = 5
NonRecoverable = 6
}
并使用它从属性获取详细响应
Get-WmiObject win32_computersystem | Select-Object Name, Model, Caption,
@{n="Timezone"; e={$_.currenttimezone}}, Description, DNShostname,Domain,
@{n='Domain Role';E={$_.domainrole}},Roles,Status,
@{n='System Type'; e={$_.systemtype}},
@{n='Thermal State'; e={[ThermalState]$_.thermalstate}}
样本输出
Name : HP-G1610
Model : ProLiant MicroServer Gen8
Caption : HP-G1610
Timezone : 120
Description : AT/AT COMPATIBLE
DNShostname : HP-G1610
Domain : DOMAIN
Domain Role : 0
Roles : {...}
Status : OK
System Type : x64-based PC
Thermal State : Safe
通常,要获取枚举列表,请执行以下操作:
> $Enum ='System.DayOfWeek'
> [Enum]::GetValues($Enum) | ForEach-Object {'{0} {1}' -f [int]$_,$_ }
0 Sunday
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
> $Enum ='System.DayOfWeek'
> [Enum]::GetValues($Enum) | ForEach-Object {'{0} {1}' -f [int]$_,$_ }
0 Sunday
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday