Arrays 来自添加成员的Powershell 2.0随机添加$null

Arrays 来自添加成员的Powershell 2.0随机添加$null,arrays,powershell-2.0,psobject,Arrays,Powershell 2.0,Psobject,我的目标是将一些信息保存到一个变量中,该变量稍后将被写出($Server)。 我创建了一个cmdlet,该cmdlet从CPU获取一些信息,这将为我提供要添加到服务器变量中的结果。 当我添加它时,我得到一个$null值 PS C:\>$CPU=Get-CPUInfo-Computername。 PS C:\>$CPU CPUSSpecification CPUCurrentClockSpeed CPUMaxClockSpeed插槽 ----------------

我的目标是将一些信息保存到一个变量中,该变量稍后将被写出(
$Server
)。 我创建了一个cmdlet,该cmdlet从CPU获取一些信息,这将为我提供要添加到服务器变量中的结果。 当我添加它时,我得到一个
$null

PS C:\>$CPU=Get-CPUInfo-Computername。
PS C:\>$CPU
CPUSSpecification CPUCurrentClockSpeed CPUMaxClockSpeed插槽
----------------                         -------------------- ---------------- ------                                                                   
Intel(R)Core(TM)i5-6200U CPU@2.30GHz 2300 2400{{{SocketDesignation=U3E1;NumberOfCores=2;NumberOfLogicalProcessors=4}
PS C:\>$Server=新对象PSObject
PS C:\>添加成员-InputObject$Server-MemberType NoteProperty-名称“CPU”-值$CPU
PS C:\>$Server
中央处理器
---                                                                                                                                            
{$null,@{CPUSSpecification=Intel(R)Core(TM)i5-6200U CPU@2.30GHz;CPUCurrentClockSpeed=2300;CPUMaxClockSpeed=2400;Socket=System.Object[]}
PS C:\>
我想知道为什么我在里面得到这个$null,如果它是一些有用的信息,我该如何更改它

稍后,我将创建一个.json文件来存储我的$Server变量,并在其中保存空值

我真的不喜欢我的用户接收空值的想法,因为空值是不需要的

编辑: 我已使用此自定义Get-CPUInfo cmdlet,但它提供了我所需的内容,并且没有$null值:

函数获取CPUInfo
{
[CmdletBinding()]
Param
(
#要从中获取版本的计算机的名称
[参数(必需=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
位置=0)]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[别名(“CN”、“主机”、“主机名”)]
[字符串]$Computername
)
$MySocket=获取WmiObject-类Win32_处理器-计算机名$ComputerName
$IsSocketArray=$MySocket-is[system.array]
$SocketInfo
$socketingfoarray=@()
如果(-非$IsSocketarray)
{
$SocketInfo=新对象PSObject
添加成员-InputObject$SocketInfo-MemberType NoteProperty-Name“SocketDesignation”-值$MySocket.SocketDesignation
添加成员-InputObject$SocketInfo-MemberType NoteProperty-Name“NumberOfCores”-值$MySocket.NumberOfCores
添加成员-InputObject$SocketInfo-MemberType NoteProperty-Name“NumberOfLogicalProcessors”-值$MySocket.NumberOfLogicalProcessors
$SocketInfo数组+=$SocketInfo
}
其他的
{
foreach($MySocket中的s)
{
$SocketInfo=新对象PSObject
添加成员-InputObject$SocketInfo-MemberType NoteProperty-名称“SocketDesignation”-值$s.SocketDesignation
添加成员-InputObject$SocketInfo-MemberType NoteProperty-Name“NumberOfCores”-值$s.NumberOfCores
添加成员-InputObject$SocketInfo-MemberType NoteProperty-Name“NumberOfLogicalProcessors”-值$s.NumberOfLogicalProcessors
$SocketInfo数组+=$SocketInfo
}
}
$cpusspecification=if($IsSocketarray){$MySocket[0].Name}其他{$MySocket.Name}
$CPUCurrentClockSpeed=if($IsSocketarray){$MySocket[0].CurrentClockSpeed}其他{$MySocket.CurrentClockSpeed}
$CPUMaxClockSpeed=if($IsSocketarray){$MySocket[0].MaxClockSpeed}其他{$MySocket.MaxClockSpeed}
$CPUInfo=新对象PSObject
添加成员-InputObject$CPUInfo-MemberType NoteProperty-Name“cpusSpecification”-值$cpusSpecification
添加成员-InputObject$CPUInfo-MemberType NoteProperty-名称“CPUCurrentClockSpeed”-值$CPUCurrentClockSpeed
添加成员-InputObject$CPUInfo-MemberType NoteProperty-Name“cpumaxLockSpeed”-值$cpumaxLockSpeed
添加成员-InputObject$CPUInfo-MemberType NoteProperty-Name“Socket”-值$SocketInfo数组
返回$CPUInfo
}

直接显示数组时,PowerShell不会打印数组的空元素,但会以紧凑的属性表示形式打印

  • 让我们检查一下:

    (Get-CPUInfo -Computername .).GetType()
    
    对象[]系统数组

    二,

    真的

  • 某些内容在Get CPUInfo函数中输出空值:

    $SocketInfo
    
    移除它


@wOxxOm我试过你的线路。但是它仍然给我$null值:{$null@{CPUSpecification=Intel…etc.@wOxxOm我添加了Get-CPUInfo。但是它确实提供了我需要的信息,并且没有$null值,如第一个代码示例所示。@MikeHjortChristensen从
Get-CPUInfo
中删除裸露的
$SocketInfo
行-这是发出
$null
(Get-CPUInfo -Computername .)[0] -eq $null
$SocketInfo