《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/552352

相关文章

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

C++实现俄罗斯方块(Windows控制台版)

C++实现俄罗斯方块(Windows控制台版) 在油管上看到一个使用C++控制台编写的俄罗斯方块小游戏,源代码200多行,B站上也有相关的讲解视频,非常不错,值得学习。 B站讲解视频地址为:【百万好评】国外技术大神C++游戏编程实战教程,油管580W收藏,新手10小时入门,并快速达到游戏开发能力(中英字幕) B站 CSDN博主千帐灯无此声还为此写了一篇博客:C++实现俄罗斯方块(源码+详解),讲

Windows下php扩展开发c++动态库

PHP扩展开发,从零了解到初步完成一个小项目,经过三天的仔细研究,现整理如下 一、需求介绍 PHP扩展开发,调用自己之前的c++动态库,完成功能 二、项目之前 系统:windows xp  开发工具:vs 2008 web环境:apache2.4  PHP5.3.29-VC9-ts-x86 aphach和PHP 环境之前已经搭建完成 PHP源码:去官网http://www.php.n

《C++标准库》读书笔记/第一天(C++新特性(1))

C++11新特性(1) 以auto完成类型自动推导 auto i=42; //以auto声明的变量,其类型会根据其初值被自动推倒出来,因此一定需要一个初始化操作; static auto a=0.19;//可以用额外限定符修饰 vector<string> v;  auto pos=v.begin();//如果类型很长或类型表达式复杂 auto很有用; auto l=[] (int