`

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

阅读更多

PowerShell基础教程(17)——对象的选择、排序和变量存储       <o:p></o:p>

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

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace<o:p></o:p>

<o:p> </o:p>

Name                                    FreeSpace<o:p></o:p>

----                                    ---------<o:p></o:p>

C:                                      50664845312<o:p></o:p>

<o:p> </o:p>

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

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace| Get-Member<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

TypeName:System.Management.Automation.PSCustomObject<o:p></o:p>

<o:p> </o:p>

Name        MemberType   Definition<o:p></o:p>

----        ----------   ----------<o:p></o:p>

Equals      Method       System.Boolean Equals(Object obj)<o:p></o:p>

GetHashCode Method       System.Int32 GetHashCode()<o:p></o:p>

GetType     Method       System.Type GetType()<o:p></o:p>

ToString    Method       System.String ToString()<o:p></o:p>

FreeSpace   NoteProperty  FreeSpace=...<o:p></o:p>

Name        NoteProperty System.String Name=C:<o:p></o:p>

<o:p> </o:p>

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

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

Name                                                                  FreeSpace<o:p></o:p>

----                                                                  ---------<o:p></o:p>

C:48317.7265625<o:p></o:p>

<o:p> </o:p>

对对象进行排序             <o:p></o:p>

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

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

Get-WmiObject -Class Win32_SystemDriver | Sort-Object -<st1:place w:st="on"><st1:placename w:st="on">Property</st1:placename> <st1:placetype w:st="on">State</st1:placetype></st1:place>,Name | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap<o:p></o:p>

<o:p> </o:p>

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

Name           State   Started DisplayName<o:p></o:p>

----           -----   ------- -----------<o:p></o:p>

ACPI           Running    True Microsoft ACPI Driver<o:p></o:p>

AFD            Running    True AFD<o:p></o:p>

AmdK7          Running    True AMD K7 Processor Driver<o:p></o:p>

AsyncMac       Running    True RAS Asynchronous Media Driver<o:p></o:p>

...<o:p></o:p>

Abiosdsk       Stopped   False Abiosdsk<o:p></o:p>

ACPIEC         Stopped   False ACPIEC<o:p></o:p>

aec            Stopped   False Microsoft Kernel Acoustic Echo Canceller<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

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

PS> Get-WmiObject -Class Win32_SystemDriver | Sort-Object -<st1:place w:st="on"><st1:placename w:st="on">Property</st1:placename> <st1:placetype w:st="on">State</st1:placetype></st1:place>,Name -Descending | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap<o:p></o:p>

<o:p> </o:p>

Name           State   Started DisplayName<o:p></o:p>

----           -----   ------- -----------<o:p></o:p>

WS2IFSL        Stopped   False Windows Socket 2.0 Non-IFS Service Provider Support Environment<o:p></o:p>

<o:p> </o:p>

wceusbsh       Stopped   False Windows CE USB Serial Host Driver...<o:p></o:p>

...<o:p></o:p>

wdmaud         Running    True Microsoft WINMM WDM Audio Compatibility Driver<o:p></o:p>

Wanarp         Running    True Remote Access IP ARP Driver<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

使用变量存储对象             <o:p></o:p>

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

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

创建变量<o:p></o:p>

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

PS> $loc<o:p></o:p>

PS><o:p></o:p>

<o:p> </o:p>

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

$loc = Get-Location<o:p></o:p>

<o:p> </o:p>

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

PS> $loc<o:p></o:p>

<o:p> </o:p>

Path<o:p></o:p>

----<o:p></o:p>

C:\temp<o:p></o:p>

<o:p> </o:p>

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

PS> $loc | Get-Member -MemberType Property<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

TypeName:System.Management.Automation.PathInfo<o:p></o:p>

<o:p> </o:p>

Name         MemberType Definition<o:p></o:p>

----         ---------- ----------<o:p></o:p>

Drive        <st1:street w:st="on"><st1:address w:st="on">Property   System.Management.Automation.PSDriveInfo Drive</st1:address></st1:street> {get;}<o:p></o:p>

Path         Property   System.String Path {get;}<o:p></o:p>

Provider     Property   System.Management.Automation.ProviderInfo Provider {...<o:p></o:p>

ProviderPath Property   System.String ProviderPath {get;}<o:p></o:p>

<o:p> </o:p>

对变量进行操作<o:p></o:p>

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

Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap<o:p></o:p>

<o:p> </o:p>

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

Remove-Variable -Name * -Force -ErrorAction SilentlyContinue<o:p></o:p>

<o:p> </o:p>

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

确认<o:p></o:p>

是否确实要执行此操作?<o:p></o:p>

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

<o:p> </o:p>

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

Get-ChildItem variable:<o:p></o:p>

<o:p> </o:p>

使用 Cmd.exe 变量<o:p></o:p>

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

Get-ChildItem env:<o:p></o:p>

<o:p> </o:p>

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

PS> $env:SystemRoot<o:p></o:p>

C:\WINDOWS<o:p></o:p>

<o:p> </o:p>

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

 
分享到:
评论

相关推荐

    PowerShell基础教程.doc

    通过学习PowerShell基础教程,用户能够掌握如何利用其强大的对象模型和Cmdlet来自动化日常管理任务,提高工作效率。无论你是系统管理员还是开发者,PowerShell都是提升Windows环境管理能力不可或缺的工具。

    PowerShell教程

    3. **PowerShell工作区**: 工作区包含了变量、别名、函数等,它们在会话中保持,使得用户可以轻松地存储和重用数据。 4. **提供者**: PowerShell支持多种提供者,如文件系统提供者(允许对文件和目录进行操作)和...

    PowerShell 基础教程

    【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...

    PowerShell基础教程

    【PowerShell基础教程】 PowerShell是一种专为管理和自动化Windows操作系统设计的强大脚本语言,自Windows XP/Server 2003起,它逐渐成为Vista、Server 2008及后续版本的标准组件。PowerShell旨在提升系统管理员的...

    经典PowerShell入门教程.docx

    传统外壳程序如Cmd.exe、SH、KSH、CSH和BASH通常以文本格式处理命令输出,而PowerShell则处理基于.NET平台的对象,这使得数据处理更为灵活和强大。 PowerShell的核心概念之一是Cmdlet(发音为“command-let”),...

    Windows PowerShell教程合集

    精心挑选和整理的关于Windows PowerShell的教程 |powershell 技术文档 --|Powershell_技术教程.doc --|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南...

    powershell教程

    PowerShell的基础在于其对象模型,它将命令的输出表示为具有属性和方法的对象,而非单纯的文本流。这种设计使得数据处理更加方便。基础概念包括命令行会话(PowerShell Console或ISE)、命令(Cmdlets)、提供程序...

    Powershell 实例教程

    PowerShell 基于.NET框架,因此它能够充分利用.NET的对象模型,提供更高级的功能和更强的控制力。 PowerShell 的核心特点之一是它的面向对象性质。这意味着命令的输出是完整的对象,而不仅仅是文本,这使得数据处理...

    powershell中英文教程

    PowerShell是一种强大的命令行接口和脚本语言,主要用于自动化和配置Windows操作系统以及Microsoft应用程序。它在IT管理员和开发者中广泛使用,因为它的灵活性和强大的功能。以下是对标题、描述及提供的压缩包子文件...

    精通windows server 2008 命令行与powershell电子书PDF版(第一卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

    精通windows server 2008 命令行与powershell 电子书PDF单文件完整版

    本书全面地介绍了Windows Server 2008命令行、PowerShell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理、网络服务管理、系统诊断、故障恢复、系统安全、批处理和配置文件,...

    powershell 教程

    PowerShell是一种功能强大的命令行shell和脚本语言,它由微软开发,主要用于任务自动化和配置管理。PowerShell的功能非常广泛,可以用于系统管理、网络管理、应用程序管理等众多方面。尤其在服务器管理领域,...

    精通windows server 2008 命令行与powershell电子书PDF版(第二卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

    精通windows server 2008 命令行与powershell 电子书PDF版(第四卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

    Windows PowerShell 实用教程

    ### Windows PowerShell 实用教程 #### Windows PowerShell 概览 Windows PowerShell 是由微软开发的一款强大的交互式命令行界面和脚本语言环境,专为系统管理和自动化设计。它首次出现在 Windows XP 和 Windows ...

    Powershell管理系列教程.docx

    PowerShell管理系列教程主要涉及如何使用PowerShell来管理和操作Active Directory(AD),特别是关于用户管理和组织单位(OU)的管理。PowerShell是一种强大的命令行工具,尤其适用于Windows系统管理和自动化任务,...

    19.Powershell基础入门及常见用法(一)1

    1. **基础概念**:Powershell是一种基于.NET Framework的命令行工具,提供了一种交互式的shell环境和一套面向对象的命令集,用于管理系统和执行任务。 2. **为什么强大?** Powershell的强大之处在于它的模块化设计...

    精通windows server 2008 命令行与powershell电子书PDF版(第三卷)

    《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...

Global site tag (gtag.js) - Google Analytics