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>
通过使用 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>
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>
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基础教程,用户能够掌握如何利用其强大的对象模型和Cmdlet来自动化日常管理任务,提高工作效率。无论你是系统管理员还是开发者,PowerShell都是提升Windows环境管理能力不可或缺的工具。
3. **PowerShell工作区**: 工作区包含了变量、别名、函数等,它们在会话中保持,使得用户可以轻松地存储和重用数据。 4. **提供者**: PowerShell支持多种提供者,如文件系统提供者(允许对文件和目录进行操作)和...
【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...
【PowerShell基础教程】 PowerShell是一种专为管理和自动化Windows操作系统设计的强大脚本语言,自Windows XP/Server 2003起,它逐渐成为Vista、Server 2008及后续版本的标准组件。PowerShell旨在提升系统管理员的...
传统外壳程序如Cmd.exe、SH、KSH、CSH和BASH通常以文本格式处理命令输出,而PowerShell则处理基于.NET平台的对象,这使得数据处理更为灵活和强大。 PowerShell的核心概念之一是Cmdlet(发音为“command-let”),...
精心挑选和整理的关于Windows PowerShell的教程 |powershell 技术文档 --|Powershell_技术教程.doc --|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南...
PowerShell的基础在于其对象模型,它将命令的输出表示为具有属性和方法的对象,而非单纯的文本流。这种设计使得数据处理更加方便。基础概念包括命令行会话(PowerShell Console或ISE)、命令(Cmdlets)、提供程序...
PowerShell 基于.NET框架,因此它能够充分利用.NET的对象模型,提供更高级的功能和更强的控制力。 PowerShell 的核心特点之一是它的面向对象性质。这意味着命令的输出是完整的对象,而不仅仅是文本,这使得数据处理...
PowerShell是一种强大的命令行接口和脚本语言,主要用于自动化和配置Windows操作系统以及Microsoft应用程序。它在IT管理员和开发者中广泛使用,因为它的灵活性和强大的功能。以下是对标题、描述及提供的压缩包子文件...
《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...
本书全面地介绍了Windows Server 2008命令行、PowerShell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理、网络服务管理、系统诊断、故障恢复、系统安全、批处理和配置文件,...
PowerShell是一种功能强大的命令行shell和脚本语言,它由微软开发,主要用于任务自动化和配置管理。PowerShell的功能非常广泛,可以用于系统管理、网络管理、应用程序管理等众多方面。尤其在服务器管理领域,...
《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...
《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...
### Windows PowerShell 实用教程 #### Windows PowerShell 概览 Windows PowerShell 是由微软开发的一款强大的交互式命令行界面和脚本语言环境,专为系统管理和自动化设计。它首次出现在 Windows XP 和 Windows ...
PowerShell管理系列教程主要涉及如何使用PowerShell来管理和操作Active Directory(AD),特别是关于用户管理和组织单位(OU)的管理。PowerShell是一种强大的命令行工具,尤其适用于Windows系统管理和自动化任务,...
1. **基础概念**:Powershell是一种基于.NET Framework的命令行工具,提供了一种交互式的shell环境和一套面向对象的命令集,用于管理系统和执行任务。 2. **为什么强大?** Powershell的强大之处在于它的模块化设计...
《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...