[玩转系统] 了解 PowerShell 数据类型和加速器
作者:精品下载站 日期:2024-12-14 13:02:16 浏览:14 分类:玩电脑
了解 PowerShell 数据类型和加速器
与许多其他语言一样,PowerShell 几乎所有事情都使用对象。 PowerShell 具有数据类型,可以使用不同的属性和方法架构对对象类型进行“分类”。
一旦您了解了 PowerShell 数据类型,您很快就会发现 PowerShell 类型加速器这一概念具有节省时间的能力。加速器是在 PowerShell 中加速分配数据类型的方法。
在本文中,您将了解各种对象数据类型以及如何使用加速器来更轻松地使用它们。
类型加速器示例
即使您以前没有听说过加速器,您也很可能在编码时使用过它们。使用PowerShell获取类型你会发现,[Array]
、[Bool]
或[String]
都是类型加速器。这些类加速器提供的是快速访问较长的 .NET 定义。
[数组]
→[System.Array]
[CmdletBinding]
→[System.Management.Automation.CmdletBindingAttribute]
我们如何了解在 PowerShell 中使用加速器的选项?继续阅读以了解有关类型加速器的所有信息!
通过获取类型加速器发现 PowerShell 数据类型
PowerShell 提供了一个单行命令,该命令将返回 PowerShell 已知的每种类型的加速器。例如,PowerShell 7 环境中可用的类型加速器如下。
[PSObject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::Get
Key Value
--- -----
Alias System.Management.Automation.AliasAttribute
AllowEmptyCollection System.Management.Automation.AllowEmptyCollectionAttribute
AllowEmptyString System.Management.Automation.AllowEmptyStringAttribute
AllowNull System.Management.Automation.AllowNullAttribute
ArgumentCompleter System.Management.Automation.ArgumentCompleterAttribute
ArgumentCompletions System.Management.Automation.ArgumentCompletionsAttribute
<SNIP>
了解如何使用每个加速器是完全不同的任务。为此,您需要了解给定加速器的构造函数。使用 GetConstructors 方法,我们可以发现构造函数所需的参数。
首先,我们检索 URI
加速器以了解有六种不同的类型。输出可能并不总是清楚要使用哪个值 - 如果是这样,阅读 Microsoft 参考文档通常会阐明如何使用该类。
( [Type]"URI" ).GetConstructors() | ForEach-Object {
( $_.GetParameters() | ForEach-Object { $_.ToString() } ) -Join ", "
}
PowerShell 数据类型加速器
有了查找 PowerShell 数据类型加速器以及它们可能使用的构造函数的能力,让我们深入了解如何使用最常见的加速器!
统一资源标识符
URL(统一资源定位符)和 URI(统一资源标识符)可能很难操作。很多时候,唯一的办法是使用字符串操作来提取所需的值。 .NET 为这些场合提供了 URI
类型加速器。
下面的示例演示了将简单的 URL 传递到 URI
加速器。输出是 URI 的组成部分,使操作更加快捷。
[URI]"https://google.com/"
一旦您有了 URI 对象,就可以使用一些简单的方法来进一步使用,如下面的 Get-Member
输出所示。
$URI = [URI]"https://google.com/"
$URI | Get-Member -Type Method
WMI、WMI 搜索器、WMI 类
许多长期使用 PowerShell 的管理员都熟悉 WMI 或 Windows Management Instrumentation。许多 Windows 设置存在于 WMI 框架内。那么我们可以使用 WMI
、WMISearcher
和 WMIClass
加速器做什么呢?
WMIClass
- 访问类的静态属性和方法。WMISearcher
- 创建 WMI 对象搜索。WMI
- 检索类的单个实例。
下面演示的代码使用所有三种方法来创建 notepad.exe
进程、找到该进程,然后检索进一步的进程详细信息。
# Create notepad.exe Process
$ProcessManager = [WMICLASS]"root\cimv2:WIn32_Process"
$ProcessManager.Create("notepad.exe")
# Locate the notepad.exe process
$Search = [WmiSearcher]'SELECT * FROM Win32_Process'
$Processes = $Search.Get()
$Process = $Processes | Where-Object Name -Match "Notepad"
# Use WMI accelerator to retrieve the notepad.exe process
$WMIProcess = [WMI]("\.\root\cimv2:Win32_Process.Handle='{0}'" -F $Process.ProcessId)
XML
处理 XML 文档是一项挑战。 XML 提供了一种灵活但冗长的格式。对于任何语言来说,尝试解析长而复杂的文档都是困难的。 PowerShell 使用 PowerShell 数据类型加速器 XML
使这一切变得更加容易。使用 Get-Content
从字符串或文件中使用 XML 文档。
$XML = [XML]"<note>
<to>Joe</to>
<from>Ashley</from>
<heading>Reminder</heading>
<body>Don't forget Bob's birthday this weekend!</body>
</note>"
$XML.Note.Body
您可以看到如何轻松地浏览节点以查找特定值。例如,假设我们不需要 heading
子节点。使用 SelectNodes
方法可以轻松执行 XPath 搜索。使用 SelectSingleNode
定位单个节点,然后使用 RemoveChild
方法删除该节点。
$XPath = '/note'
$Nodes = $XML.SelectNodes($XPath )
$Nodes | ForEach-Object {
$Node = $_.SelectSingleNode('heading')
$_.RemoveChild($Node) | Out-Null
}
正则表达式
正则表达式使文本内容中的复杂搜索变得更加容易。构建这些查询本身就是一个挑战。设计出完美的查询后,您可以使用 PowerShell RegEx
加速器对文本内容执行快速匹配。
虽然从技术上讲不是 PowerShell 数据类型,但正则表达式类型加速器仍然可以极大地减少执行正则表达式匹配的次数。
下面是一个简单的RegEx
匹配方法。制作一个简单的正则表达式并对文本字符串调用 Match
方法来执行搜索。
([RegEx]'\d{8}').Match('This will find the first 8 values, like 12345678').Value
约会时间
PowerShell 的一个共同点是需要处理脚本中的日期。操纵日期和时间的方法有很多。一种简单的方法(有许多有用的方法)是使用 PowerShell 数据类型 [DateTime]
加速器。一些更有用的技术是:
- 解析日期时间字符串
- 设置日期时间格式
- 日期时间算术运算
解析日期时间字符串
给定已知的日期格式(即不是自定义格式),DateTime
加速器将返回一个有效的 System.DateTime
对象,该对象与使用时的对象类型相同Get-Date
函数。
[DateTime]::Parse('2020-08-10')
设置日期时间格式
数据文件通常需要独特格式的日期时间字符串。例如,我们采用之前创建的相同日期并调用 ToString
方法。对于此方法,我们将传递自定义日期格式 MM_dd_yyyy-hh:mm:ss
。请注意,这不是典型的格式,但使用 ToString
方法,我们将以这种格式正确输出日期。
([DateTime]::Parse('2020-08-10')).ToString('MM_dd_yyyy-hh:mm:ss')
日期时间算术运算
从现有 datetime
对象中添加和减去时间至关重要。不要使用复杂的解决方法,而是利用 DateTime
类来执行这些操作。
([DateTime]::Parse('2020-08-10')).AddDays(5)
(([DateTime]::Parse('2020-08-10')).AddDays(5)).AddMonths(-2)
添加 5
天后,我们还需要删除两个月。尽管使用了 AddMonths
方法,但传递负值会减去时间。使用括号进行链接操作,我们最终得到了期望的结果。
时间跨度
与 DateTime
类非常相似,TimeSpan
类使处理时间范围变得容易。与 DateTime
不同,可以使用额外的数学运算,例如除法和乘法。
创建时间跨度对象
您可以通过多种方式构建时间跨度值。在我们的示例中,我们使用小时、分钟、秒构造函数。其他可能的构造函数如下所示。
- 蜱虫
- 小时、分钟、秒
- 天、小时、分钟、秒
- 天、小时、分钟、秒、毫秒
$TimeSpan = [TimeSpan]::New(1,0,0)
$TimeSpan
时间跨度上的乘法和除法
假设您已经定义了给定的时间跨度,但您想知道该范围的三倍是多少。使用Multiply
方法可以很简单地做到这一点。
$TimeSpan.Multiply(3)
那么分裂呢?我们如何将给定的时间间隔分成四分之一?我们可以使用 Divide
方法来查找时间跨度的四分之一值。
$TimeSpan.Divide(4)
IP地址
IP 地址管理和验证都是一件苦差事。 IPAddress
加速器提供验证 IPv4 和 IPv6 地址的功能。
[IPAddress]"10.0.0.1"
正如您所看到的,这是一个有效的 IP 地址,但如果我们不确定一个值是否是正确的地址怎么办?传递格式错误或超出范围的地址将导致错误通知不正确的值。
[IPAddress]"258.0.0.1"
PS凭证
保护凭据对于与 Web 服务、远程系统或第三方应用程序交互至关重要。 PSCredential
类将密码加密到对象中。将此对象传递到函数和 cmdlet 中可以使身份验证变得容易。
在下面的示例中,我们将创建一个用于存储安全值的 PSCredential
对象。请注意,密码值需要安全字符串。
[PSCredential]::New("username", ("password" | ConvertTo-SecureString -AsPlainText -Force))
虽然我们看到这里输出的用户名值,但我们看不到密码值。我们如何检索它?
$Credential = [PSCredential]::New("username", ("password" | ConvertTo-SecureString -AsPlainText -Force))
$Credential | Format-List
检索此对象的密码的最简单方法是使用 GetNetworkCredential
方法。接下来我们将返回 password
属性。
$credential.GetNetworkCredential().Password
结论
PowerShell 数据类型加速器使 PowerShell 中的复杂操作变得简单。加速器有很多,但通过这些技巧,您应该能够使用 Powershell 获取多种类型并发现新用途。使用加速器通常有独特的方法。了解这些差异将极大地提高您的生产力!
猜你还喜欢
- 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