PowerShell基础教程(17)——对象的选择、排序和变量存储

可以使用 Select-Object cmdlet 来创建新的、自定义的 Windows PowerShell 对象,后者包含的属性是从用于创建他们的对象中选择的。键入以下命令可创建新对象,该对象仅包含 Win32_LogicalDisk WMI 类的 Name 和FreeSpace 属性:

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace

Name                                    FreeSpace

----                                    ---------

C:                                      50664845312

在发出该命令后,您将无法查看数据的类型,但如果在执行 Select-Object 命令后通过管道将结果传递给 Get-Member,则可发现,对象的新类型 PSCustomObject 已存在:

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace| Get-Member

TypeName:System.Management.Automation.PSCustomObject

Name        MemberType   Definition

----        ----------   ----------

Equals      Method       System.Boolean Equals(Object obj)

GetHashCode Method       System.Int32 GetHashCode()

GetType     Method       System.Type GetType()

ToString    Method       System.String ToString()

FreeSpace   NoteProperty  FreeSpace=...

Name        NoteProperty System.String Name=C:

Select-Object 有很多用途。其中之一就是复制可随后进行修改的数据。现在,我们可以解决上一节中遇到的问题了。我们可以更新最新创建的对象中的 FreeSpace 的值,而且输出将包括描述性标签:

Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0; $_}

Name                                                                  FreeSpace

----                                                                  ---------

C:48317.7265625

对对象进行排序

通过使用 Sort-Object cmdlet 可以组织显示的数据,从而可更轻易地对这些数据进行扫描。Sort-Object 可获取排序所依据的一个或多个属性的名称,并返回按这些属性值排序的数据。

以 Win32_SystemDriver 实例列表的问题为例。若要按 State 排序,然后按 Name 排序,则可通过键入以下命令来实现:

Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap

尽管这会生成很长的数据显示,但还是可看出具有相同状态的项组合在一起:

Name           State   Started DisplayName

----           -----   ------- -----------

ACPI           Running    True Microsoft ACPI Driver

AFD            Running    True AFD

AmdK7          Running    True AMD K7 Processor Driver

AsyncMac       Running    True RAS Asynchronous Media Driver

...

Abiosdsk       Stopped   False Abiosdsk

ACPIEC         Stopped   False ACPIEC

aec            Stopped   False Microsoft Kernel Acoustic Echo Canceller

...

还可通过指定 Descending 参数以倒序顺序排序对象。这将颠倒排序的顺序,因此将按倒序的字母顺序排序名称,按降序的顺序排序数字。

PS> Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name -Descending | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap

Name           State   Started DisplayName

----           -----   ------- -----------

WS2IFSL        Stopped   False Windows Socket 2.0 Non-IFS Service Provider Support Environment

wceusbsh       Stopped   False Windows CE USB Serial Host Driver...

...

wdmaud         Running    True Microsoft WINMM WDM Audio Compatibility Driver

Wanarp         Running    True Remote Access IP ARP Driver

...

使用变量存储对象

Windows PowerShell 可以使用对象。利用 Windows PowerShell,您可创建变量(本质上命名为对象)以保留输出以备后用。如果您已习惯于在其他外壳程序中处理变量,请谨记,Windows PowerShell 变量是对象,而非文本。

变量始终可通过首字符 $ 指定,并且在变量名称中可以包含所有的字母数字字符或下划线。

创建变量

通过键入有效的变量名称可以创建变量:

PS> $loc

PS>

由于 $loc 没有值,因此将不会返回任何结果。您可以创建变量,并可同时向其赋值。Windows PowerShell 只能创建目前尚不存在的变量,否则,它会将指定的值赋予已存在的变量。若要在变量 $loc 中存储当前位置,请键入:

$loc = Get-Location

由于输出已发送到 $loc,因此在键入此命令后将不会显示任何输出。在 Windows PowerShell 中,显示的输出实际上是附加功能,因为未定向的数据始终会发送到屏幕上。键入 $loc 将显示当前位置:

PS> $loc

Path

----

C:/temp

您可以使用 Get-Member 来显示有关变量内容的信息。通过管道将 $loc 传递给 Get-Member 表示,$loc 为 PathInfo对象,这类似于 Get-Location 的输出:

PS> $loc | Get-Member -MemberType Property

TypeName:System.Management.Automation.PathInfo

Name         MemberType Definition

----         ---------- ----------

Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}

Path         Property   System.String Path {get;}

Provider     Property   System.Management.Automation.ProviderInfo Provider {...

ProviderPath Property   System.String ProviderPath {get;}

对变量进行操作

Windows PowerShell 提供了几条用于对变量进行操作的命令。通过键入以下命令可以查看极具可读性的完整列表:

Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap

除了当前 Windows PowerShell 会话中创建的变量之外,还存在几个系统定义的变量。您可以使用 Remove-Variablecmdlet 来清除所有不受 Windows PowerShell 控制的变量。键入以下命令可清除所有变量:

Remove-Variable -Name * -Force -ErrorAction SilentlyContinue

这将生成确认提示,如下所示:

确认

是否确实要执行此操作?

对目标“Name: Error”执行操作“Remove Variable”。[Y] 是  [A] 全是  [N] 否  [L] 全否  [S] 挂起  [?] 帮助(默认值为“Y”):A

随后,如果运行 Get-Variable cmdlet,则可查看剩余的 Windows PowerShell 变量。由于还存在 Windows PowerShell 变量驱动器,因此也可通过键入以下命令来显示所有的 Windows PowerShell 变量:

Get-ChildItem variable:

使用 Cmd.exe 变量

尽管 Windows PowerShell 不是 Cmd.exe,但它也运行于命令外壳程序环境中,并且可以在 Windows 的任意环境中使用相同的可用变量。这些变量是通过名为 env: 的驱动器公开的。键入以下命令可查看这些变量:

Get-ChildItem env:

尽管未设计标准变量 cmdlet 来处理 env: 变量,但仍可通过指定 使用这些变量。例如,若要查看操作系统根目录,则可键入以下命令,使用 Windows PowerShell 中的命令外壳程序 %SystemRoot% 变量:

PS> $env:SystemRoot

C:/WINDOWS

也可创建和修改 Windows PowerShell 中的环境变量。从 Windows PowerShell 访问的环境变量符合 Windows 之外的环境变量标准规则。

说明:此文引用csdn博客erway的PowerShell基础教程(17)——对象的选择、排序和变量存储    一文   

最新文章

  1. (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
  2. SqlServer 18456 错误解决方案
  3. PySpark调用自定义jar包
  4. Ubuntu13.04配置完全指南(转)
  5. 企业架构研究总结(44)——企业架构与建模之Archimate视图和视角
  6. Chapter 17_2 备忘录函数
  7. GCD之barrier
  8. 2735:八进制到十进制-poj
  9. 网页中输出HTML代码
  10. codeforces 1077F2. Pictures with Kittens (hard version)单调队列+dp
  11. jdk各版本特性
  12. pycharm导入本地py文件时,模块下方出现红色波浪线时如何解决
  13. 11. Container With Most Water (JAVA)
  14. 在外网访问家里面的电脑 和 DMZ
  15. QQ 的一些URI 协议命令
  16. LeetCode[Array]----3Sum
  17. 王者荣耀交流协会final冲刺第五次scrum会议
  18. mysql远程连接授权
  19. 剑指offer--34.数字在排序数组中出现的次数
  20. javascript动态添加表格以及获取数据

热门文章

  1. 一.RocketMQ消息中间件 windwos使用
  2. Codeforces Round #313 (Div. 1) Gerald's Hexagon
  3. Python学习1:使用Aptana构建Python开发环境
  4. 流畅的python第十九章元编程学习记录
  5. string c++ 转义序列
  6. 正则表达式匹配a标签或div标签
  7. java中异常介绍
  8. webDriver API——第12部分WebElement
  9. JSP语法学习笔记
  10. ES6 for...of循环