如何使用PowerShell清单服务器硬件

对于Windows Server硬件的优先级硬件升级,不需要具有PowerShell Get-WMIObject cmdlet的冗长的手动进程。

IT技术人员在数据中心的笔记本电脑上工作,其他IT员工在背景中。雷竞技电脑网站
gorodenkoff / shutterstock.

我们大多数人都处理过终于留在其计划的终身日期或者是预算和官僚机构的终身日期的硬件,甚至没有进入服务,直到它进入它的寿命。

计划和确定服务器硬件升级的优先级的第一步是清点和评估您现有的硬件,这似乎是一个适合IT实习生的工作,对PowerShell来说也是一个完美的工作。

用PowerShell读取系统遥测数据

在整个讨论过程中,主要的PowerShell cmdlet是get-wmiobject..大多数服务器管理员至少对Windows管理界面(WMI)有一定的了解,WMI是一组帮助监视性能和服务器运行状况的遥测点。WMI经常用于只将组策略对象的应用程序筛选到那些满足特定条件集的计算机。WMI是微软对公共信息模型(CIM)的实现,后者是一种行业标准。这get-wmiobject.cmdlet能够访问WMI和CIM类。

PowerShell还提供Get-Ciminstance.cmdlet,它在功能上类似于get-wmiobject.但是有几个关键差异。具体来说,get-wmiobject.使用分布式组件对象模型(DCOM)与远程计算机进行通信,同时Get-Ciminstance.使用PowerShell Remoting / Windows远程管理(WinRM)。协议方面存在一些技术差异,但关键功能差异是WinRM需要提前在远程计算机上设置一些设置。

频繁,使用WMI的最困难的部分正在找到使用的正确课程。跑步get-wmiobject.使用-list参数将返回超过一千个类来选择,但要将其限制到少于25,可以使用它:

get-wmiobject -list |其中 - 对象名称 - 键*处理器*。

一个不错的好处get-wmiobject.是-Computername参数接受多个主机名,这意味着您可以轻松地从系统列表中提取信息,从而非常努力。这可能是一个硬编码的主机名列表,从文本文件中提取的选择,或从Active Directory拉出的计算机名单列表。

获取服务器CPU详细信息

CIM_Processor类可以提供与CPU相关的信息,但与许多其他PowerShell cmdlet一样,get-wmiobject.默认情况下并不超级。执行命令

get-wmiobject cim_processor

在此屏幕截图中返回仅为半个详细信息(单击以展开):

01基本CPU信息 蒂姆法利利片

幸运地从cmdlet收集更多信息,通过利用来实现琐碎选择对象cmdlet。

Get-WmiObject CIM_Processor |选择对象*命令采用输出get-wmiobject.,即使是那些未自动显示的字段,也返回整个集合。对于实际使用,这可能更多的信息比真正有用,因此使用这作为一个起点和缩放的东西回到您真正关心的特定字段。

无论CPU制造商,家庭,甚至架构,有一些关键处理器 - 性能度量WMI允许访问这些值中的每一个,这使得它们可以以编程方式访问get-wmiobject..此外,服务器通常具有多个CPU,这使得套接字识别 - 主板上CPU的物理位置 - 一个关键信息。

以下是命令看起来列出服务器CPU的特定详细信息:

get-wmiobject cim_processor |Select-object PSComputerName,Name,DeviceID,SocketDesignation,Prouplortype,MaxClockspeed,Numberofcores,Threadcount,L2CacheSize,VirtualizationFirmWareenabled

详细系统内存

读取系统存储器细节的步骤类似于读取处理器信息的步骤,尽管存储器更有可能具有多个硬件组件。甚至具有单个CPU的入门级服务器可能有几个内存模块。当提取单个服务器的详细信息时,这不一定是至关重要的,但是在执行批量库存时可能变得重要,并且您希望以特定方式存储或显示的信息。例如,如果您的意图是可以分析电子表格,您是否希望显示每个内存模块的详细信息,或整个系统内存的摘要数据?

如果您使用上面的技术并以名为“Memory”提取WMI类列表,您将看到几种可能的候选人,但CIM_PhysicalMemory是暂时的最佳选择。您可能有兴趣查看CIM_MEMORY和CIM_ASSOCEDPROCESSOMEMEMORY,因为这两者都进入处理器缓存内存。就最初提取的系统内存详细信息而言,让我们前进,假设您已经使用类似于以下命令的内容从CIM_PhysicalMemory类中删除了可从CIM_PhysicalMemory类的所有详细信息列表:

get-wmiobject cim_physicalmemory |Select-object Banklabel,制造商,Partnumber,SerialNumber,容量,速度,SementClockspeed,SextendVoltage

与我们之前拉的处理器详细信息一样,这提供了常用于定义系统内存的性能能力的Go-to详细信息列表。此列表肯定不是全包,可以很容易地根据您的需求量身定制。

现在,如果每个内存模块的列表符合您的库存需求,那么您几乎已经完成了。但是只是为了乐趣,让我们假设你宁愿概述系统内存的摘要,只捕获服务器中包含的整体容量和物理内存模块的数量。为此,我们可以使用度量对象CMDLET到两者都计算物理内存设备的数量并计算容量的总和:

$ramSummary = Get-WmiObject CIM_PhysicalMemory | Select-Object -ExpandProperty容量| Measure-Object -Sum

如您所见,我们主要将此命令的结果分配给变量 - 用于存储值的内存单元 - 在本例中$ Ramsummary。因此,我们可以在执行命令后轻松达到计数和总和。我们已经谈过了这两种get-wmiobject.选择对象尽管-ExpandProperty参数不是我们以前讨论过的。如下所示(单击以展开),-ExpandProperty将名称显示为列标题(在本例中为Capacity)和值的对象的结果转换为值的列表(在本例中为8589934592)。

02内存和扩展项目 蒂姆法利利片

出于本练习的目的,这是关键,因为我们将值列表送入度量对象cmdlet。请注意,度量对象默认情况下提供一个计数,该细节是隐含的,但是我们必须指定我们也想要一个和。可以指定额外的标志,以便检索平均值、最大值、最小值或其他度量值(可能取决于向cmdlet输入的信息类型)。

因为我们定义了$ ramsummary变量,我们可以将计数和总和作为变量的属性访问:$ ramsummary.count和$ ramsummary.sum。CIM_PhysicalMemory类的测量单位最初为内存容量返回为字节,因此您可能希望将值显示为更可读的值。有几种方法可以做到这一点,简单地将结果除以1024三次会让你到千兆字节,但是更优雅的方法是使用PowerShell常量来简单地使用$ ramsummary.sum /1GB。

TPM Info for Security

安全性是现代网络中的一个重要因素,特别是当虚拟机和容器增加系统密度时。可信平台模块(TPM的)是Windows安全功能的关键,如BitLocker磁盘加密。与Windows 11一样,安装Windows Server 2022也需要tpm2.0芯片。

当然,您可以使用WMI类来检索与某些TPM相关的信息,但还有一个专用的cmdlet,可以让您的工作不仅仅是检查可用性和状态。让我们从Win32_tpm WMI类开始。

如果使用-list参数WIN32_TPM WMI类检索WMI对象列表,则不会显示,如果您尝试get-wmiobject win32_tpm它会给您一个错误,说明课程无效。这是因为您必须指定类存在的命名空间或路径:

get-wmiobject  -  inamespace root / cimv2 / security / microsofttpm -class win32_tpm

这绝对比简单地提供班级名称更涉及,但这是这项工作。注意:要使用Win32_tpm类,则需要管理凭据。

WMI不仅仅是一个只读系统;有一些方法(编程函数)可以针对WMI对象执行。这在硬件方面的好处有限,但在系统进程或服务等方面更有用。

Win32_TPM类有一些特别有用的方法,但首先这里是如何拉出一个类可用的方法列表:

$tpm = Get-WmiObject -Namespace root/cimv2/security/ microsoftpm -Class Win32_TPM
$ tpm |Get-Member -MemberType方法

获取会员是那些cmdlet之一得到帮助这几乎每天都可以用力。这对命令首先将来自WMI类的输出存储到$ TPM变量,然后列出与该类关联的方法。Win32_tpm类中的一些潜在有用的方法是Isactivated(),isEnabled()和selftest();每个都可以通过引用变量来执行,然后是以下方法:$ tpm.sfiest()。

如前所述,有一组专用的TPM cmdlet,您可以使用get-command -noun tpm而且这里有一些关于其中一个的东西。如果你执行get-tpm.你可能会立即注意到,我们已经通过WMI的细节中有很多重叠。明显地get-tpm.比完整的WMI命令键入速度是更快的,但主要的缺点是没有-Computername参数,因为有了get-wmiobject.,因此在远程系统上执行更具有挑战性。

检查保修状态

根据您的服务器硬件制造商,可能可以以编程方式检查其保修状态,假设您的硬件供应商支持它。如果您使用像HPE,戴尔或联想这样的大供应商之一,则机会很好地提供API,甚至可以提供PowerShell包PowerShell Gallery..在大多数情况下,您需要能够通过系统的序列号(A.K.A.Service标记)来传递模块,您可以使用Win32_BIOS类中的SerialNumber属性来获取:

get-wmiobject win32_bios |select-object-expanderperty serialnumber
加入网络世界社区有个足球雷竞技appFacebooklinkedin评论最重要的主题。

版权所有©2021 IDG通信有限Raybet2公司

SD-WAN买家指南:要询问供应商(和您自己)的关键问题