首页 » Windows PowerShell 实战指南 » Windows PowerShell 实战指南全文在线阅读

《Windows PowerShell 实战指南》附录 复习实验

关灯直达底部

当你完成这本书中指定的章节和实验后,可以继续完成本篇附录中提供的3个复习实验。对于你的学习过程来说,复习是一种很好的休息方式,同时可以巩固你已经学到的最为重要的要点。和往常一样,你可以从MoreLunches.com 网站上找到示例答案。通过找到这本书的封面图片,单击它,然后去下载区下载实验示例解决方案文件即可。

因为这些实验任务中的一部分实验说明命令较为复杂,所以我们已经将这些复杂的说明命令分解为独立的任务小节。同时为了帮助你完成实验,在每个实验开端,我们也提供了一个提示清单来提示你,包括你可能会需要的特定命令、帮助文件和语法。

实验回顾1:第1—6章

注意:

为了完成这些实验,你需要一台运行PowerShell v3或更新版本的PowerShell的计算机。在打算完成这些实验之前,你应该先完成这本书中的第1—6章的实验。

提示:

  • Sort-Object
  • Select-Object
  • Import-Module
  • Export-CSV
  • Help
  • Get-ChildItem (Dir)

任务1

运行一个命令,从而显示应用程序事件日志中最新的100个条目,不要使用Get-WinEvent。

任务2

写一个仅显示前五个最消耗虚拟内存(VM)进程的命令。

任务3

创建一个包含所有的服务CSV文件,只需要列出服务名称和状态。所有处于运行状态的服务处于停止状态的服务之前。

任务4

写一个命令行,将BITS服务的启动项类型变更为手动。

任务5

显示你计算机中所有文件名称为Win. 的文件,以C:开始。注意:为了完成这个实验,你可能需要去实验和使用一些Cmdlet命令的新参数。

任务6

获取一个C:Program Files 的目录列表。包含所有的子文件夹,把这些目录列表放到位于C:Dir.txt的文本文件内(记住去使用the >redirector, 或者 Out-FileCmdlet)。

任务7

获取最近20条安全事件日志的列表,将这些信息转化成XML格式。不要在硬盘上创建文件,而是把XML在控制台窗口直接显示出来。

注意:

该XML可以作为一个单独的原生对象显示,而不是以一个原始的XML数据。这没问题。那也是PowerShell 展示XML的方式。如果你喜欢,你可以将XML对象通过管道传递给Format-Custom命令,从而查看XML展开为对象层级的形式。

任务8

获取一个服务列表,并将其导出到以C:services.csv命名的CSV文件内。

任务9

获取一个服务列表,仅保留服务名称、显示名称和状态,然后将这些信息发送到一个HTML文件。在HTML文件中的服务信息表格之前显示“Installed Services”。

任务10

为Get-ChildItem创建一个新的别名D。仅将别名导出到一个文件里。关闭这个Shell,然后打开一个新的控制台窗口。把别名导入到新的Shell中。确认能够通过运行D并且获得一个目录列表。

任务11

显示系统中存在的事件日志列表。

任务12

运行一个命令来展示Shell所在的当前目录。

任务13

运行一个命令,展示最近你在Shell中运行过的命令。从中查找你在任务11中所运行的命令。将这两个命令通过管道传输符进行连接,重新运行任务11的命令。

换句话说,假如Get-Something 是一个获取历史命令的命令,5是任务11的命令ID号,并且Do-Something 是运行历史命令的命令,运行如下。

Get-Something –id 5 | Do-Something  

当然,上面的命令并不是正确的命令,你需要找到正确的命令。

提示:

你所需寻找的两个命令有相同的名词。

任务14

运行一个命令,从而在需要时通过覆盖旧日志来修改安全事件日志。

任务15

通过使用New-Item Cmdlet来创建一个名称为C:Review的新目录。这与运行Mkdir是不一样的;New-Item 命令需要知道你所想要创建的新项目是什么类型。通过命令读取帮助信息。

任务16

显示该注册码的内容:

HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerUserShell Folders  

注意:

“User Shell Folders”与真正意义上的目录并不一样。如果你改变该“目录”,你将不能在目录清单中看到任何条目。User Shell Folders 是一个项目,其包含的是项目属性。有一个Cmdlet能展示属性项(尽管命令使用的是单数名词而不是复数)。

任务17

找出(但是请不要运行)命令能做如下事情的:

  • 重启电脑;
  • 关闭电脑;
  • 从一个工作组或者域内移除一个电脑;
  • 恢复一个电脑系统,并重建检查点。

任务18

你认为什么命令可以改变一个注册表值?提示:它是一个和你在任务16中发现的命令相同的名词。

实验回顾2:第1—14章

注意:为了完成这些实验,你需要一台运行PowerShell v3或更新版本的PowerShell的计算机。在打算完成这些实验之前,你应该先完成这本书中的第1—14章的实验。

提示:

   

  • Format-Table
  • Invoke-Command
  • Get-Content(or Type)
  • Parenthetical commands
  • @{label=/'columnheader/';expression={$ .property}}
  • Get-WmiObject
  • Where-Object
  • -eq -ne -like -notlike

任务1

在一个表格中展示一个正在运行的进程的列表,其中只包含进程的名字和ID号。不要让这个表格在两列之间有大的空白区域。

任务2

运行如下命令:

Get-WmiObject -class Win32_UserAccount  

现在再一次运行相同的命令,但是将内容格式化输出到一个有Domain和UserName列的表格中。UserName列应该显示用户的Name属性,如下:

Domain  UserName =======  ======== COMPANY  DonJ  

确保这个第二列标题叫UserName,而不是Name。

任务3

让两台电脑(也可以使用Localhost两次)运行如下命令:

Get-PSProvider  

使用远程处理去做,确保输出包含计算机名称。

任务4

使用Notepad 创建一个名为C:Computers.txt 的文件。在文件中写入如下内容:

Localhost Localhost  

你应该确保上述两个名称各自独占一行—总共2行。保存文件并关闭记事本。然后写一个命令列出正在电脑上运行的服务名称写入到C:Computer,txt。

任务5

查询Win32_LogicalDisk的所有实例。仅显示DriveType属性中包含3且有百分之五十以上的可用磁盘空间的实例。

提示:计算可用空间百分比,公式为freespace/size * 100。

注意,Get-WmiObjectcannot 的过滤参数中无法包含数学表达式。

任务6

显示在rootCIMv2的命名空间下的所有的WMI类列表。

任务7

在列表中显示所有StartMode是Auto且State属性不是Running的Win32_Service的实例。

任务8

找到一个能发送Email信息的命令。这个命令的必要参数都是什么?

任务9

运行一个显示C:下目录权限的命令。

任务10

运行一个可以显示所有C:Users下子文件夹权限的目录,仅包含直接子文件夹,不需要去递归所有的文件和文件夹。你需要把一个命令的结果通过管道传输给另一个命令,即可实现。

任务11

找到一个可以使用其他凭据而不是当前登录用户的凭据启动记事本的命令。

任务12

运行一个命令,使Shell暂停或者闲置10秒。

任务13

你能找到帮助文件来解释Shell的各种运算符吗?

任务14

写一个信息类消息到应用事件日志。日志类别为1,原始数据为100000。

任务15

运行如下命令:

Get-WmiObject –Class Win32_Processor  

了解该命令的默认输出结果。现在,修改这个命令,使得输出结果在表格里显示。表格内容应该包含每个处理器的核心数、制造商和名称,也包括一个列名为“MaxSpeed”的列,该列表示处理器的最大时钟频率。

任务16

运行如下命令:

Get-WmiObject –Class Win32_Process  

了解这个命令的默认输出。如果希望的话,可以将该输出结果通过管道传递给Get-Member命令。现在,将该命令修改为仅显示在峰值情况下工作集超过5000的处理器。

实验回顾3:第1—19章

注意:

为了完成这些实验,你需要一台运行PowerShell v3或更新版本的PowerShell的计算机。在打算完成这些实验之前,你应该先完成这本书中的第1—19章的实验。

从回答下列问题开始:

1.你会使用哪一个命令启动一个完全在你本地计算机运行的作业?

2.你会使用哪一个命令启动一个作业的内容被远程计算机处理但由本地计算机调整的作业?

3.${computer name}是一个合法的变量名称吗?

4.你会如何展示由当前Shell定义的变量列表?

5.哪一个命令可以被用来提示用户输入?

6.哪一个命令可以被通常用于生成显示在屏幕上的输出结果,但也可以被重新转为多种其他输出格式?

现在完成以下三个任务:

任务1

创建一个处于运行状态的进程列表,该列表应该仅包含进程名称、ID、VM和PM。把这个列表放入一个名称为C:Procs.html的HTML文件中。确保HTML文件有一个标题为“Current Processes”。在浏览器中显示文件,并把标题显示在浏览器窗口的标题栏中。

任务2

创建一个包含所有你的电脑上的服务的制表符定界文件,命名为C:Services.tdf。/"`t/"(在双引号之间的反撇号t)是PoweShell为水平制表符使用的转义字符。文件中仅包含服务的名称、显示名称和状态。

任务3

重复任务1,将命令修改为在HTML文件中Vm列和PM列显示的值以MB为单位,而不是字节。计算兆字节的公式,以一个整体数字的数值显示,公式如下:$_.VM / 1MB –as[int]for the VM property。