Windows Powershell 命令返回数组

当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本。
但是,事实上Powershell会把文本按每一行作为元素存为数组。如果一个命令的返回值不止一个结果时,Powershell也会自动把结果存储为数组。

PS C:Powershell> $IPcfg=ipconfig
PS C:Powershell> $IPcfg

Windows IP Configuration
Ethernet adapter Local Area Connection:

  Connection-specific DNS Suffix . : ***
  Link-local IPv6 Address . . . . . : ***
  IPv4 Address. . . . . . . . . . . : 192.168.140.128
  Subnet Mask . . . . . . . . . . . : 255.255.252.0
  Default Gateway . . . . . . . . . : 192.168.140.1

Tunnel adapter isatap.mossfly.com:

  Connection-specific DNS Suffix . : ***
  Link-local IPv6 Address . . . . . : ***
  Default Gateway . . . . . . . . . :***

Tunnel adapter Teredo Tunneling Pseudo-Interface:

  Media State . . . . . . . . . . . : Media disconnected
  Connection-specific DNS Suffix . :
PS C:Powershell> $IPcfg.Count
22

使用数组存储结果
判断一个变量是否为数组

PS C:Powershell> $ip=ipconfig
PS C:Powershell> $ip -is [array]
True
PS C:Powershell> "abac" -is [array]
False
PS C:Powershell> $str="字符串"
PS C:Powershell> $str.ToCharArray() -is [array]
True

查看数组的元素个数用$array.Count属性。访问第x个元素,使用$array[x-1],因为数组是以0开始索引的。

使用管道对数组进一步处理

PS C:Powershell> ipconfig | Select-String "IP"

Windows IP Configuration
  Link-local IPv6 Address . . . . . : ***
  IPv4 Address. . . . . . . . . . . : ***
  Link-local IPv6 Address . . . . . : ***

使用真实的对象操作

为什么不愿把IPconfig返回的结果称为对象,因为它不是真正Cmdlet命令,真正的Powershell命令返回的数组元素可不止一个字符串,它是一个内容丰富的对象。

PS C:Powershell> ls

  Directory: C:Powershell

Mode        LastWriteTime   Length Name
----        -------------   ------ ----
d----    2011/11/23   17:25      ABC
d----    2011/11/29   18:21      myscript
-a---    2011/11/24   18:30   67580 a.html
-a---    2011/11/24   20:04   26384 a.txt
-a---    2011/11/24   20:26   12060 alias
-a---    2011/11/24   20:27   12060 alias.ps1
-a---    2011/11/23   17:25     0 b.txt
-a---    2011/11/23   17:25     0 c.txt
-a---    2011/11/23   17:25     0 d.txt
-a---    2011/11/25   11:20    556 employee.xml
-a---    2011/11/29   19:23   21466 function.ps1
-a---    2011/11/28   11:12    186 LogoTestConfig.xml
-a---    2011/11/24   17:37    7420 name.html
-a---    2011/11/28   15:30     63 ping.bat
-a---    2011/11/24   17:44   735892 Powershell_Cmdlets.html
-a---    2011/11/30   16:04    2556 psdrive.html
-a---     2011/12/2   18:47    140 test.ps1
-a---    2011/11/23   17:37    242 test.txt
-a---    2011/11/28   16:42    170 test.vbs
PS C:Powershell> $result=ls
PS C:Powershell> $result.Count
20

数组的每一个元素存放的是一个System.IO.DirectoryInfo对象。
当我们输出这些对象时,Powershell会自动帮我们把它转换成友好的文本格式。

PS C:Powershell> $result[0].gettype().fullname
System.IO.DirectoryInfo
PS C:Powershell> $result[0]
  Directory: C:Powershell
Mode        LastWriteTime   Length Name
----        -------------   ------ ----
d----    2011/11/23   17:25      ABC对于任何一个对象都可以使用Format-List * 查看它所有的属性和方法。

PS C:Powershell> $result[0] | fl *

PSPath      : Microsoft.PowerShell.CoreFileSystem::C:PowershellABC
PSParentPath   : Microsoft.PowerShell.CoreFileSystem::C:Powershell
PSChildName    : ABC
PSDrive      : C
PSProvider    : Microsoft.PowerShell.CoreFileSystem
PSIsContainer   : True
BaseName     : ABC
Mode       : d----
Name       : ABC
Parent      : Powershell
Exists      : True
Root       : C:
FullName     : C:PowershellABC
Extension     :
CreationTime   : 2011/11/23 17:25:53
CreationTimeUtc  : 2011/11/23 9:25:53
LastAccessTime  : 2011/11/23 17:25:53
LastAccessTimeUtc : 2011/11/23 9:25:53
LastWriteTime   : 2011/11/23 17:25:53
LastWriteTimeUtc : 2011/11/23 9:25:53
Attributes    : Directory
(0)

相关推荐

  • Windows Powershell 复制数组

    数组属于引用类型,使用默认的的赋值运算符在两个变量之间赋值只是复制了一个引用,两个变量共享同一份数据.这样的模式有一个弊病如果其中一个改变也会株连到另外一个.所以复制数组最好使用Clone()方法,除非有特殊需求. PS C:Powershell> $chs=@("A","B","C") PS C:Powershell> $chsBak=$chs PS C:Powershell> $chsBak[1]="H"

  • Windows Powershell 创建数组

    在Powershell中创建数组可以使用逗号. PS C:Powershell> $nums=2,0,1,2 PS C:Powershell> $nums 2 0 1 2 对于连续的数字数组可以使用一个更快捷的方法 PS C:Powershell> $nums=1..5 PS C:Powershell> $nums 1 2 3 4 5 数组的多态 象变量一样如果数组中元素的类型为弱类型,默认可以存储不同类型的值. PS C:Powershell> $array=1,"

  • Windows Powershell强类型数组

    Powershell数组一般具有多态性,如果你不指定元素的具体类型,解释器会自动选择合适的类型存储每个元素.如果要统一限制所有元素的类型,可是使用类型名和一对方括号作为数组变量的类型.这样每当赋值时,会自动类型检查.如果目标数据类型不能转换成功,就会抛出一个异常. PS C:Powershell> [int[]] $nums=@() PS C:Powershell> $nums+=2012 PS C:Powershell> $nums+=12.3 PS C:Powershell>

  • Windows Powershell使用哈希表

    哈希表存放的是对,在哈希表中不再仅仅限制使用数字寻址,可以使用任意类型的数据类型寻址. 创建哈希表 之前使用@()创建数组,现在使用@{}创建哈希表,使用哈希表的键访问对应的值. PS C:Powershell> $stu=@{ Name = "小明";Age="12";sex="男" } PS C:Powershell> $stu Name Value ---- ----- Name 小明 Age 12 sex 男 PS C:Pow

  • Windows Powershell 访问数组

    数组的元素可以使用索引寻址,第一个元素的索引为0,第i个元素的索引为i-1,最后一个元素的索引为Count-1,但是Powershell为了使用方便,直接可以将 -1 作为最后的一个元素的索引. PS C:Powershell> $books="元素1","元素2","元素3" PS C:Powershell> $books[0] 元素1 PS C:Powershell> $books[1] 元素2 PS C:Powershel

  • Windows Powershell使用管道

    管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示. 传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sort-Object -Descending Name | Select-Object Name,Length,LastWriteTime | ConvertTo-Html | Out-File ls.html PS> Get-Content .ls.html Name Length LastWriteT

  • Windows Powershell 命令返回数组

    当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本. 但是,事实上Powershell会把文本按每一行作为元素存为数组.如果一个命令的返回值不止一个结果时,Powershell也会自动把结果存储为数组. PS C:Powershell> $IPcfg=ipconfig PS C:Powershell> $IPcfg Windows IP Configuration Ethernet adapter Local Area Connection: Connection-spe

  • Windows Powershell 命令集 cmdlets

    cmdlets是Powershell的内部命令,cmdlet的类型名为System.Management.Automation.CmdletInfo,包含下列属性和方法: Name MemberType Definition Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string To

  • Windows PowerShell是啥?看完本文你就懂它了

    引子 一直很羡慕Linux的命令提示符(当然他们叫Shell).正则表达式,管道,各种神奇的命令,组合起来就能高效完成很多复杂的任务.效率实在是高.流了n年的哈喇子以后,终于有幸用上了Win7,邂逅了cmd的升级版:Windows PowerShell.从此暗爽无比,原来Windows下也有这样的利器呀~ 看看下面的Windows脚本,不到15行有效代码.在Win7下只要右击脚本文件,选择Run with PowerShell,就会自动找到最占内存的10个进程,然后将它们占用的内存画成一个三维饼

  • Windows Powershell 自动化变量

    Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

  • Powershell小技巧之使用WS-Man来调用PowerShell命令

    虽然PowerShell远程管理被构建在 WS-Management的之上,但它是协议中的协议.如果尝试使用 PSRP (PowerShell远程处理协议)直接进行交互,本质上需要在客户端机器上运行一个PowerShell副本.另一种方法是使用一个鲜为人知的远程命令行工具,称为WinRS.WinRS是一个简单的工具,允许远程CMD.EXE,它也是构建在WS-Management之上的.所不同的是WinRS重用了 WS-Transfer中的Create和Delete,并引入了一些新的自定义的SOA

  • Windows Powershell 别名

    简短描述 在Windows PowerShell中, 别名就是cmdlets或其他命令的替代名称. 详细描述 别名就是cmdlet或者命令(例如: 函数, 脚本, 文件, 可执行文件. )的替代名称或者说是个昵称. 在使用命令的地方, 你都可以使用别名. cmdlet 的名称由一个动词和一个名词组成,其功能对用户来讲一目了然.但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊.能不能把命令缩短一点呢?于是"别名"就应运而生了.Powershell内部也实现了很多

  • Windows Powershell扩展类型系统

    Powershell一个最吸引人的功能是它能够将任何对象转换成文本,我们已经使用过将对象属性以不同的版式转换成文本,并且输出.更令人惊奇的是Powershell会把最重要最能代表这个对象本质的信息输出.一个对象有很多属性,为什么它单单就输出那几个属性呢? 如果使用: 复制代码 代码如下: Dir | Format-Table * -wrap PSP PSP PSC PSD PSP PSI Bas Mod Nam Par Exi Roo Ful Ext Cre Cre Las La La La A

  • windows批处理命令教程

    批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们.使用批 处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务.当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到 的用批处理文件来给系统打补丁.批量植入后门程序等.下面就开始我们批处理学习之旅吧. 一.简单批处理内部命令简介 1.echo

随机推荐