65.9K
CodeProject 正在变化。 阅读更多。
Home

Microsoft Windows PowerShell 第一部分快速指南。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (28投票s)

2010年8月11日

CPOL

11分钟阅读

viewsIcon

116969

本文(第一部分)的目的是向您介绍 Microsoft Windows PowerShell。

目录

引言

本文(第一部分)的目的是向您介绍 Microsoft Windows PowerShell。我们将学习一些 Windows PowerShell 的基础知识,例如:如何编写您的第一个 PowerShell 脚本,如何在 PowerShell 脚本中使用 Microsoft .Net 库,以及其他一些内容。

那么,让我们开始吧。首先,我们需要知道什么是 Windows PowerShell?答案很简单,
PowerShell 是一种编程语言,与其他编程语言类似。PowerShell 语言类似于 Perl。重要的是,PowerShell 是一种面向对象的语言,是 Microsoft Windows 平台的交互式命令行 Shell。

PowerShell 的功能

PowerShell 的一个伟大之处在于它与 Microsoft .Net 环境的集成,并且可以嵌入到其他应用程序中。Microsoft Windows PowerShell 专为自动化系统任务和创建用于常见流程的系统管理工具而设计。

Microsoft Windows PowerShell 提供了多种自动化工作的方法,包括:

  • Cmdlets,它们是非常小的 .NET 类,表现为系统命令。
  • 脚本,它们是 Cmdlets 和相关逻辑的组合。
  • 可执行文件,它们是独立的工具。
  • .NET 类的实例化。

有关更多信息,请参阅以下列出的链接:

PowerShell 的常见用途

众所周知,PowerShell 是一种面向对象的语言,并且允许使用 Microsoft .Net 库,所以
我们可以以多种方式使用 PowerShell 脚本;下面列出了一些常见用途:

  • Windows Active Directory。
  • 文档管理 / 文件处理。
  • 网络监视器。
  • 处理 XML。
  • 处理 Microsoft Office 系统。
  • 处理 Microsoft SQL Server。
  • 处理 Microsoft SharePoint。
  • 处理 Microsoft Exchange Server。
  • 等等。

如何运行您的第一个 PowerShell 脚本

重要的是,不要将 PowerShell 脚本与 VB 脚本进行比较。我们知道可以通过双击 *.vbs 文件或从批处理文件中运行 vb 脚本。PowerShell 脚本可以从 PowerShell 命令提示符运行,也可以通过有效的命令从 Windows 批处理文件运行。下图显示了如何编写和运行脚本。

图- A(Windows PowerShell ISE - 编辑器)

PowerShellWindow.png

注意:Windows 7 平台。

开始学习

好了,我希望您已经了解了一些 Windows PowerShell 的基础知识。那么,我们开始吧。
在本节中,我们将学习编写 PowerShell 脚本的基础知识,例如变量声明、
赋值和变量操作,创建和访问 Microsoft .Net 库中的对象等。

变量声明

PowerShell 脚本中的所有变量都以 $ 符号开头。例如,我们要将两个整数相加并将结果赋给另一个变量,脚本将如下所示:

示例

[int]$valA = 2;
[int]$valB = 3;
[int]$valC = 0;
$valC = $valA + $valB;
write-host ("The sum is: " + $valC);
write-host ("The sum is: $valC ");

输出:总和是:5*write-host -> 用于输出命令。

注意:PowerShell 允许从双引号字符串中读取变量的值,您也可以声明一个没有数据类型的变量,即 $valA = 0;就像我们在 vbScript 中所做的那样,是不是很酷。

数组

数组是一种用于存储相同类型的数据元素的集合的数据结构。Windows PowerShell 支持数据元素,例如字符串、int(32 位整数)、long(64 位整数)、bool(布尔值)、byte 以及其他 .NET 对象类型。例如,我们要创建一个整数数组并赋值,最后显示数组中所有值的总和。脚本将如下所示:

示例

Create an array named $myArray that contains the ten numeric (int) values:1,2,3,4,5,6,7,8,9,10; 

$myArray = 1,2,3,4,5,6,7,8,9,10;
[int] $sum = 0; 
foreach ($val in $myArray)
{
    write-host ("Index with value:$val");
    $sum = $sum + $val;
}
write-host ("The sum is: $sum");

输出

索引包含值:1
索引包含值:2
索引包含值:3
索引包含值:4
索引包含值:5
索引包含值:6
索引包含值:7
索引包含值:8
索引包含值:9
索引包含值:10
总和是:55

关联数组

PowerShell 允许您使用关联数组/数组列表,就像我们在 C#.Net 或 Microsoft Visual Studio .Net 中的其他可用语言中所做的那样。关联数组是一种紧凑的数据结构,用于存储键值对的集合,其中每个键都与一个值配对。PowerShell 使用哈希表数据类型来存储关联数组的内容,因为这种数据结构提供了快速查找机制。

例如,我们要创建一个国家名称的关联数组并赋值,最后查找值。脚本将如下所示:

示例

##Declaration syntax:
$<array name> = @{<keyName = Value>;...}
$countries = @{'88' = 'Bangladesh'; '44' = 'United Kingdom'; '11' = 'United States'; '1' = 'Canada'};
$countries ;

输出

名称 值
------- -------------------
44 英国
11 美国
1 加拿大
88 孟加拉国

因此,创建和初始化标准数组非常相似。但是,对于关联数组,您还必须执行以下操作:

  • 为关联数组中的每个值分配标签。
  • 在数组内容的外围附加一个 @ 符号。
  • 用单引号或双引号将包含空格的任何键或值括起来。

循环

循环结构是计算机程序,它重复执行一系列指令,直到满足某个指定条件为止。

For 语句(也称为 for 循环)是一种语言构造,用于创建在指定条件求值为 true 时运行命令块中的命令的循环。

for 循环的典型用途是迭代值数组并对这些值的一个子集进行操作。在大多数情况下,如果您想迭代数组中的所有值,请考虑使用 foreach 语句。

以下显示了 for 语句的语法:

for (<init>; <condition>; <repeat>) 
{<command_block>}

例如,下面的 for 语句将不断显示 $i 变量的值,直到您手动按 Ctrl+C 退出命令。

for ($i=0; $i<10;$i++)
{Write-Host $i} 
$i = 1
for (;;){Write-Host $i}
Foreach 语句

Foreach 语句(也称为 foreach 循环)是一种语言构造,用于逐个处理(迭代)项目集合中的一系列值。

要遍历的最简单、最典型的集合类型是数组。在 foreach 循环中,通常会对数组中的每个项目运行一个或多个命令。

以下显示了 foreach 的语法:

foreach ($<item> in $<collection>){<command_block>}

例如,以下示例中的 foreach 循环显示了名为 $letterArray 的数组中的值。

$letterArray = "a","b","c","d"
foreach ($letter in $letterArray)
{
Write-Host $letter
}

在此示例中,创建并初始化了 $letterArray,其包含字符串值 "a"、"b"、"c" 和 "d"。然后,第一次运行 foreach 语句时,它将 $letter 变量设置为 $letterArray 中的第一个项目("a"),然后使用 Write-Host Cmdlet 显示字母 a。下一次循环时,$letter 设置为 "b",依此类推。

***请注意,整个 foreach 语句必须出现在一行上才能在 PowerShell 命令提示符下将其作为命令运行。如果您将命令放在 .ps1 脚本文件中,则情况并非如此。

While 语句

While 语句(也称为 while 循环)是一种语言构造,用于创建在条件测试求值为 true 时运行命令块中的命令的循环。While 语句比 for 语句更容易构建,因为其语法不太复杂。此外,它比 foreach 语句更灵活,因为您在 while 语句中指定了一个条件测试来控制循环运行的次数。

以下显示了 while 语句的语法:

while (<condition>){<command_block>}

当您运行 while 语句时,Windows PowerShell 会在进入 <command_block> 部分之前评估语句的 <condition> 部分。语句的条件部分解析为 true 或 false。只要条件保持为 true,PowerShell 就会重新运行 <command_block> 部分。

语句的 <command_block>} 部分包含一个或多个命令,这些命令在每次进入或重复循环时运行。

例如,如果 $val 变量尚未创建或已创建并初始化为 0,则以下 while 语句将显示数字 1 到 3。

while($val -ne 3)
{
$val++
Write-Host $val
}

在此示例中,当 $val = 0、1、2 时,条件($val 不等于 3)为 true。每次循环时,$val 都使用 ++ 一元增量运算符($val++)增加 1。最后一次循环时,$val = 3。当 $val 等于 3 时,条件语句求值为 false,循环退出。

Windows PowerShell 中的运算符

您可以使用 if 语句来运行代码块,前提是指定的条件测试求值为 true。您还可以指定一个或多个额外的条件测试,以便在所有先前的测试都求值为 false 时运行。最后,您可以指定一个附加的代码块,该代码块将在没有其他先前条件测试求值为 true 时运行。

以下显示了 if 语句的语法:

if (<test1>) 
{<code_block1>}
[elseif (<test2)
{<code_block2>}]
[else
<code_block3>}]

逻辑运算符表

Microsoft Windows PowerShell 逻辑运算符表,描述如下:

PowerShell 支持以下逻辑运算符:

运算符

描述

示例

结果

-and

逻辑与

(A -eq A) -and (A -eq B)

false

-or

逻辑或

(A -eq B) -or (A -eq A)

true

-not

逻辑非

(1 -eq 1) -and -not (2 -gt 2)

true

!

逻辑非

(1 -eq 1) -and !(2 -gt 2)

true

比较运算符表

Microsoft Windows PowerShell 比较运算符表及描述

Shell 的比较运算符,默认情况下,比较运算符在比较字符串时不区分大小写。存在区分大小写的变体以及显式的忽略大小写的运算符。

-eq

等于(不区分大小写)

-ne

不等于(不区分大小写)

-ge

大于或等于(不区分大小写)

-gt

大于(不区分大小写)

-lt

小于(不区分大小写)

-le

小于或等于(不区分大小写)

-like

通配符比较(不区分大小写)

-notlike

通配符比较(不区分大小写)

-match

正则表达式比较(不区分大小写)

-notmatch

正则表达式比较(不区分大小写)

-replace

替换运算符(不区分大小写)

-contains

包含运算符(不区分大小写)

-notcontains

包含运算符(不区分大小写)

-ieq

忽略大小写的等于

-ine

忽略大小写的“不等于”

-ige

忽略大小写的“大于或等于”

-igt

忽略大小写的“大于”

-ile

忽略大小写的“小于或等于”

-ilt

忽略大小写的“小于”

-ilike

忽略大小写的等于

-inotlike

忽略大小写的等于

-imatch

忽略大小写的正则表达式比较

-inotmatch

忽略大小写的正则表达式比较

-ireplace

忽略大小写的替换运算符

-icontains

忽略大小写的包含运算符

-inotcontains

忽略大小写的包含运算符

-ceq

等于(区分大小写)

-cne

不等于(区分大小写)

-cge

大于或等于(区分大小写)

-cgt

大于(区分大小写)

-clt

小于(区分大小写)

-cle

小于或等于(区分大小写)

-clike

通配符比较(区分大小写)

-cnotlike

通配符比较(区分大小写)

-cmatch

正则表达式比较(区分大小写)

-cnotmatch

正则表达式比较(区分大小写)

-creplace

替换运算符(区分大小写)

-ccontains

包含运算符(区分大小写)

-cnotcontains

包含运算符(区分大小写)

-is

是某个类型

-isnot

不是某个类型

-as

是某个类型,如果转换失败则不报错

IF, Else 语句

所以,我们对如何编写 if 语句有了一些了解。嗯,关于条件运算符有一个小问题。PowerShell 中的条件运算符与任何其他编程语言都大不相同,上面的表格显示了条件运算符的详细信息。

逻辑“AND”

在 Powershell 中,我们不能像 Microsoft Visual C# 中的 && 或 Microsoft Visual Basic 中的 AND 那样用逻辑“and”来编写条件语句。Windows PowerShell 允许这样做:

示例

if (($val1 -eq $val2) -and ($val1 -eq "Some value")){ 
Write-Host("Equal");}else{
Write-Host("Not equal");
}
逻辑“OR”

我们可以在 Windows PowerShell 的条件语句中实现逻辑“or”,如下所示:

示例

if (($val1 -eq $val2) -or ($val1 -eq "Some value")){ 
Write-Host("One condition satisfied.");}else{
Write-Host("Condition not satisfied.");
} 
逻辑“NOT”

我们可以在 Windows PowerShell 的条件语句中实现逻辑“NOT”,如下所示:

示例

if (($val1 -eq $val2) -not ($val1 = "Some value")){ 
Write-Host("One condition satisfied.");}else{
Write-Host("Condition not satisfied.");
} 
逻辑“NOT”等于

我们可以在 Windows PowerShell 的条件语句中实现逻辑“NOT”等于,如下所示:

示例

if (($val1 -eq $val2) -and ! ($val1 = "Some value")){ 
Write-Host("One condition satisfied.");
}else{
Write-Host("Condition not satisfied.");
} 

函数

函数是您可以在 Windows PowerShell 命令中引用的命名代码块。根据定义,Windows PowerShell 函数与其他编程语言的函数类似。函数内的代码将在您调用函数时运行。

因此,函数可以接受您在调用函数时作为参数指定的导入值,或者接受通过当前管道传递给函数的值,这是非常常见的。函数返回的值可以赋给变量,或传递给其他函数或 Cmdlets。


要创建常规函数或筛选器,您必须指定一些必需的元素。您还可以指定可选元素。以下语法显示了构成函数定义的各种组件:

function | filter
[<scope_type>:]<name>
{ param(<param_list>) <script_block> }

基本的函数定义仅包含初始关键字(function 或 filter)、函数或筛选器的名称以及脚本块(用大括号括起来)。以下定义了一个仅包含必需元素的常规函数:

示例

function HelloWorld 
{
    Write-Host (“Hello World”);
}

关注点

用于系统工具的 Windows PowerShell 脚本。

参考文献

  • Microsoft 开发网络

结论

希望这对您有所帮助。祝您使用愉快!

历史

  • 2010年8月16日:初次发布。
  • 2010年8月17日:更新 PowerShell 中的运算符和修复格式问题。
© . All rights reserved.