[PowerShell教程][09]PowerShell中的数组使用

使用PowerShell自动化Windows系统管理任务(下) 然而,值得注意的是,在使用PowerShell进行自动化时,应谨慎行事,确保脚本的准确性和安全性,以避免对系统造成不必要的损害。通过本文的介绍,我们了解了PowerShell在Windows系统管理中的广泛应用,包括用户管理、服务管理、文件系统操作、网络配置、安全性管理、注册表操作、系统监控与报告等多个方面。对于管理Active Directory环境的系统管理员来说,PowerShell提供了丰富的cmdlets来管理用户、组、计算机等对象。系统监控是确保系统稳定性和性能的关键。 阅读详情
 

在日常处理中,除了使用像“数值类型”和“字符串类型”外,还需要使用能够包含其他对象的“集合”类型(请注意,这里的集合对应英文是Collection,而非数学概念上的Set。)。大多数常见语言,都提供一些操作集合类型的语法。最基本的集合类型就是数组类型,它提供了一种下标基于0的数组对象。

首先通过几个简单的例子,来了解一下PowerShell中的数组是如何使用的。

PS C:/> 1,'a',2MB,0x100

1

a

2097152

256

上面的小例子输出了4个对象:数值“1”、字符串“a”(注意:虽然只有一个字符,但这里仍然是一个字符串)、数值“2MB”和十六进制数值“0x100”。也许您很想了解这个例子和数组究竟有什么联系,实际上这个例子清楚地解释了PowerShell中数组类型的语法。在PowerShell中,只要把不同的对象用逗号“,”连接起来,就可以构造出数组对象。本章节的重点在于像大家介绍数组类型的使用,因此将在后续的章节详细介绍逗号表达式“,”的使用。我们回到刚才的例子中,虽然这4个对象组成了PowerShell中的数组对象,但是如果没有把这个对象存储起来或者丢弃掉的话,PowerShell就会利用默认的格式器和输出器将它们输出到控制台上。最终我们就看到了上面四行输出结果。

现在我们知道了PowerShell中构造数组的最简单的方式,接下来让我们一起探索更多关于数组对象更多的特性:

PS C:/> $array1 = 1,2,3,4

PS C:/> $int = 1

PS C:/> $array1.count

4

PS C:/> "$array1"

1 2 3 4

PS C:/> $int.count

PS C:/> "$int"

1

细心的读者肯定已经发现,在第一个例子中,使用了逗号构造了一个包含四个整数的数组,并将其存储在变量$array1中。接下来将数值1存储在变量$int中。数组对象上有一个属性Count用来指出当前数组中的对象数量,我们可以看到$array1中包含了4个对象。但是在$int上确没有该属性(注意:如果引用的属性不存在,PowerShell返回$null对象,该对象不会对控制台产生任何影响,只是简单的使提示用户继续输入命令)。

PowerShell是基于对象的shell,现在让我们来看看数组究竟是什么对象:

PS C:/> $array1.GetType().FullName

System.Object[]

PowerShell中调用对象上的GetType()方法,可以得到该对象的类型对象(类型也是一个对象)。而该对象上的FullName属性就是该对象表示的类型的名称。这里有点绕口令了,总之如果你想知道一个对象的类型就调用GetType()方法,再访问FullName属性就可以了。

学会了创建数组以及知道了数组包含的对象数量,现在来学习一下如何访问数组中的元素。实际上PowerShell的数组其实通过.Net类库中的数组来实现的,也就是说PowerShell.Net类库原有的实现上,增加了一些PowerShell便捷的访问接口,而实际操作的对象还是.Net类库中的对象。使用数组时,需要大家记住数组的第一个元素的下标是“0”、数组的最后一个元素下标是数组长度减去1。例如:

PS C:/> $array = 1,2,3

PS C:/> $array.Length

3

PS C:/> $array[0]

1

PS C:/> $array[2]

3

PS C:/> $array[4]

PS C:/>

实际上,Count是属性Length的别名,这主要是为不同对象提供一致性接口的技术。这里需要特别注意的是,当数组访问越界时,PowerShell是不会给出任何错误信息的,只会得到一个$null对象。

如果我们已经有一个数组了,应该如何向这个数组中添加新的元素呢?在Perl中,你只需简单的使用你想使用的索引,然后存储上你想存储的数值就完成了任务。然而在PowerShell中,如果你使用类似的方法就会得到如下的结果:

PS C:/> $a = "My ThinkPad", "My PC"

PS C:/> $a[0]

My ThinkPad

PS C:/> $a[1]

My PC

PS C:/> $a[2] = "My Mac"

数组赋值失败,因为索引“2”超出范围。

所在位置 :1 字符: 4

+ $a[2 <<<< ] = "My Mac"

PowerShell的错误信息指出:索引越界。解决这个的办法其实很简单,只要使用下面的代码就可以巧妙解决:

PS C:/> $a = $a + "My Mac"

PS C:/> $a

My ThinkPad

My PC

My Mac

PS C:/> $a[2]

My Mac

PowerShell中,数组其实是一个大小固定的数据结构,如果需要向数组中添加更多的对象时,就必须使用加号“+”运算符。在执行“+”操作的过程中,PowerShell实际上进行了下述操作:

1)        首先创建一个新的数组,该数组的大小能够存下运算结果的所有对象;

2)        将第一个数组的成员拷贝到新数组中;

3)        将第二个数组的成员拷贝到新数组中。

通过观察这个操作过程,很容易发现:如果数组中包含元素很多,而且频繁的向数组添加对象,一定会使PowerShell执行脚本时更慢。因此,我们需要谨记:大多数时候,数组是PowerShell中的便捷的工具,但是应该避免频繁地对其进行添加操作。在.Net类库中提供了其他的数据结构来满足需要经常向数组中添加对象的需求。

三阶段攻击链解析:从伪造Cloudflare验证到PowerShell混淆执行 网络安全领域中的社会工程学攻击常利用用户对可信品牌的信任实施渗透。其核心原理是通过心理操纵诱导用户执行特定操作,从而绕过传统防御机制。在技术实现层面,攻击者常采用多阶段载荷投递策略,将恶意代码隐藏在看似无害的载体中。PowerShell作为Windows系统内置的强大脚本工具,因其支持无文件攻击和高度灵活的混淆技术,成为攻击者执行最终载荷的首选。通过字符串拆分、编码转换、别名缩写以及-EncodedCommand参数等混淆手法,恶意脚本能够规避静态检测。这种攻击模式在钓鱼邮件、供应链攻击等场景中尤为常见,对 阅读详情

相关推荐

Windows命令执行字符绕过:CMD与PowerShell解析差异与防御实践

命令执行是系统管理与安全渗透中的基础操作,涉及将用户输入解析为可执行指令的过程。其核心原理在于命令解释器对特殊字符(如分隔符、转义符)的识别与处理机制,这直接影响了系统安全性与脚本健壮性。从技术价值看,深入理解解析规则有助于构建更安全的应用程序,特别是在需要拼接用户输入的场景中,能有效防范命令注入漏洞。在应用场景上,无论是编写自动化部署脚本,还是进行安全审计与渗透测试,掌握字符绕过的底层逻辑都至关重要。本文聚焦于Windows环境下CMD与PowerShell两大解释器的解析差异,详细剖析了转义字符、变量扩

weixin_34056162的博客 474

shell数组的基本操作

shell脚本的函数数组传参

weixin_48271370的博客 1477

AI数字人短视频数字人口播数字人分身建模流程全解析

在人工智能与计算机图形学蓬勃发展的当下,数字人建模作为打造虚拟数字人的核心环节,其流程复杂且精妙,融合了多种前沿技术与创意构思,为栩栩如生的数字人形象奠定基石。​。

2403_87518095的博客 1418

PowerShell数组

Powershell支持数组这种数据结构,但这种数组并不要求数据类型的一致性,更类似于其他语言中的列表。其创建过程非常简单,直接通过逗号分割元素即可,也可以通过【@()】将数组元素括起来。

微小冷的学习笔记 1088

[SharePoint]PowerApp中使用lookup column

有三个custom list: Province:column有Title Title Zhe Jiang Shan Xi City:column有City和Province City | Province Hang Zhou | Zhe Jiang Xi An | Shan Xi Wen Zhou | ...

WendyXu8230的博客 1378

shell(五)数组

Bash Shell 只支持一维数组,不支持多维数组 Shell 数组的定义 在 Shell 中,用括号( )来表示数组数组元素之间用空格来分隔。由此,定义数组的一般形式为: array_name=(ele1 ele2 ele3 ... elen) 注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素 Shell 是弱类型的,它并不要求所有数组元素的类型必须相同,例如: a...

feicongcong的博客 359

PowerShell:强制转换数组与严格类型数组

一、强制转换数组 使用普通方法创建一维数组: $Varname=Element1,Element2,Element3,… 使用数组强制转换结构创建数组: $Varname=@(Element1,Element2,Element3...) 强制转换数组语法的优势就是如果使用分号代替逗号分隔值,PowerShell将每个值看作命令文本,PowerShell会执行它并且存储结果。 ...

a2218641的博客 307

PowerShell入门教程PowerShell管道介绍

PowerShell入门教程PowerShell管道介绍 作者:Luke Zhang 字体:[增加 减小] 类型:转载 时间:2014-10-14 我要评论 这篇文章主要介绍了PowerShell入门教程PowerShell管道介绍,本文讲解了管道的作用,并列出了几个使用实例,需要的朋友可以参考下 管道对于Shell来说是个化腐朽为神奇的东西,它极大地提高

潘晓宇(panxiaoyu)的专栏 467

powershell学习

PowerShell 调试器 在开始运行处,输入powershell ISE回车即可 PowerShell 与操作系统版本 powershell在windows server 2008上自带,但最好在版本号为6.0.7600上使用,6.0.6001版本的server 2008自带的powershell缺少很多常用的功能 PowerShell 比较运算符 -eq 等于 ...

dengzhao4204的博客 237

c++ 调用 powershell_二十,Powershell基础入门及常见用法(二)

.Powershell操作符常见的比较运算符包括:-eq 等于-ne 不等于-gt 大于-lt 小于-le 小于等于-contains 包含-notcontains 不包含67 -eq 5050 -eq 501gb -gt 1tb(1,2,3) -contains 1(1,2,3) -contains 2(1,2,3) -contains 4求反运算符:-not$a=89 -gt 50$a-no...

weixin_30340301的博客 1500

Powershell 求一组数据中的第二大数字

内容:【推荐客户端:Live Writer】{回车产生<p>, Shift+Enter产生<br/>, Tab键产生缩进; } (不允许发布任何与政治相关的内容) 请输入内容 $intA.length Get-date [int]$big=0 [int]$small=-1 [int]$temp=0 ...

weixin_34026484的博客 187

Powershell 收集

• Windows PowerShell 是专为系统管理员设计的新 Windows 命令行外壳程序 该外壳程序包括交互式提示和脚本环境 –该外壳程序包括交互式提示和脚本环境 –两者既可以独立使用也可以组合使用 • 在 .NET 公共语言运行时 (CLR) 和 .NET 在 公共语言 行时 () 和Framework 的基础上构建 PowerShell PowerShell 简介 ...

weixin_30555753的博客 109

PowerShell替换字符串

在有的时候,可能需要对多个文件中的某个字符串进行替换,我们可以通过PowerShell对文件遍历并替换其字符串。 例:在E:\test目录下存在有多个子目录,我们需要将该目录下xml格式文件中的字符串“nihao”替换为“Hello”,分为以下两个步骤: 1、遍历该目录下的所有*.xml文件 2、对查找出的*.xml文件中的字符串进行替换 使用Get-ChildItem命令可以对文件或...

weixin_33832340的博客 687

PowerShell 自动更新Ungoogled-Chromium

Windows PowerShell脚本实现Ungoogled-Chromium自动检查更新

ATH\r 的博客 806

PowerShell 第25章学习笔记:额外的提示、技巧与技术,Profile 自定义、进阶运算符与脚本块实战

PowerShell 实战技巧摘要 本文总结了 PowerShell 高级使用技巧,包括:1) Profile 脚本配置方法及加载顺序,用于环境初始化;2) 提示符自定义和颜色调整;3) 进阶运算符如类型转换、字符串处理等;4) 字符串和日期对象常用方法;5) WMI 日期时间转换;6) 参数默认值设置技巧;7) 脚本块使用;8) 实战清单和常见错误规避。重点介绍了如何通过 Profile 实现环境定制化,提升日常使用效率,同时提供了各种实用场景的代码示例和注意事项。

分享 Windows 系统部署、镜像封装、终端管理、故障排查、Sysinternals 工具、PowerShell 自动化及 AI 工具应用。通过真实案例记录 IT 运维实践,探索更高效的系统管理方法。 1万+

powershell的一个小游戏,看看能写几种方式出来

今天在powershell.org看见了这个月的小测试,要求很简单,给出一个csv文件,里面有一列叫做machinename,都是计算机的名字,所有的计算机都可以远程执行powershell 2.0以上的版本,读取这个文本,然后输出一个新的csv文件,包括两列,machinename和osversionhttp://powershell.org/wp/2015/09/05/september-20...

weixin_34110749的博客 575

随笔分类 - PowerShell

随笔分类 - PowerShell PowerShell发送邮件(587) 摘要: #定义邮件服务器 $smtpServer = "mail.xx.com" $smtpUser = "sender" $smtpPassword = "password" $mail = New-Object System.Net.Mail.MailMessage #定义发件人邮箱地址、收件人邮箱

flyingleo1981的专栏 6068

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 259

基于单片机的超声波测距仪的设计.doc

目 录 1.引言 1 1.1 设计的应用前景 1 1.2 单片机应用系统概述 1 1.3 超声波测距系统概述 2 1.4 本设计任务主要要求 3 2.超声波测距原理 3 2.1 超声波的基本理论 3 2.2 超声波测距系统原理 4 3.系统主要硬件电路设计 5 3.1 超声波测距系统电路总体设计方案 5 3.2 超声波发射和接收电路的设计 6 3.3 单片机主机系统电路 8 4.系统软件设计 12 4.1 系统程序的结构 12 4.2 系统主程序 13 4.3 40KHz超声波发送子程序 14 4.4 DS18B20温度采集程序 15 4.5 距离计算子程序 15 4.6 数据转换子程序 15 4.7 LCD显示子程序 16 4.8 基于Proteus的软件仿真 17 5.后续研究工作 18 5.1 超声波发射波形的改进 18 5.2 样机的制作 18 5.3 进一步研究系统的抗干扰性能 18 致谢 19 参考文献 19 附录 21 基于单片机的超声波测距仪的设计 摘要 利用超声波测距原理,出于低成本、高精度的目的,提出了一种基于AT89S52的超声波倒 车雷达系统的设计方案。硬件部分采用AT89S52单片机作为控制器,主要有超声波发射电 路、超声波接收电路、温度检测电路、LCD显示电路和报警电路。在分析超声波测距原理 的基础上,给出了实现超声波倒车雷达系统的硬件设计电路图和软件设计流程图。该系 统测量精度为1cm,测量范围为0.50-4.00m,完全能够满足汽车倒车系统的设计要求。 关键字 单片机 超声波 温度补偿 测距 LCD显示 角度补偿 1.引言 1.1 设计的应用前景 目前国内一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高 ,并且显示距离也比较困难,操作使用也不是很方便。而本设计研究的测距仪成本低廉 ,性能优良,市场前景极为广阔。在整个倒车过程中自动测量车尾到最近障碍物的距离 ,并用数字显示出来,在倒车到极限距离时会发出警告声,提醒驾驶员注意刹车。本设 计可望成为驾驶员特别是货车以及公共汽车驾驶员的好帮手,可有效的减少和避免那些 视野不良的大型汽车,如集装箱车、载货车、公共汽车等倒车交通事故。 1.2 单片机应用系统概述 单片机的出现及发展使计算机技术从通用型数值计算领域进入到智能化的控制领域 。从此,计算机技术在两个重要领域——通用计算机领域和嵌入式计算机领域都得到了极 其重要的发展,并正在深深地改变着我们的社会。 单片机应用系统的设计包括单片机基本扩展、外围电路设计和程序设计、单片机应 用系统开发环境、系统可靠性设计、电磁兼容性设计等内容。通常开发一个单片机系统 的步骤如下: 图 1 技术路线 1.3 超声波测距系统概述 随着社会的发展,人们对距离或长度测量的要求越来越高。目前测量距离可以采用 波在介质中的传播速度和时间关系进行测量。常用的技术主要有激光测距、微波雷达测 距和超声波测距三种。激光和雷达测距仪造价偏高,不利于广泛的普及应用,在某些应 用领域有其局限性。超声波测距由于其能进行非接触测量和相对较高的精度,越来越被 人们所重视。展望未来,超声波测距仪作为一种新型的非常有用的工具在各方面都将有 很大的发展空间,它将朝着更高定位、更高精度的方向发展,以满足日益发展的社会需 求。 由于超声波具有指向性好、能量损耗低、传播距离较远、不易受外界环境影响和对 被测目标无损害等特点,利用超声波测量距离就可以解决传统测量方法中遇到的问题。 利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度 方面能达到工业实用的要求,因此超声波测量距离技术在工业控制、勘探测量、机器人 定位和安全防范等领域得到了广泛的应用。 超声波测距电路可以由传统的模拟或者数字电路构建,但是基于这些传统电路构建 的系统往往可靠性差,调试困难,可扩展性差,所以基于单片机的超声波测距系统被广 泛的应用。通过简单的外围电路发生和接收超声波,单片机通过采样获取到超声波的传 播时间,用软件来计算出距离,并且可以采集环境温度进行测距补偿,其测量电路小巧 ,精度高,反映速度快,可靠性好。 超声波测距适用于高精度的中长距离测量,超声波在标准空气中的传播速度为331. 45m/s,由单片机计时,单片机使用12.0MHz晶振,所以此系统的测量精度在理论上可以 达到毫米级。本文设计的倒车雷达系统就是利用超声波的上述特性做到对倒车距离实时 和高精度的检测,同时,此系统成本低、设计简单、精度和稳定性好,有望得到广泛的 应用,从而减少交通事故的发生。 1.4 本设计任务主要要求 (1)设计一个以单片机为核心的超声波测距仪,可以应用于汽车倒车、工业现场的 位置监控; (2)测量范围在0.50~4.00m,测量精度1cm; (3)测量时与被测

上一篇: PowerShell中进行图像格式转换
下一篇: [PowerShell教程][10]PowerShell中的HashTable的使用
PowerShell
博客等级 码龄19年 103粉丝 110原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值