当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 属性集可发挥作用

作者:精品下载站 日期:2024-12-14 08:02:08 浏览:11 分类:玩电脑

PowerShell 属性集可发挥作用


如果您像我一样每天大部分时间都在 PowerShell 提示符下度过,那么任何可以简化该过程的方法都值得花时间学习或设置。尽管我是一名不错的打字员,但我很高兴找到在 PowerShell 提示符下减少打字的方法。我已经利用了制表符补全和 PSReadline 功能。但总有更多事情要做。这就是我认为你能体会到的情况。

假设我经常从控制台提示符运行这样的 PowerShell 命令。

Get-Childitem c:\work -file | Select-Object -Property "Name","Length","CreationTime","LastWriteTime" 

我使用的是文件,但它可以是您重复需要相同属性名称集合的任何命令。我可以为属性名称创建变量。

$p = "Name","Length","CreationTime","LastWriteTime"
dir c:\work -file | select $p 

但我必须记住始终定义该变量。我可以在我的 PowerShell 配置文件中定义它,但还有更好的方法。

属性集

PowerShell 的可扩展类型系统 (ETS) 允许使用称为属性集的东西。这是您可以通过单个属性名称引用的属性集合。默认情况下,Get-Process 中的进程对象包含其中一些。

[玩转系统] PowerShell 属性集可发挥作用

你可以自己尝试一下。

get-Process | Select psconfiguration

您不必键入 4 个属性名称,而只需键入一个。更不用说你使用制表符补全了!为了减轻示例场景中的打字负担,我需要为文件对象设置属性。

新-PSPropertySet

现在是不那么容易的部分。使用 Update-TypeData 创建其他类型扩展(例如别名属性)非常简单。但属性集只能在 .ps1xml 文件中定义,然后使用 Update-TypeData 导入该文件。啊。谁想要创建 XML?所以我“作弊”并写了一个命令来为我做这件事。

我更新了 PSTypeExtensionTools 模块,添加了一个名为 New-PSPropertySet 的新函数。我可以使用此函数轻松创建 .ps1xml 文件。您可以从 PowerShell 库安装 PSTypeExtensionTools 模块。您需要 v1.71 或更高版本。

要创建扩展,您需要知道类型名称。这是当您通过管道传输到 Get-Member 时看到的内容。这就是多么简单。

New-PSPropertySet -Typename System.IO.FileInfo -Name TimeSet -Properties "Name","Length","CreationTime","LastWriteTime" -FilePath c:\work\file.types.ps1xml

我的属性集将称为 TimeSet 并使用指定的属性。您需要使用 ps1xml 文件扩展名才能导入它。

Update-TypeData C:\work\file.types.ps1xml

[玩转系统] PowerShell 属性集可发挥作用

现在我可以使用这个属性了。

[玩转系统] PowerShell 属性集可发挥作用

只要我这样做,我想我将使用 PSTypeExtensionTools 模块中的另一个命令创建一些新的类型扩展,然后定义一个新的属性集。

Add-PSTypeExtension -TypeName system.io.fileinfo -MemberType AliasProperty -MemberName Size -Value Length
Add-PSTypeExtension -TypeName system.io.fileinfo -MemberType ScriptProperty -MemberName ModifiedAge -Value {New-TimeSpan -Start $this.lastwritetime -End (Get-Date)}
New-PSPropertySet -Typename system.io.fileinfo -Name Age -Properties Name,Size,LastWriteTime,ModifiedAge -Append -FilePath C:\work\file.types.ps1xml

我还没有加载新的属性集,但我可以测试这些属性。

[玩转系统] PowerShell 属性集可发挥作用

该模块具有使用 JSON 或 XML 导出和导入类型扩展的机制。但由于我有一个属性集,我也可能包含类型扩展。

Export-PSTypeExtension -TypeName system.io.fileinfo -MemberName Size,ModifiedAge -Path c:\work\file.types.ps1xml -append
Update-TypeData C:\work\file.types.ps1xml

如果重新导入尝试定义现有扩展的文件,PowerShell 将引发异常。使用 .ps1xml 文件时无法强制更新。但将会创建新的设置。

[玩转系统] PowerShell 属性集可发挥作用

现在,我可以使用所需的属性名称(例如 Size)获取结果,创建新属性(例如 ModifiedAge),并将一组属性作为一组引用,例如 Age 。我需要做的就是在我的 PowerShell 配置文件脚本中添加 Update-TypeData 命令。

我希望你和我一样觉得这很有用。请随意留下评论或问题。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯