Powershell不返回哈希表中的键值
谁能解释一下我做错了什么?我是powershell的初学者,我不明白为什么它通过键返回空值?Get-CimInstance Win32\u进程以System.UInt32类型返回ProcessId属性。您需要将密钥检索值强制转换为该类型,或将ProcessId值转换为System.Int32。原因是,默认情况下,如果该数字小于或等于[Int32]::maxvalue或System.Int64,则外壳程序将不带引号或不带引号的整数解释为System.Int32 在您的情况下,如果您不介意使用Uint32,只需使用以下语法即可: 就我个人而言,在将ProcessId值添加到哈希表时,我会使用加速器[int]将其转换为System.Int32:Powershell不返回哈希表中的键值,powershell,null,hashtable,Powershell,Null,Hashtable,谁能解释一下我做错了什么?我是powershell的初学者,我不明白为什么它通过键返回空值?Get-CimInstance Win32\u进程以System.UInt32类型返回ProcessId属性。您需要将密钥检索值强制转换为该类型,或将ProcessId值转换为System.Int32。原因是,默认情况下,如果该数字小于或等于[Int32]::maxvalue或System.Int64,则外壳程序将不带引号或不带引号的整数解释为System.Int32 在您的情况下,如果您不介意使用Uin
$hashx[[uint32]5164]
另外,您可以使用Get Member命令自己发现属性类型:
请注意,ProcessId的定义显示了uint32类型。Get-CimInstance Win32\u进程将ProcessId属性返回为System.uint32类型。您需要将密钥检索值强制转换为该类型,或将ProcessId值转换为System.Int32。原因是,默认情况下,如果该数字小于或等于[Int32]::maxvalue或System.Int64,则外壳程序将不带引号或不带引号的整数解释为System.Int32
在您的情况下,如果您不介意使用Uint32,只需使用以下语法即可:
就我个人而言,在将ProcessId值添加到哈希表时,我会使用加速器[int]将其转换为System.Int32:
$hashx[[uint32]5164]
另外,您可以使用Get Member命令自己发现属性类型:
注意ProcessId的定义显示uint32类型。@AdminOfThings是的,如果您尝试解释您正试图检索什么以及为什么要使用哈希表来检索它,我会很有帮助。我从您的帖子中知道,您似乎试图输出分配给名称ProcessID的值Name,但我并不真正理解您是如何知道ProcessID的。如果您知道这一点,那么您只需使用$Get CimInstance-Query SELECT*From Win32_Process,其中ProcessId='5164'。Name来取消分配给该进程ID的进程名称,而不是创建哈希表。问题是您的命令返回[uint32]类型的键。因此,您需要将每个键强制转换为该类型->$hashx[[uint32]5164]。@AdminOfThings是的,如果您尝试解释您正试图检索的内容,以及为什么使用哈希表检索它,我会有所帮助。我从您的帖子中知道,您似乎试图输出分配给名称ProcessID的值Name,但我并不真正理解您是如何知道ProcessID的。如果您知道这一点,那么您只需使用$Get CimInstance-Query SELECT*From Win32_Process,其中ProcessId='5164'。Name来取消分配给该进程ID的进程名称,而不是创建哈希表。问题是您的命令返回[uint32]类型的键。因此,您需要将每个键强制转换为该类型->$hashx[[uint32]5164]。
Get-CimInstance Win32_Process |
Select-Object ProcessId, Name | ForEach-Object {
$hashx[[int]$_.ProcessId] = $_.Name
}
# Now the keys can be accessed using Int32 numbers
$hashx[5164]
Get-CimInstance win32_Process |
Select -First 1 -Property ProcessId | Get-Member
TypeName: Selected.Microsoft.Management.Infrastructure.CimInstance
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ProcessId NoteProperty uint32 ProcessId=0