昆山周市建设局网站,盐城网站开发,网站开发终止合作协议,wordpress网站迁移教程PowerShell是未来CMD和批处理的替代者。 什么是Windows PowerShell?Windows PowerShell是一种命令行外壳程序和脚本环境#xff0c;使得命令行使用者和脚本编写者可以利用通过此程序来利用.NET Framework 的强大功能。那么#xff0c;win7系统中该如何打开Windows PowerShel… PowerShell是未来CMD和批处理的替代者。 什么是Windows PowerShell?Windows PowerShell是一种命令行外壳程序和脚本环境使得命令行使用者和脚本编写者可以利用通过此程序来利用.NET Framework 的强大功能。那么win7系统中该如何打开Windows PowerShell来完成某些操作呢? 方法一运行打开法 1.按下“windows徽标键R”打开“运行”程序窗口。 2.在打开的运行界面中输入“powershell”并点击“确定”如图1所示 图1 运行界面输入“powershell” 3.此时出现powershell.exe界面如图2所示http://www.windows7en.com/ylmfwin7/ 图2 Windows powershell程序窗口 方法二附件打开法 “开始”菜单→选择“所有程序”→选择“附件”→选择“Windows PowerShell”文件夹→鼠标左键点击出现的“Windows PowerShell”程序就可以打开Windows PowerShell程序了。如图3所示。 图3 Windows powershell程序窗口 方法三搜索框打开法http://www.windows7en.com/sdjswin7/ “开始”菜单→在搜索框中输入“Windows PowerShell”→鼠标左键点击出现的“Windows PowerShell”程序出现Windows PowerShell程序运行界面如图4所示 图4 Windows powershell程序窗口(本文摘自http://www.windows7en.com/Win7/18730.html) 【温馨提示】在win7和Windows Server 2008 R2中可以使用任务并以 Administrator 帐户的全部特权启动 Windows PowerShell 窗口。而其他版本的操作系统想要用管理员特权启动Windows PowerShell就需要手动来操作了。 您可轻易发现 Windows Powershell 的功能。例如若要查找用于查看和更改Windows 服务的cmdlet 列表 执行开始-运行-cmd在命令行下输入 PowerShell 进入 windows PowerShell再输入如下命令 get-command *-service 在发现可完成任务的 cmdlet 之后可以使用 Get-Help cmdlet 了解有关该 cmdlet 的详细信息。例如若要显示有关 Get-Service cmdlet 的帮助请键入 get-help get-service 若要充分理解该 cmdlet 的输出则可通过管道将其输出传递给 Get-Member cmdlet。例如以下命令将通过 Get-Service cmdlet 显示有关该对象输出的成员的信息。 get-service | get-member 一致性 管理系统可能是一项复杂的任务而具有统一接口的工具将有助于控制其固有的复杂性。然而无论是命令行工具还是可编写 脚本的 COM 对象在一致性方面都乏善可陈。 Windows PowerShell 的一致性是其主要优点中的一项。例如如果您学会了如何使用 Sort-Object cmdlet则可利用这一知识对任何 cmdlet 的输出进行排序。而无需了解每个 cmdlet 的不同的排序例程。 此外cmdlet 开发人员也不必为其 cmdlet 设计排序功能。Windows PowerShell 为他们提供了框架而该框架可提供基本的功能并强制他们在接口的许多方面保持一致。该框架虽然消除了通常会留给开发人员的某些选项但作为回报开发强健、易于使用的 cmdlet 的工作将更加简单。 交互式脚本环境 Windows PowerShell 将交互式环境和脚本环境组合在一起从而允许您访问命令行工具和 COM 对象同时还可利用 .NET Framework 类库 (FCL) 的强大功能。 此环境对 Windows 命令提示符进行了改进后者提供了带有多种命令行工具的交互式环境。此外还对 Windows Script Host (WSH) 脚本进行了改进后者允许您使用多种命令行工具和 COM 自动对象但未提供交互式环境。 通过将对所有这些功能的访问组合在一起Windows PowerShell 扩展了交互用户和 脚本编写者的能力从而更易于进行系统管理。 面向对象 尽管您可以通过以 文本方式键入命令与 Windows PowerShell 进行交互但 Windows PowerShell 是基于对象的而不是基于文本的。命令的输出即为对象。可以将输出对象发送给另一条命令以作为其输入。因此Windows PowerShell 为曾使用过其他 外壳程序的人员提供了熟悉的界面同时引入了新的、功能强大的命令行范例。通过允许发送对象而不是文本它扩展了在命令之间发送数据的概念。 易于过渡到脚本 使用 Windows PowerShell您可以很方便地从以交互方式键入命令过渡到创建和 运行脚本。您可以在 Windows PowerShell 命令提示符下键入命令以找到可执行任务的命令。随后可将这些命令保存到 脚本或历史记录中然后将其复制到文件中以用作脚本。 识别你即将使用的Provider 通过识别PowerShell里安装的Provider你就可以了解默认安装下PowerShell提供了那些能力。 Provider可以使用一种简单的访问方式暴露位于不同储存位置的数据。就像是浏览不同 磁盘上的目录结构一样简单。 Provider把不同的信息存放位置表示成“ 驱动器”-目录这种结构这样很容易被用户所理解。就像我们要访问一个位于D盘的WIN32目录下的SETUP.exe文件我们要通过 浏览器单击D盘的图标然后选择WIN32目录并双击一样如果我们要访问位于“注册表”的数据那么我们也只需要简单地通过Set-Location命令来到到“REGISTRY”这个“ 驱动器”然后用GET-CHILDITEM命令获取其子数据就行了。 注实际上PowerShell访问 磁盘驱动器也是通过Provider的切换驱动器其实和切换其他数据容器是一样地操作。 例如 Set-Location d:\ 这是切换驱动器 Set-Location HKLM:\ 这是切换到注册表的HKLM键 另外Get-PSprovider命令可以查看当前已经安装的所有PROVIDER。任何熟悉.NET编程的人都可以编写Provider。当新的provider被安装后就叫做snap-in。snap-in其实是一个 动态连接库dll文件可以被安装到powershell中。然而当一个snap-in安装后却没有办法卸载。 Get-PSProvider Name Capabilities Drives ---- ------------ ------ Alias ShouldProcess {Alias} Environment ShouldProcess {Env} FileSystem Filter, ShouldProcess {C, D, F, A...} Function ShouldProcess {Function} Registry ShouldProcess {HKLM, HKCU} Variable ShouldProcess {Variable} Certificate ShouldProcess {cert} 这些就是我机器上的默认安装后的provider。 使用Set-Location和Get-ChildItem浏览数据 Set-Location用于改变 当前目录以及选择当前的provider而Get-ChildItem用于获取当前目录或者指定目录下的子对象 例子 set-location hkcu:\software get-childitem 例子2 GCI -path HKLM:\software 有两种连接WMI服务的方法l 使用Get-WmiObject可以很容易地连接到WMI服务并且获取WMI对象。 l 使用一个COM对象“WbemScripting.SWbemLocator”可以连接WMI的服务。SWbemLocator对象只有一个方法就是ConnectServer()。该方法接受5个参数用户名密码语言代码验证方法Kerberos, NTLM等标志超时值。 下例中我们使用New-Object命令创建了一个“WbemScripting.SWbemLocator”的实例。然后用这个实例的ConnectServer方法连接了到了一个WMI的名字空间root\cimv2ConnectServer方法返回了一个WMIService对象接着又用这个对象的subClassesOf方法返回了一系列WMI的CLASS $strComputer . $wmiNS \root\cimv2 $strUsr #Blank for current security. Domain\Username $strPWD #Blank for current security. $strLocl MS_409 #US English. Can leave blank for current language $strAuth #if specify domain in strUsr this must be blank $iFlag 0 #only two values allowed: 0 and 128. $objLocator New-Object -comobject WbemScripting.SWbemLocator $objWMIService $objLocator.ConnectServer($strComputer, $wmiNS, $strUsr, $strPWD, $strLocl, $strAuth, $iFLag) $colItems $objWMIService.subClassesOf() Write-Host There are: $colItems.count classes in $wmiNS foreach ($objItem In $colItems) { $objItem.path_.class } 新脚本语言 由于以下原因Windows PowerShell 使用它自己的语言而不是重用现有的语言 Windows PowerShell 需要用于管理.NET 对象的语言。该语言需要为使用cmdlet 提供一致的环境。该语言需要支持复杂的任务而不会使简单的任务变得更复杂。 该语言需要与在.NET 编程中使用的高级语言如C#一致。 1、PS1文件 一个PowerShell脚本其实就是一个简单的文本文件这个文件包含了一系列PowerShell命令每个命令显示为独立的一行对于被视为PowerShell脚本的文本文件它的文件名需要使用.PS1扩展。 2、执行权限 为防止 恶意脚本的执行PowerShell有一个执行策略默认情况下这个执行策略被设为受限的Restricted意味着PowerShell脚本无法执行你可以使用下面的cmdlet命令确定当前的执行策略 Get-ExecutionPolicy 你可以选择使用的执行策略有 Restricted - 脚本不能运行。 RemoteSigned - 本地创建的 脚本可以运行但从网上下载的脚本不能运行除非它们拥有由受信任的发布者签署的数字签名。 AllSigned – 仅当 脚本由受信任的发布者签名才能运行。 Unrestricted – 脚本执行不受限制不管来自哪里也不管它们是否有签名。 你可以使用下面的cmdlet命令设置PowerShell的执行策略 Set-ExecutionPolicy policy name 3、 运行脚本 如果你想从命令行运行一个可执行文件多年来一个永恒不变的方法是在命令行转到该执行文件所在的位置然后键入该执行文件的名称但这个古老的方法现在却不能适用于PowerShell可执行 脚本了。 如果你想执行一个PowerShell 脚本通常必须键入完整的路径和文件名例如假设你要运行一个名为a.ps1的脚本你可以键入 C:\Scripts\aps1 最大的例外是如果PowerShell 脚本文件刚好位于你的系统目录中那么你可以直接在 命令提示符后键入脚本文件名即可运行如 .\a.ps1 注意前面需要加上.\这和Linux下执行Shell脚本的方法如出一辙。 4、管道 管道的作用是将一个命令的输出作为另一个命令的输入两个命令或cmdlet之间只需要用管道符号|连接即可。 为了帮助你了解管道是如何工作的我们以一个例子进行说明假设你想创建运行在服务器上的进程列表并按进程的ID号进行排序可以使用Get-Process cmdlet命令获得进程列表但默认情况下列表不会排序如果将这个cmdlet命令的输出用管道输送给Sort-Object ID命令进程列表将会按进程ID号进行排序如 Get-Process | Sort-Object ID 5、 变量 虽然可以使用管道将一个命令的输出输送给另一个命令但管道本身也是有限制的当你用管道从一个命令向另一个命令传递输出结果时输出结果立即被使用但有时候你可能需要保存输出结果一段时间以便以后可以使用或重用这个时候管道就应该下场轮到变量上场了。 人们很容易将 变量想象成一个仓库但在PowerShell中变量可以保存命令的完整输出例如假设你想保存服务器处于运行中的进程列表你可以将它赋给一个变量如 $a Get-Process 在这里 变量被命名为$a如果你想使用这个变量只需要简单地调用它的名称即可例如键入$a便可在 屏幕上打印变量的内容。 你可以将多个用管道连接的命令的最终输出赋给一个 变量只需要用一对小括号将命令括起来即可例如假设你想按进程ID对运行中的进程进行排序然后将结果输出给一个变量你可以使用下面这个命令 $a (Get-Process | Sort-Object ID) 6、符号 通过使用符号你可以将列表内容转换成一个 数组例如下面的代码创建了一个名为$Procs的变量它包含多行文本内容一个数组$procs {nameexplorer,svchost} 使用 变量时你也可以使用符号为了确保它作为 数组而不是单个值处理例如下面的代码将在我前面定义的变量上运行Get-Process cmdlet命令 Get-Process procs Windows将显示 Windows 资源管理器和Svchost使用的所有进程注意 变量前使用的符号而不是常见的$符号。 7、Split Split操作符根据你指定的字符拆分一个文本字符串例如假设你想将一个句子拆分成一个单词组成的一个 数组你可以使用下面的命令做到 This is a test -split 拆分后的结果如下 This is a test 8、Join 就像Split可以将一个文本字符串拆分成多块一样Join的操作则是逆向的将多个独立的块连接成一个整体例如下面这行代码将会创建一个文本字符串由我的名字和姓氏组成 Brien,Posey -join 命令末尾双引号之间的空格告诉Windows在两个文本字符串之间插入一个空格。 9、 断点 运行一个新创建的PowerShell 脚本时如果脚本有Bug会遇到意想不到的后果保护自己的一个方法是在脚本的关键位置插入 断点这样你就可以确保脚本正常运行先然后再处理可能存在的问题。 插入断点最简单的方法是根据 行号插入例如假设你要在第10行插入一个断点可以使用下面的命令 New-PSBreakpoint -Script C:\Scripts\a.ps1 -Line 10 你也可以将 断点绑定到变量上如果你希望你的 脚本任何时候都可以修改a$的内容可以使用下面的命令 New-PSBreakpoint -Script C:\scripts\a.ps1 -variables a 注意我在 变量名后并没有包括美元符号。 可以和PSBreakpoint一起使用的动词包括NewGetEnableDisable和Remove。 10、Step 调试一个 脚本时有时可能需要逐行 运行脚本这时你可以使用Step-Into cmdlet命令它会使脚本一行一行地执行不管有没有设置断点如果你想从这种步进式运行模式退出来使用Step-Out cmdlet命令即可但需要注意的是使用Step-Out cmdlet命令后断点仍然有效。 顺便说一句如果你的 脚本使用了函数你可能对Step-Out cmdlet更感兴趣Step-Out的工作方式和Step-Into一样不过如果调用了一个函数Windows不会逐步执行整个函数将会一次性执行。