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
Get-CPUInfo
中删除裸露的$SocketInfo
行-这是发出$null
(Get-CPUInfo -Computername .)[0] -eq $null
$SocketInfo