[玩转系统] 将系统路径添加到 CIMInstance 对象
作者:精品下载站 日期:2024-12-14 07:39:09 浏览:13 分类:玩电脑
将系统路径添加到 CIMInstance 对象
有一天晚上,当我在密西西比州 PowerShell 用户组演讲时,其中一位成员展示了一些使用 CIM cmdlet 的 PowerShell 3.0 代码。问题在于 CIM cmdlet 如何处理 WMI 系统属性(例如 __SERVER 和 __RELPATH)。默认情况下,不会显示这些属性,但它们会在 CimSystemProperties 属性中捕获。
问题是使用 Get-CIMInstance 时未捕获 __PATH 属性,如屏幕截图中所示。这显然是一个已知问题。使用 Get-WMIObject 仍然有效。
PS C:\> get-wmiobject win32_service -filter "name='bits'" | Select -expand __PATH
\SERENITY\root\cimv2:Win32_Service.Name="BITS"
大多数时候这可能没什么大不了的。但也许在某些情况下您需要 __PATH 属性。那天晚上我看到了一些构建 __PATH 属性的代码。我很感兴趣并决定自己解决这个问题。该路径需要计算机名称、命名空间类路径、类名称、类键和该键的值。我已经从
PS C:\> $c.CimSystemProperties.ServerName
SERENITY
PS C:\> $c.CimSystemProperties.Namespace.Replace("/","\")
root\cimv2
PS C:\> $c.CimSystemProperties.ClassName
Win32_Service
我改变了命名空间中斜杠的方向。我唯一缺少的部分是关键属性。但我可以通过查看类属性的限定符来找到它。将限定符视为表示特殊用途的标签。 CIMInstance 真正酷的地方在于它包含了类信息。这意味着我可以从对象本身查看类。
PS C:\> $c.cimclass.CimClassProperties | select name,qualifiers
我需要做的就是找到带有 KEY 限定符的属性。
PS C:\> $c.cimclass.CimClassProperties | where {$_.qualifiers.name -contains 'key'}
Name : Name
Value :
CimType : String
Flags : Property, Key, ReadOnly, NullValue
Qualifiers : {read, key}
ReferenceClassName :
现在我知道 Name 属性是关键,我可以完成路径的构建。
PS C:\> $Key = $c[0].CimClass.CimClassProperties |
>> where {$_.qualifiers.name -contains "key"} |
>> select -ExpandProperty Name
>>
PS C:\> $c | Select @{Name="__PATH";Expression={
>> '\{0}\{1}:{2}{3}' -f $_.CimSystemProperties.ServerName,
>> $_.CimSystemProperties.Namespace.Replace("/","\"),
>> $_.CimSystemProperties.ClassName,
>> ".$($key)=""$($_.$key)"""
>> }}
>>
__PATH
------
\SERENITY\root\cimv2:Win32_Service.Name="BITS"
这就是我使用 Get-WMIObject 获得的确切路径。
PS C:\> Get-WmiObject win32_service -filter "name='bits'" | select __Path
__PATH
------
\SERENITY\root\cimv2:Win32_Service.Name="BITS"
当然,我不想做所有这些输入工作,所以我创建了一个函数来为我完成这些工作。
#requires -version 3.0
Function Add-CIMPath {
<#
.Synopsis
Add the __PATH property to a CIMInstance object
.Description
The Get-CIMInstance cmdlet by default doesn't display the WMI system properties
like __SERVER. The properties are available in the CimSystemProperties property
except for __PATH. This function will construct the __PATH property and add it
to a CIMInstance object.
.Example
PS C:\> get-ciminstance win32_memorydevice | add-cimpath | select __Path
__PATH
------
\SERVER01\root\cimv2:Win32_MemoryDevice.DeviceID="Memory Device 0"
\SERVER01\root\cimv2:Win32_MemoryDevice.DeviceID="Memory Device 1"
.Example
PS C:\> get-ciminstance win32_bios -computer netbk8 | add-cimpath | format-list __Path,PSComputername
__PATH : \NETBK8\root\cimv2:Win32_BIOS.Name="Rev 1.0
",SoftwareElementID="Rev 1.0
",SoftwareElementState="3",TargetOperatingSystem="0",Version="LENOVO - 6040000"
PSComputerName : netbk8
.Inputs
CIMInstance
.Outputs
CIMInstance
.Link
Get-CIMInstance
#>
[cmdletbinding()]
Param (
[Parameter(Position=0,ValueFromPipeline=$True)]
[ValidateNotNullorEmpty()]
[ciminstance]$Inputobject
)
Begin {
Write-Verbose -Message "Starting $($MyInvocation.Mycommand)"
} #begin
Process {
#get the key class property
Write-Verbose "Processing $($Inputobject.CimClass.CimClassName)"
$Key = $Inputobject.CimClass.CimClassProperties |
where {$_.qualifiers.name -contains "key"} |
select -ExpandProperty Name
Write-Verbose "Creating __PATH Using key property $key"
$Inputobject | Add-Member -PassThru -MemberType NoteProperty -Name __PATH -Value (
'\{0}\{1}:{2}{3}' -f $_.CimSystemProperties.ServerName.ToUpper(),
$_.CimSystemProperties.Namespace.Replace("/","\"),
$_.CimSystemProperties.ClassName,
$(
if ($key -is [array]) {
#create a string with the array of key names and values
[string]$s = ".$($key[0])=""$($_.($key[0]))"""
#add each additional key separated by comma
for ($i=1;$i -lt $key.count;$i++) {
$s+= ",$($key[$i])=""$($_.($key[$i]))"""
}
$s
}
elseif ($Key) {
#just a single key
".$($key)=""$($_.$key)"""
}
else {
#no key
'=@'
})
) #value
} #process
End {
Write-Verbose -Message "Ending $($MyInvocation.Mycommand)"
} #end
} #end Add-CIMPath
该函数的主要部分本质上就是我刚才演示的内容。但是,在某些特殊情况下,没有键属性或有多个键,因此我必须添加一些逻辑来考虑到这一点。我编写该函数时假设您要将 CIMInstance 对象通过管道传递给它,并且您想要添加 __PATH。
PS C:\> get-ciminstance win32_logicaldisk | Add-CIMPath | select __Path
__PATH
------
\SERENITY\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
\SERENITY\root\cimv2:Win32_LogicalDisk.DeviceID="D:"
\SERENITY\root\cimv2:Win32_LogicalDisk.DeviceID="E:"
\SERENITY\root\cimv2:Win32_LogicalDisk.DeviceID="F:"
\SERENITY\root\cimv2:Win32_LogicalDisk.DeviceID="G:"
\SERENITY\root\cimv2:Win32_LogicalDisk.DeviceID="Z:"
这是特殊情况的样子。
我将是第一个承认这有点暴力破解的人,我不能保证我已经涵盖了每一个奇怪的用例。因此,如果您尝试此操作并遇到一个未提供正确 __PATH 的类,我希望您能让我知道。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag