[玩转系统] 了解使用 PowerShell 转换转换对象类型
作者:精品下载站 日期:2024-12-14 20:48:35 浏览:15 分类:玩电脑
了解使用 PowerShell 转换转换对象类型
PowerShell 不是一种严格类型的语言,这意味着它不会强制您在每次需要创建对象时都定义特定类型的对象。您可以使用 PowerShell 将字符串转换为整数、将字符串转换为日期以及任何其他类似类型。您可以将对象从一种类型转换为另一种类型。
PowerShell 中的一切都是对象。但是,您不必具体告诉 PowerShell 您想要哪种对象。
例如,使用 Get-Service
命令查询服务,并使用 Get-Member
命令查看它返回的对象类型。请注意,Get-Member
返回的 TypeName
类型为 System.ServiceProcess.ServiceController。
PS> Get-Service -Name wuauserv | Get-Member
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
<SNIP>
您不必明确告诉 PowerShell 您想要该类型的对象,它就会这样做。
但是,如果您不想要那种对象怎么办?也许您需要对特定类型的对象调用某些特定方法,或者需要引用不同对象的属性。在这种情况下,您将使用 PowerShell 将该对象转换到另一个对象或执行类型转换。
将字符串转换为 Int
转换是一个编程术语,定义将一种类似对象类型“转换”为另一种对象类型。但并非所有对象都可以相互转换。
假设您有一个定义为数字的字符串。您可以通过将字符串括在单引号或双引号中来定义字符串,如下所示。
PS> $string = '1'
PS> $string.GetType().Name
String
当您查看 $string
的值时,您会发现它是 1。够简单的。
PS> $string
1
如果 $string
是数字 1,您应该能够向其添加一个数字,对吗?让我们来看看吧。
PS> $string + 2
12
嗯..上次我检查 1 + 2 不是 12。这是怎么回事?
由于 $string
只是字符串数据,PowerShell 并未将这两个数字相加。相反,它将它们连接在一起,本质上只是将两者合并。
为了让 PowerShell 将两个数字相加,我们必须首先通过将字符串转换为 int 来告诉 PowerShell $string
实际上是一个数字。为此,我们使用 PowerShell 使用强制转换运算符将该字符串显式强制转换为整数类型。
PS> $string = [int]$string
1
现在让我们再次尝试将这两个数字相加。
PS> $string + 2
3
由于我们将 $string
转换为整数或使用 PowerShell 将字符串“转换”为 int,PowerShell 现在能够将它们加在一起。铸造对象完全改变它们的属性,允许您对它们执行不同的操作。
其他有用的铸造场景
在PowerShell中,您可以强制转换各种对象。
转换为 XML
例如,采用 XML 文件。 XML 文件只是一堆字符串。 PowerShell 不知道 XML 是一种结构化格式。
例如,也许我们有一个简单的 XML 文件,如下所示:
<person>
<firstname>Adam</firstname>
<lastname>Bertram</lastname>
<levelofawesome>Really high</levelofawesome>
</person>
如果该文件位于 C:\person.xml 中,您可以使用 Get-Content
命令读取它,它将返回 XML 或 PowerShell 认为的内容一串字符串。
PS C:\> Get-Content C:\person.xml
<person>
<firstname>Adam</firstname>
<lastname>Bertram</lastname>
<levelofawesome>Really high</levelofawesome>
</person>
但是,您知道这是 XML,而不仅仅是一堆字符串,并且您需要使用 XPath 对其执行一些 XML 搜索。 PowerShell 有一个名为类型加速器的概念,它允许您轻松地将这组看起来像 XML 的字符串转换为实际的 XML 对象。
在变量声明前面添加 [xml]
告诉 PowerShell 将从 Get-Content
获取的字符串组转换为数据类型 XML 对象。现在您可以在下面看到您引用的属性,例如 person 以及所有属性。
PS> [xml]$person = Get-Content -Path 'C:\person.xml'
PS> [xml]$person
person
------
person
PS> ([xml]$person).person
firstname lastname levelofawesome
--------- -------- --------------
Adam Bertram Really high
您现在还可以看到该对象的类型为 System.Xml.XmlDocument,它揭示了您可以使用的大量特定于 XML 的方法和属性。
将字符串转换为日期
与 XML 类似,我们还可以将字符串转换为日期时间对象或使用 PowerShell 将字符串转换为日期。要创建日期时间对象,只需定义一个看起来像日期的字符串,例如1/20/80。对于你和我来说,这是一个日期,但正如你所见,PowerShell 不知道。对此没有特定日期的事情要做。它只是一个字符串。
PS> $date = '1/20/80'
PS> $date | Get-Member
PS C:\> $date | Get-Member
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
CompareTo Method int CompareTo(System.Object value), int CompareTo(string strB), int IComparable.CompareTo(System.Object obj), int ...
Contains Method bool Contains(string value)
CopyTo Method void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count)
EndsWith Method
<SNIP>
但是,在该字符串前面加上 [datetime]
会将该字符串转换为日期时间对象,然后您可以利用许多特定于日期时间的方法和属性。
PS> [datetime]$date = '1/20/80'
PS> $date | Get-Member
TypeName: System.DateTime
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
AddMilliseconds Method datetime AddMilliseconds(double value)
AddMinutes Method datetime AddMinutes(double value)
AddMonths Method datetime AddMonths(int months)
<SNIP>
将哈希表转换为 PSCustomObject
对于最后一个示例,也是我经常做的一个示例,是将哈希表转换为 PSCustomObject 类型。
PS> $person = @{'FirstName' = 'Adam'; 'LastName' = 'Bertram'}
PS> $person.GetType().Name
HashTable
PS> ([pscustomobject]$person).GetType().Name
PSCustomObject
一旦对象属于 PSCustomObject,您就可以引用对象属性,例如 $person.FirstName
、$person.LastName
等。
概括
在这篇博文中,您了解了 PowerShell 如何处理对象以及 PowerShell 如何将某些对象转换为其他对象。我们介绍了一些常见的转换,例如字符串到整数和字符串到日期时间对象,还介绍了称为类型加速器的 PowerShell 概念,它提供了将对象转换为各种 .NET 对象的快捷方式。
如果您想详细了解 PowerShell 如何处理对象,甚至使用鲜为人知的 PSTypeName 功能构建您自己的自定义类型,请查看使用 PowerShell 和 PSTypeName 构建自定义对象类型嗯>。
猜你还喜欢
- 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