[玩转系统] 关于运营商
作者:精品下载站 日期:2024-12-14 02:21:17 浏览:14 分类:玩电脑
关于运营商
简短描述
描述 PowerShell 支持的运算符。
详细描述
运算符是可以在命令或表达式中使用的语言元素。 PowerShell 支持多种类型的运算符来帮助您操作值。
算术运算符
使用算术运算符(+
、-
、*
、/
、%
)计算命令或表达式中的值。使用这些运算符,您可以对值进行加、减、乘或除,并计算除法运算的余数(模数)。
加法运算符连接元素。乘法运算符返回每个元素的指定副本数。您可以在实现算术运算符的任何 .NET 类型上使用算术运算符,例如:Int
、String
、DateTime
、Hashtable
和数组。
位运算符(-band
、-bor
、-bxor
、-bnot
、-shl
, -shr
) 操作值中的位模式。
有关详细信息,请参阅 about_Arithmetic_Operators。
赋值运算符
使用赋值运算符(=
、+=
、-=
、*=
、/=
, %=
) 为变量分配、更改或附加值。您可以将算术运算符与赋值结合起来,将算术运算的结果赋给变量。
有关详细信息,请参阅 about_Assignment_Operators。
比较运算符
使用比较运算符(-eq
、-ne
、-gt
、-lt
、-le
, -ge
) 来比较值和测试条件。例如,您可以比较两个字符串值以确定它们是否相等。
比较运算符还包括查找或替换文本中模式的运算符。 (-match
、-notmatch
、-replace
) 运算符使用正则表达式,而 (-like
、-notlike
)使用通配符*
。
包含比较运算符确定测试值是否出现在参考集中(-in
、-notin
、-contains
、-notcontains
)。
类型比较运算符(-is
、-isnot
)确定对象是否属于给定类型。
有关详细信息,请参阅 about_Comparison_Operators。
逻辑运算符
使用逻辑运算符(-and
、-or
、-xor
、-not
、!
) 将条件语句连接成单个复杂条件。例如,您可以使用逻辑 -and
运算符来创建具有两个不同条件的对象过滤器。
有关详细信息,请参阅 about_Logical_Operators。
重定向运算符
使用重定向运算符(>
、>>
、2>
、2>>
和 2> &1
) 将命令或表达式的输出发送到文本文件。重定向运算符的工作方式类似于 Out-File
cmdlet(不带参数),但它们还允许您将错误输出重定向到指定文件。您还可以使用 Tee-Object
cmdlet 重定向输出。
更多信息请参见about_Redirection
拆分和连接运算符
-split
和 -join
运算符分割和组合子字符串。 -split
运算符将字符串拆分为子字符串。 -join
运算符将多个字符串连接成一个字符串。
有关详细信息,请参阅 about_Split 和 about_Join。
类型运算符
使用类型运算符(-is
、-isnot
、-as
)查找或更改对象的 .NET 类型。
有关详细信息,请参阅 about_Type_Operators。
一元运算符
使用一元 ++
和 --
运算符来递增或递减值,使用 -
进行求反。例如,要将变量 $a
从 9
增加到 10
,请键入 $a++
。
有关详细信息,请参阅 about_Arithmetic_Operators。
特殊操作员
特殊运算符具有不适合任何其他运算符组的特定用例。例如,特殊运算符允许您运行命令、更改值的数据类型或从数组中检索元素。
分组运算符( )
与其他语言一样,(...)
用于覆盖表达式中的运算符优先级。例如:(1 + 2)/3
但是,在 PowerShell 中,还有其他行为。
对结果表达式进行分组
(...)
允许您让命令的输出参与表达式。例如:
PS> (Get-Item *.txt).Count -gt 10
True
管道分组表达式
当用作管道的第一段时,将命令或表达式括在括号中总是会导致表达式结果的枚举。如果括号包含一个命令,则在通过管道发送结果之前,该命令将运行至完成,所有输出收集在内存中。
在管道之前对表达式进行分组还可以确保后续的逐个对象处理不会干扰命令用于生成其输出的枚举。
分组赋值语句
未分组的赋值语句不输出值。对赋值语句进行分组时,分配的变量的值将传递并且可以在更大的表达式中使用。例如:
PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True
将语句括在括号中会将其转换为输出 $var
值的表达式。
此行为适用于所有赋值运算符,包括复合运算符(如 +=
)以及递增 (++
) 和递减 (--
)运营商。然而,递增和递减的操作顺序取决于它们的位置。
PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1
在前缀情况下,$i
的值在输出之前会递增。在后缀情况下,$i
的值在输出后会递增。
您还可以在条件语句的上下文中使用此技术,例如 if
语句。
if ($textFiles = Get-ChildItem *.txt) {
$textFiles.Count
}
在此示例中,如果没有文件匹配,则 Get-ChildItem
命令不返回任何内容,也不向 $textFiles
分配任何内容,这在以下情况下被视为 $false
布尔上下文。如果将一个或多个 FileInfo 对象分配给 $textFiles
,则条件计算结果为 $true
。您可以在 if
语句正文中使用 $textFiles
的值。
笔记
虽然这种技术方便且简洁,但它可能会导致赋值运算符 (=
) 和相等比较运算符 (-eq
) 之间的混淆。
子表达式运算符$ ( )
返回一个或多个语句的结果。对于单个结果,返回一个标量。对于多个结果,返回一个数组。当您想在另一个表达式中使用一个表达式时,请使用此选项。例如,将命令的结果嵌入字符串表达式中。
PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20
PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows
数组子表达式运算符@( )
以数组形式返回一个或多个语句的结果。结果始终是包含 0 个或多个对象的数组。
PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
0
哈希表文字语法 @{}
与数组子表达式类似,此语法用于声明哈希表。有关详细信息,请参阅 about_Hash_Tables。
调用运算符 &
运行命令、脚本或脚本块。调用运算符也称为调用运算符,允许您运行存储在变量中并由字符串或脚本块表示的命令。调用运算符在子作用域中执行。有关范围的更多信息,请参阅 about_Scopes。您可以使用它来构建包含所需命令、参数和实参的字符串,然后像命令一样调用该字符串。您创建的字符串必须遵循与在命令行中键入的命令相同的解析规则。有关详细信息,请参阅 about_Parsing。
此示例将命令存储在字符串中并使用调用运算符执行它。
PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned
调用运算符不解析字符串。这意味着在使用调用运算符时不能在字符串中使用命令参数。
PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
Invoke-Expression cmdlet 可以执行在使用调用运算符时导致解析错误的代码。
PS> & "1+1"
&: The term '1+1' is not recognized as a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
PS> Invoke-Expression "1+1"
2
您可以使用脚本的文件名来执行该脚本。脚本文件必须具有 .ps1
文件扩展名才能执行。路径中包含空格的文件必须用引号引起来。如果您尝试执行带引号的路径,PowerShell 将显示带引号的字符串的内容,而不是运行脚本。调用运算符允许您执行包含文件名的字符串的内容。
PS C:\Scripts> Get-ChildItem
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 8/28/2018 1:36 PM 58 script name with spaces.ps1
PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!
有关脚本块的更多信息,请参阅 about_Script_Blocks。
后台运算符 &
在 PowerShell 作业中在后台运行其之前的管道。该运算符的作用类似于 UNIX 控制运算符 & 符号 (&
),它在子 shell 中将其之前的命令作为作业异步运行。
该运算符在功能上等同于Start-Job
。默认情况下,后台操作员在启动并行任务的调用者的当前工作目录中启动作业。以下示例演示了后台作业运算符的基本用法。
Get-Process -Name pwsh &
该命令在功能上等同于以下 Start-Job
用法:
Start-Job -ScriptBlock {Get-Process -Name pwsh}
就像Start-Job
一样,&
后台运算符返回一个Job
对象。该对象可以与 Receive-Job
和 Remove-Job
一起使用,就像您使用 Start-Job
来启动作业一样。
$job = Get-Process -Name pwsh &
Receive-Job $job -Wait
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 221.16 25.90 6988 988 pwsh
0 0.00 140.12 29.87 14845 845 pwsh
0 0.00 85.51 0.91 19639 988 pwsh
Remove-Job $job
&
后台运算符也是语句终止符,就像 UNIX 控制运算符与号 (&
) 一样。这允许您在 &
后台运算符之后调用其他命令。以下示例演示了在 &
后台运算符之后调用其他命令。
$job = Get-Process -Name pwsh & Receive-Job $job -Wait
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 221.16 25.90 6988 988 pwsh
0 0.00 140.12 29.87 14845 845 pwsh
0 0.00 85.51 0.91 19639 988 pwsh
这相当于以下脚本:
$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait
如果您想运行多个命令,每个命令都在自己的后台进程中但全部在一行上,只需在每个命令之间和之后放置 &
即可。
Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &
有关 PowerShell 作业的更多信息,请参阅 about_Jobs。
强制转换运算符[ ]
将对象转换或限制为指定类型。如果无法转换对象,PowerShell 会生成错误。
[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'
当使用强制转换表示法将变量分配时,也可以执行强制转换。
逗号运算符 ,
作为二元运算符,逗号创建一个数组或附加到正在创建的数组。在表达式模式下,作为一元运算符,逗号创建一个只有一个成员的数组。将逗号放在成员前面。
$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)
由于 Write-Output
需要一个参数,因此您必须将表达式放在括号中。
点采购运算符 .
在当前作用域中运行脚本,以便将脚本创建的任何函数、别名和变量添加到当前作用域,从而覆盖现有的函数、别名和变量。脚本声明的参数成为变量。没有给定值的参数成为没有值的变量。但是,自动变量 $args
被保留。
. c:\scripts\sample.ps1 1 2 -Also:3
笔记
点采购运算符后跟一个空格。使用空格来区分点和表示当前目录的点 (.
) 符号。
在以下示例中,当前目录中的 Sample.ps1 脚本在当前作用域中运行。
. .\sample.ps1
格式运算符 -f
使用字符串对象的 format 方法格式化字符串。在运算符左侧输入格式字符串,在运算符右侧输入要格式化的对象。
"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello 3.14
您可以使用“0”自定义说明符对数值进行零填充。 :
后面的零个数表示填充格式化字符串的最大宽度。
"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365
如果需要在格式化字符串中保留大括号 ({}
),可以通过将大括号加倍来转义它们。
"{0} vs. {{0}}" -f 'foo'
foo vs. {0}
有关详细信息,请参阅 String.Format 方法和复合格式。
索引运算符[ ]
从索引集合(例如数组和哈希表)中选择对象。数组索引从零开始,因此第一个对象的索引为[0]
。您还可以使用负索引来获取最后的值。哈希表按键值索引。
给定一个索引列表,索引运算符返回与这些索引对应的成员列表。
PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...
当对象不是索引集合时,使用索引运算符访问第一个元素将返回对象本身。超出第一个元素的索引值返回$null
。
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
管道运算符 |
将其前面的命令的输出发送(“管道”)到其后面的命令。当输出包含多个对象(“集合”)时,管道运算符一次发送一个对象。
Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}
管道链运算符 &&
和 ||
根据左侧管道的成功有条件地执行右侧管道。
# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules
有关更多信息,请参阅About_Pipeline_Chain_Operators。
范围运算符 ..
范围运算符可用于表示连续整数或字符的数组。由范围运算符连接的值定义范围的起始值和结束值。
笔记
PowerShell 6 中添加了对字符范围的支持。
数字范围
1..10
$max = 10
foreach ($a in 1..$max) {Write-Host $a}
您还可以按相反的顺序创建范围。
10..1
5..-5 | ForEach-Object {Write-Output $_}
该范围的起始值和结束值可以是任何计算结果为整数或字符的表达式对。该范围的端点必须可转换为有符号 32 位整数 ([int32]
)。较大的值会导致错误。此外,如果在数组中捕获范围,则结果数组的大小将限制为 [int]::MaxValue - 56
。这是 .NET 中数组的最大大小。
例如,您可以使用枚举的成员作为开始值和结束值。
PS> enum Food {
Apple
Banana = 3
Kiwi = 10
}
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10
这很重要
结果范围不限于枚举的值。相反,它表示所提供的两个值之间的值范围。您无法使用范围运算符来可靠地表示枚举的成员。
字符范围
要创建字符范围,请将字符括在引号中。
PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A
如果将字符范围分配给字符串,则其处理方式与将字符数组分配给字符串相同。
PS> [string]$s = 'a'..'e'
$s
a b c d e
$a = 'a', 'b', 'c', 'd', 'e'
$a
a b c d e
数组中的字符连接成一个字符串。字符由 $OFS
首选项变量的值分隔。有关详细信息,请参阅 about_Preference_Variables。
数组中字符的顺序由字符的 ASCII 值决定。例如,c
和 X
的 ASCII 值分别为 99 和 88。该范围将以相反的顺序呈现。
PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X
成员访问运算符 .
访问对象的属性和方法。成员名称可以是表达式。
$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }
从 PowerShell 3.0 开始,当您对没有成员的列表集合对象使用运算符时,PowerShell 会自动枚举该集合中的项目并对每个项目使用运算符。有关详细信息,请参阅 about_Member-Access_Enumeration。
静态成员运算符 ::
调用 .NET 类的静态属性和方法。要查找对象的静态属性和方法,请使用 Get-Member
cmdlet 的 Static 参数。成员名称可以是表达式。
[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }
三元运算符 ? :
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag