[玩转系统] 关于 Types.ps1xml
作者:精品下载站 日期:2024-12-14 02:17:44 浏览:13 分类:玩电脑
关于 Types.ps1xml
简短描述
说明如何使用 Types.ps1xml
文件扩展 PowerShell 中使用的对象类型。
详细描述
扩展类型数据定义了 PowerShell 中对象类型的附加属性和方法(“成员”)。有两种技术可将扩展类型数据添加到 PowerShell 会话。
Types.ps1xml
文件:定义扩展类型数据的 XML 文件。Update-TypeData
:重新加载Types.ps1xml
文件并定义当前会话中类型的扩展数据的 cmdlet。
本主题介绍 Types.ps1xml
文件。有关使用 Update-TypeData
cmdlet 将动态扩展类型数据添加到当前会话的详细信息,请参阅 Update-TypeData。
关于扩展类型数据
扩展类型数据定义了 PowerShell 中对象类型的附加属性和方法(“成员”)。您可以扩展 PowerShell 支持的任何类型,并以与使用对象类型上定义的属性相同的方式使用添加的属性和方法。
例如,PowerShell 将 DateTime 属性添加到所有 System.DateTime
对象,例如 Get-Date
cmdlet 返回的对象。
(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM
在 System.DateTime 结构的描述中找不到 DateTime 属性,因为 PowerShell 添加了该属性,并且该属性仅在 PowerShell 中可见。
PowerShell 内部定义了一组默认的扩展类型。此类型信息在启动时加载到每个 PowerShell 会话中。 DateTime 属性是此默认集的一部分。在 PowerShell 6 之前,类型定义存储在 PowerShell 安装目录 ($PSHOME
) 中的 Types.ps1xml
文件中。
向 PowerShell 添加扩展类型数据
PowerShell 会话中存在三个扩展类型数据源。
扩展类型数据由 PowerShell 定义并自动加载到每个 PowerShell 会话中。从 PowerShell 6 开始,此信息被编译到 PowerShell 中,并且不再以
Types.ps1xml
文件形式提供。当模块导入当前会话时,会加载模块导出的
Types.ps1xml
文件。使用
Update-TypeData
cmdlet 定义的扩展类型数据仅添加到当前会话。它不保存在文件中。
在会话中,来自三个源的扩展类型数据以相同的方式应用于对象,并且可用于指定类型的所有对象。
TypeData cmdlet
以下 cmdlet 包含在 PowerShell 3.0 及更高版本的 Microsoft.PowerShell.Utility 模块中。
Get-TypeData
:获取当前会话中的扩展类型数据。Update-TypeData
:重新加载Types.ps1xml
文件。将扩展类型数据添加到当前会话。Remove-TypeData
:从当前会话中删除扩展类型数据。
有关这些 cmdlet 的详细信息,请参阅每个 cmdlet 的帮助主题。
内置 Types.ps1xml 文件
$PSHOME
目录中的 Types.ps1xml
文件会自动添加到每个会话中。
PowerShell 安装目录 ($PSHOME
) 中的 Types.ps1xml
文件是一个基于 XML 的文本文件,可让您向 PowerShell 中使用的对象添加属性和方法。 PowerShell 具有内置 Types.ps1xml
文件,可向 .NET 类型添加多个元素,但您可以创建其他 Types.ps1xml
文件来进一步扩展类型。
例如,默认情况下,数组对象 (System.Array
) 具有一个 Length 属性,用于列出数组中的对象数量。但是,由于名称 Length 没有清楚地描述该属性,PowerShell 添加了一个名为 Count 的别名属性,该属性显示相同的值。以下 XML 将 Count 属性添加到 System.Array
类型。
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
要获取新的 AliasProperty,请在任何数组上使用 Get-Member
命令,如以下示例所示。
Get-Member -InputObject (1,2,3,4)
该命令返回以下结果。
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
Address Method System.Object& Address(Int32)
Clone Method System.Object Clone()
CopyTo Method System.Void CopyTo(Array array, Int32 index):
Equals Method System.Boolean Equals(Object obj)
Get Method System.Object Get(Int32)
# ...
因此,您可以在 PowerShell 中使用数组的 Count 属性或 Length 属性。例如:
(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4
创建新的 Types.ps1xml 文件
随 PowerShell 安装的 .ps1xml
文件经过数字签名以防止篡改,因为格式可能包含脚本块。因此,要将属性或方法添加到 .NET 类型,请创建您自己的 Types.ps1xml
文件,然后将它们添加到您的 PowerShell 会话中。
要创建新文件,请首先复制现有的 Types.ps1xml
文件。新文件可以具有任何名称,但必须具有 .ps1xml
文件扩展名。您可以将新文件放置在 PowerShell 可访问的任何目录中,但将文件放置在 PowerShell 安装目录 ($PSHOME
) 或安装目录的子目录中会很有用。
保存新文件后,使用 Update-TypeData
cmdlet 将新文件添加到 PowerShell 会话中。如果您希望自己的类型优先于定义的内置类型,请使用 Update-TypeData
cmdlet 的 PrependData 参数。 Update-TypeData
仅影响当前会话。要对所有未来会话进行更改,请导出控制台,或将 Update-TypeData
命令添加到您的 PowerShell 配置文件中。
Types.ps1xml 和添加成员
Types.ps1xml
文件将属性和方法添加到受影响的 PowerShell 会话中指定 .NET 类型的对象的所有实例。但是,如果您只需向对象的一个实例添加属性或方法,请使用 Add-Member
cmdlet。
有关详细信息,请参阅添加成员。
示例:将 Age 成员添加到 FileInfo 对象
此示例演示如何将 Age 属性添加到 System.IO.FileInfo 对象。文件的年龄是其创建时间与当前时间(以天为单位)之间的差异。
由于 Age 属性是通过使用脚本块计算的,因此请查找 <ScriptProperty>
标记用作新 Age 属性的模型。
将以下 XML 代码保存到文件 $PSHOME\MyTypes.ps1xml
中。
<?xml version="1.0" encoding="utf-8" ?>
<Types>
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>Age</Name>
<GetScriptBlock>
((Get-Date) - ($this.CreationTime)).Days
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
</Types>
运行 Update-TypeData
将新的 Types.ps1xml
文件添加到当前会话。该命令使用 PrependData 参数将新文件放置在高于原始定义的优先顺序中。
有关 Update-TypeData
的更多信息,请参阅 Update-TypeData。
Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml
要测试更改,请运行 Get-ChildItem
命令以获取 $PSHOME
目录中的 PowerShell.exe 文件,然后将该文件通过管道传输到 Format- List
cmdlet 用于列出文件的所有属性。更改后,Age 属性将出现在列表中。
Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142
Types.ps1xml 文件中的 XML
完整的架构定义可以在 GitHub 上的 PowerShell 源代码存储库的 Types.xsd 中找到。
<Types>
标记包含文件中定义的所有类型。应该只有一个 <Types>
标记。
文件中提到的每个 .NET 类型都应由 <Type>
标记表示。
类型标签必须包含以下标签:
<Name>
:包含受影响的 .NET 类型的名称。
<Members>
:包含为 .NET 类型定义的新属性和方法的标记。
以下任何成员标签都可以位于 <Members>
标签内。
AliasProperty
为现有属性定义新名称。
<AliasProperty>
标记必须具有指定新属性名称的 <Name>
标记和指定新属性名称的 <ReferencedMemberName>
标记。现有财产。
例如,Count 别名属性是数组对象的 Length 属性的别名。
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>Length</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
CodeMethod
引用 .NET 类的静态方法。
<CodeMethod>
标记必须具有指定新方法名称的 <Name>
标记和指定新方法名称的 <CodeReference>
标记。定义该方法的代码。
例如,ToString 方法是 Microsoft.PowerShell.ToStringCodeMethods 代码定义的名称。
<Type>
<Name>System.Xml.XmlNode</Name>
<Members>
<CodeMethod>
<Name>ToString</Name>
<CodeReference>
<TypeName>Microsoft.PowerShell.ToStringCodeMethods</TypeName>
<MethodName>XmlNode</MethodName>
</CodeReference>
</CodeMethod>
</Members>
</Type>
CodeProperty
引用 .NET 类的静态方法。
<CodeProperty>
标记必须具有指定新属性名称的 <Name>
标记和指定新属性名称的 <GetCodeReference>
标记。定义属性的代码。
例如,System.IO.DirectoryInfo
对象的 Mode 属性是 PowerShell FileSystem 提供程序中定义的代码属性。
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<CodeProperty>
<Name>Mode</Name>
<GetCodeReference>
<TypeName>
Microsoft.PowerShell.Commands.FileSystemProvider
</TypeName>
<MethodName>Mode</MethodName>
</GetCodeReference>
</CodeProperty>
</Members>
</Type>
MemberSet
定义成员(属性和方法)的集合。
<MemberSet>
标记出现在主 <Members>
标记内。这些标记必须包含一个围绕成员集名称的 <Name>
标记和一个围绕该集中成员(属性和方法)的辅助 <Members>
标记。创建属性(例如 <NoteProperty>
或 <ScriptProperty>
)或方法(例如 <Method>
或<ScriptMethod>
) 可以是该集合的成员。
在 Types.ps1xml
文件中,<MemberSet>
标记用于定义 PowerShell 中 .NET 对象的默认视图。在这种情况下,成员集的名称(<Name>
标记内的值)始终为 PsStandardMembers,并且属性的名称(<Name>
标记)是以下之一:
DefaultDisplayProperty
:对象的单个属性。DefaultDisplayPropertySet
:对象的一个或多个属性。DefaultKeyPropertySet
:对象的一个或多个关键属性。键属性标识属性值的实例,例如会话历史记录中项目的 ID 号。
例如,以下 XML 定义 Get-Service
cmdlet 返回的服务(System.ServiceProcess.ServiceController
对象)的默认显示。它定义了一个名为PsStandardMembers的成员集,该成员集由默认属性集和默认显示属性组成。它将默认属性集定义为 Status、Name 和 DisplayName 属性。它将默认显示属性定义为名称。
<Type>
<Name>System.ServiceProcess.ServiceController</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>Status</Name>
<Name>Name</Name>
<Name>DisplayName</Name>
</ReferencedProperties>
</PropertySet>
<NoteProperty>
<Name>DefaultDisplayProperty</Name>
<Value>Name</Value>
</NoteProperty>
</Members>
</MemberSet>
</Members>
</Type>
<Method>
:引用底层对象的本机方法。
<Methods>
:对象的方法的集合。
NoteProperty
定义具有静态值的属性。
<NoteProperty>
标记必须具有指定新属性名称的 <Name>
标记和指定新属性的 <Value>
标记。财产的价值。
例如,以下 XML 为 System.IO.DirectoryInfo 对象创建 Status 属性。 Status 属性的值始终为Success。
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<NoteProperty>
<Name>Status</Name>
<Value>Success</Value>
</NoteProperty>
</Members>
</Type>
PropertySet
接受参数并返回值的属性。
<Properties>
:对象属性的集合。
<Property>
:基础对象的属性。
<PropertySet>
:定义对象的属性集合。
<PropertySet>
标记必须具有指定属性集名称的 <Name>
标记和指定属性集名称的 <ReferencedProperty>
标记。特性。属性的名称包含在 <Name>
标记中。
在 Types.ps1xml
中,<PropertySet>
标记用于定义对象默认显示的属性集。您可以通过 <MemberSet>
标记的 <Name>
标记中的值 PsStandardMembers 来标识默认显示。
例如,以下 XML 创建一个名为 DefaultDisplayPropertySet 的 PropertySet,其中包含三个 ReferencedProperties。
<Type>
<Name>System.ServiceProcess.ServiceController</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>Status</Name>
<Name>Name</Name>
<Name>DisplayName</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
ScriptMethod
定义一个方法,其值是脚本的输出。
<ScriptMethod>
标记必须具有指定新方法名称的 <Name>
标记和包含新方法名称的 <Script>
标记。返回方法结果的脚本块。
例如,管理对象 (System.System.Management.ManagementObject
) 的 ConvertToDateTime
和 ConvertFromDateTime
方法是使用
和 System.Management.ManagementDateTimeConverter
类的 ToDateTimeToDmtfDateTime
静态方法。
<Type>
<Name>System.Management.ManagementObject</Name>
<Members>
<ScriptMethod>
<Name>ConvertToDateTime</Name>
<Script>
[System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
</Script>
</ScriptMethod>
<ScriptMethod>
<Name>ConvertFromDateTime</Name>
<Script>
[System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
</Script>
</ScriptMethod>
</Members>
</Type>
ScriptProperty
定义一个属性,其值是脚本的输出。
<ScriptProperty>
标记必须有一个 <Name>
标记(指定新属性的名称)和一个 <GetScriptBlock>
标记(包含返回属性值的脚本块。
例如,System.IO.FileInfo 对象的 VersionInfo 属性是使用 System.IO.FileInfo 对象的 FullName 属性生成的脚本属性。 System.Diagnostics.FileVersionInfo 对象的 >GetVersionInfo 静态方法。
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>VersionInfo</Name>
<GetScriptBlock>
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
有关详细信息,请参阅 Windows PowerShell 软件开发工具包 (SDK)。
Update-TypeData
要将 Types.ps1xml
文件加载到 PowerShell 会话中,请运行 Update-TypeData
cmdlet。如果您希望文件中的类型优先于内置 Types.ps1xml
文件中的类型,请添加 Update-TypeDataPrependData 参数代码>.
Update-TypeData
仅影响当前会话。要对所有未来会话进行更改,请导出会话,或将 Update-TypeData
命令添加到您的 PowerShell 配置文件中。
属性中发生的异常,或向 Update-TypeData
命令添加属性时发生的异常,不会向 StdErr
报告错误。这是为了抑制在格式化和输出过程中许多常见类型可能发生的异常。如果您要获取 .NET 属性,则可以使用方法语法来解决异常抑制问题,如以下示例所示:
"hello".get_Length()
请注意,方法语法只能与 .NET 属性一起使用。通过运行 Update-TypeData
cmdlet 添加的属性不能使用方法语法。
签署 Types.ps1xml 文件
为了保护 Types.ps1xml
文件的用户,您可以使用数字签名对该文件进行签名。有关更多信息,请参阅 about_Signing。
参见
- about_签名
- Copy-Item
- Copy-ItemProperty
- Get-Member
- Get-TypeData
- Remove-TypeData
- Update-TypeData
猜你还喜欢
- 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