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 之外的环境变量标准规则。

 

你可能感兴趣的:(windows,socket,Microsoft,Access,powershell)