《Learn Windows PowerShell in a Month of Lunches Third Edition》读书笔记—CHAPTER 18 Variables

本文主要是介绍《Learn Windows PowerShell in a Month of Lunches Third Edition》读书笔记—CHAPTER 18 Variables,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

18.2 Storing values in variables

Everything in PowerShell—and we do mean everything—is treated as an object.
要查看对象的方法和属性,我们可以使用Gm命令

PowerShell允许我们将值保存到变量中,如 PS C:\> $var = "SERVER-R2"
其中的 $ 不是变量的一部分,而是告诉PowerShell紧跟其后面的是一个变量名。
想要查看变量保存的内容,我们使用 $ 加上变量名,如

PS C:\> $var
SERVER-R2

18.3 Using variables: fun tricks with quotes

To this point in the book, we’ve advised you to generally enclose strings within single quotation marks. The reason for that is PowerShell treats everything enclosed in single quotation marks as a literal string.

PS C:\> $var = 'What does $var contain?'
PS C:\> $var
What does $var contain?

上面这个例子说明单引号内的 $var 被视为字面意思。

但是双引号内的 $var 就不是了:

PS C:\> $computername = 'SERVER-R2'
PS C:\> $phrase = "The computer name is $computername"
PS C:\> $phrase
The computer name is SERVER-R2

当继续对 computername 作出修改的时候,我们会发现 phase 的值没变:

PS C:\> $computername = 'SERVER1'
PS C:\> $phrase
The computer name is SERVER-R2

另外在双引号内可以使用转义字符 `(反引号,和~符号是一起的那个)。转义字符可以消除其后符号的特殊含义或者给其后的字符增加含义,如:

PS C:\> $computername = 'SERVER-R2'
PS C:\> $phrase = "`$computername contains $computername"
PS C:\> $phrase
$computername contains SERVER-R2

我们可以看到 `$computername 输出的是 $computername

为什么是只提到在双引号内使用呢?因为单引号的内容都被作为字面意思理解。

另一个反引号的例子:

PS C:\> $phrase = "`$computername`ncontains`n$computername"
PS C:\> $phrase
$computername
contains
SERVER-R2

我们可以发现输出换行了,这就是反引号和字符n组成`n 表示换行的意思

18.4 Storing many objects in a variable

我们可以使用一个逗号分隔的列表来将一堆对象存入一个变量中,因为PowerShell将列表视为对象的集合。如:

PS C:\> $computers = 'SERVER-R2','SERVER1','localhost'
PS C:\> $computers
SERVER-R2
SERVER1
Localhost

18.4.1 Working with single objects in a variable

我们可以使用在中括号中使用索引的方式来访问变量中的某一元素:

PS C:\> $computers[0]
SERVER-R2
PS C:\> $computers[1]
SERVER1
PS C:\> $computers[-1]
localhost
PS C:\> $computers[-2]
SERVER1

0表示第一个,-1表示倒数第一个,-2表示倒数第二个。其Length属性表示其中有多少对象:

PS C:\Users\Administrator> $computers.Length
3

我们也可以访问包含在变量中的对象的方法和属性:

PS C:\> $computername = 'SERVER-R2'
PS C:\> $computername.length  
9
PS C:\> $computername.toupper()  
SERVER-R2
PS C:\> $computername.tolower()
server-r2
PS C:\> $computername.replace('R2','2008') 
SERVER-2008
PS C:\> $computername
SERVER-R2  

18.4.2 Working with multiple objects in a variable

PowerShell v2 didn’t let you call a method, or access a property, on multiple objects at the same time
PS C:\> $computers.toupper() 这样会报错

Instead, you’d have to specify which object within the variable you want, and then access a property or execute a method on that specific object
应该写成如下样子:

PS C:\> $computers[0].tolower()
server-r2
PS C:\> $computers[1].replace('SERVER','CLIENT')
CLIENT1

18.4.3 Other ways to work with multiple objects

如果我们想要对变量内的每一个对象都使用ToLower() 进行处理,并将处理后的值保存进原变量内的话,可以使用如下方式:

PS C:\> $computers = $computers | ForEach-Object { $_.ToLower()}
PS C:\> $computers
server-r2
client1
localhost

第一命令的意思是:
Using ForEach-Object to execute a method against each object contained within a variable

我们也可以使用 Select-Object 对属性做类似的事情,下面这个例子选择每个对象的length属性:

PS C:\> $computers | select-object length                                                                 Length                                                              ------                                                                   9                                                                     7                                                                      9

18.4.4 Unrolling properties and methods in PowerShell v3

对于v3版本的PowerShell,微软允许我们通过一个包含多个对象的变量来访问对象属性和方法:

$services = Get-Service
$services.Name 

上面这个例子中,PowerShell推测你在尝试访问一个属性,它同样知道集合 $collection 不包含Name属性,但是其中的对象有有该属性。于是,PowerShell就隐式的遍历对象,访问其中的Name属性。 上述例子等同于:

Get-Service | ForEach-Object { Write-Output $_.Name }

以及

Get-Service | Select-Object –ExpandProperty Name

18.5 More tricks with double quotes

双引号里有一个叫做变量替换的扩展概念,例子:

PS C:\> $services = get-service
PS C:\> $firstname = "$services[0].name"
PS C:\> $firstname
AeLookupSvc ALG AllUserInstallAgent AppIDSvc Appinfo AppMgmt AudioEndpoint Builder Audiosrv AxInstSV BDESVC BFE BITS BrokerInfrastructure Browser bthserv CertPropSvc COMSysApp CryptSvc CscService DcomLaunch defragsvc Device

本意上我们是想看看services的第一个对象的name属性,但是输出的却是其所有对象的属性。因为紧跟在$services 后面的[ 字符不是变量名的合法字符,所以PowerShell将 $services[0] 替换成了 $services

解决方法是将命令放入 $() 中,任何在该符号内的东西都会被视为正常的PowerShell命令。其结果会被放入字符串中,替换原来的东西。$() 结构 被称为子表达式(subexpression)

PS C:\> $services = get-service
PS C:\> $firstname = "The first name is $($services[0].name)"
PS C:\> $firstname
The first name is AeLookupSvc

18.6 Declaring a variable’s type

PS C:\> $number = Read-Host "Enter a number"
Enter a number: 100
PS C:\> $number | gmTypeName: System.String

如果不加以声明的话,我们可以看出我们读入的数是以字符串保存的,如果我们想要以正数形式保存,就要使用强制转换
这里写图片描述

常见的类型还有:

[int]—Integer numbers
[single] and [double]—Single-precision and double-precision floating numbers (numbers with a decimal portion)
[string]—A string of characters
[char]—Exactly one character (as in, [char] c=X)[xml]AnXMLdocument;whateverstringyouassigntothiswillbeparsedtomakesureitcontainsvalidXMLmarkup(forexample,[xml] c = ‘ X ′ ) [ x m l ] — A n X M L d o c u m e n t ; w h a t e v e r s t r i n g y o u a s s i g n t o t h i s w i l l b e p a r s e d t o m a k e s u r e i t c o n t a i n s v a l i d X M L m a r k u p ( f o r e x a m p l e , [ x m l ] doc=Get-ContentMyXML.xml)
[adsi]—An Active Directory Service Interfaces (ADSI) query; the shell will execute the query and place the resulting object or objects into the variable (such as [adsi]$user = “WinNT:\MYDOMAIN\Administrator,user”)

当然,我们也可以对变量进行类型声明:
这里写图片描述

这篇关于《Learn Windows PowerShell in a Month of Lunches Third Edition》读书笔记—CHAPTER 18 Variables的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/552353

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件