[玩转系统] 你是我喜欢的类型吗?
作者:精品下载站 日期:2024-12-14 07:51:40 浏览:13 分类:玩电脑
你是我喜欢的类型吗?
我总是强调 PowerShell 是关于对象的。如果您记住这一点,PowerShell 就非常容易使用。获取一堆内容,然后选择您想要查看或使用的详细信息。开箱即用的 PowerShell 为您提供了一些非常丰富的对象,从简单的文件到 Active Directory 用户。我更喜欢的是,您可以“即时”创建自己的属性来满足您的需求。这几乎就像魔法一样。您几乎可以凭空创建新属性。但有时这个过程也会变得有点乏味或令人难以承受。让我提供一些解决方案。
让我们开始运行一个 PowerShell 表达式来发现当前正在运行的系统驱动程序。
Get-CimInstance -class win32_systemdriver -filter "state='running'" |
Select-Object Name,Description,ServiceType,StartMode,@{Name="Path";Expression={$_.pathname}},
@{Name="Company";Expression = {(get-item $_.pathname).versioninfo.CompanyName}},
@{Name="Product";Expression = {(get-item $_.pathname).versioninfo.ProductName}},
@{Name="Version";Expression = {(get-item $_.pathname).versioninfo.productversion}},
@{Name="Updated";Expression = {(get-item $_.pathname).lastwritetime}},
@{Name="Computername";Expression={$_.SystemName}}
虽然有效,但这需要大量打字。通过 Select-Object,我使用哈希表创建了一些别名属性。例如,我不想使用“系统名称”,而是想显示“计算机名称”。我还想包含不属于 Win32_SystemDriver 对象一部分的信息。该对象确实包含文件路径的属性,因此我创建了一些自定义属性来从文件中检索版本信息。
@{Name="Company";Expression = {(get-item $_.pathname).versioninfo.CompanyName}},
@{Name="Product";Expression = {(get-item $_.pathname).versioninfo.ProductName}},
@{Name="Version";Expression = {(get-item $_.pathname).versioninfo.productversion}}
挑战在于,如果我想使用不同的过滤器或不同的属性子集重新运行命令,我必须重新键入大量代码。我敢打赌你不喜欢打字。让我们看看一些选项。
首先,您可以将自定义属性定义保存为变量。
$path = @{Name="Path";Expression={$_.pathname}}
$company = @{Name="Company";Expression = {(get-item $_.pathname).versioninfo.CompanyName}}
我可以在我的 Select-Object 语句中使用这些变量。
Get-CimInstance -class win32_systemdriver -filter "state='running'" |
Select-Object Name,Description,StartMode,$path,$company | Group Company
只要定义了这些变量,我就可以随意使用它们。
但也许最好的方法是创建您自己的类型扩展。在你以为我要求你创建一个看起来很神秘的 xml 文件之前,这实际上非常简单。首先,您需要要扩展的对象的类型名。每次使用 Get-Member 时都会看到这一点。
我将用一行代码保存这个值。
$type = get-ciminstance win32_systemdriver | select-object -first 1 | Get-member | Select-object -ExpandProperty TypeName
这个变量很可能是一个名称数组,所以我将使用 $type[0]
接下来,我将使用 Update-TypeData cmdlet。是的,您可以使用 ps1xml 文件,但并非必须如此。我可以轻松创建我的别名属性。
Update-TypeData -TypeName $type[0] -MemberType AliasProperty -MemberName Path -Value pathname -force
Update-TypeData -TypeName $type[0] -MemberType AliasProperty -MemberName Computername -Value SystemName -force
Value 是实际属性的名称。我正在使用 -Force 覆盖任何现有的属性定义。我还可以创建 ScriptProperties,它将运行一小段代码来获取值。
Update-TypeData -TypeName $type[0] -MemberType ScriptProperty -MemberName Company -Value {(get-item $this.pathname).versioninfo.CompanyName} -force
Update-TypeData -TypeName $type[0] -MemberType ScriptProperty -MemberName "Product" -Value {(get-item $this.pathname).versioninfo.ProductName} -force
Update-TypeData -TypeName $type[0] -MemberType ScriptProperty -MemberName "Version" -Value {(get-item $this.pathname).versioninfo.productversion} -force
Update-TypeData -TypeName $type[0] -MemberType ScriptProperty -MemberName "Updated" -Value {(get-item $this.pathname).lastwritetime} -force
该值是我之前定义的表达式键的脚本块部分。您必须记住进行的唯一其他更改是使用 $this 而不是 $_。
现在,这些属性是为任何 Win32_SystemDriver 对象定义的。
Get-CimInstance Win32_SystemDriver -filter "state='running'" |
Select-Object Name,Description,ServiceType,StartMode,Path,Company,Product,Version,Updated,Computername |
Out-Gridview -title "Running Drivers"
看看这有多容易和清洁吗?我可以随心所欲地使用这些属性。
Get-CimInstance Win32_SystemDriver -filter "servicetype='kernel driver'" |
Where Company -notmatch "microsoft" | Sort StartMode,Name |
Format-Table -GroupBy StartMode -Property State,Name,Company
但是,请记住,这些是*您的*属性,而不是 WMI 的一部分,这就是为什么我无法在 Get-CimInstance 过滤器中使用它们。
关于此技术的一些最后注意事项。这些扩展仅在我的 PowerShell 会话运行期间持续有效。如果我总是想要拥有它们,我会将此代码放入我的 PowerShell 配置文件脚本中。编写使用这些扩展的脚本或模块时还应该小心。如果有人正在运行您的代码并且他们没有添加类型扩展,则代码将无法工作。在模块中,您可以将 Update-TypeData 行添加到 .psm1 文件中。或者,您可以采取额外的步骤来创建带有扩展名的实际 .ps1xml 文件,并将其包含在您的模块中。
试一下我的代码示例并让我知道您的想法。
猜你还喜欢
- 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