




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HYPERLINK"http://www。mossfl/powershell-define-variable.html”\o”Powershell定义变量”Powershell定义变量
HYPERLINK”http://www。mossfly.com/category/programming/powershell"\o"查看Powershell中的全部文章"Powershell,HYPERLINK"http://www。mossfly.com/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK"http://www。mossfly。com/powershell-define—variable。html”帮助0102030405060708091011#定义变量$a=10$b=4#计算变量$result=$a*$b
$msg="保存文本"
#输出变量$result$msg40ﻫ保存文本powershell不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$。
创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中。但是有个例外单引号中的字符串不会识别和处理变量名。选择变量名在powershell中变量名均是以美元符”$"开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感($a和$A是同一个变量).
某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名.当然你硬要使用,请把整个变量名后缀用花括号括起来。赋值和返回值赋值操作符为“=”,几乎可以把任何数据赋值给一个变量,甚至一条cmdlet命令ﻫ,为什么,因为Powershell支持对象,对象可以包罗万象。给多个变量同时赋值赋值操作符不仅能给一个变量赋值,还可以同时给多个变量赋相同的值。交换变量的值要交换两个变量的值,传统的程序语言至少需要三步,并且还需定义一个中间临时变量。在powershell中,交换两个变量的值,这个功能变得非常简单。查看正在使用的变量Powershell将变量的相关信息的记录存放在名为variable:的驱动中.如果要查看所有定义的变量,可以直接遍历variable:查找变量因为有虚拟驱动variable:的存在,可以象查找文件那样使用通配符查找变量。例如要查询以value打头的变量名.验证变量是否存在验证一个变量是否存在,仍然可以象验证文件系统那样,使用cmdletTest-Path.为什么?因为变量存在变量驱动器中。删除变量因为变量会在powershell退出或关闭时,自动清除.一般没必要删除,但是你非得删除,也可以象删除文件那样删除它。使用专用的变量命令为了管理变量,powershell提供了五个专门管理变量的命令Clear-Variable,Get—Variable,New—Variable,Remove—Variable,Set—Variable。因为虚拟驱动器variable:的存在,clear,remove,set打头的命令可以被代替。但是Get—Variable,New—Variable。却非常有用new—variable可以在定义变量时,指定变量的一些其它属性,比如访问权限。同样Get—Variable也可以获取这些附加信息.变量写保护可以使用New-Variable的option选项在创建变量时,给变量加上只读属性,这样就不能给变量重新赋值了。但是可以通过删除变量,再重新创建变量更新变量内容。有没有权限更高的变量,有,那就是:选项Constant,常量一旦声明,不可修改变量描述在New—Variable可以通过—description添加变量描述,但是变量描述默认不会显示,可以通过Format—List查看.HYPERLINK"http://www。moss/powershell—automatic-variables。html"\o"Powershell自动化变量"Powershell自动化变量
HYPERLINK”http://www。mossfly。com/category/programming/powershell"\o”查看Powershell中的全部文章”Powershell,HYPERLINK"http://www。mossf/category/programming”\o"查看程序设计中的全部文章”程序设计
HYPERLINK"http://www。mossfly.com/powershell-automatic-variables.html”\l"respond"添加评论十二072011
Powershell自动化变量是那些一旦打开Powershell就会自动加载的变量。ﻫ这些变量一般存放的内容包括ﻫ用户信息:例如用户的根目录$home
配置信息:例如powershell控制台的大小,颜色,背景等。ﻫ运行时信息:例如一个函数由谁调用,一个脚本运行的目录等。powershell中的某些自动化变量只能读,不能写。例如:$Pid。
可以通过Get—Helpabout_Automatic_variables查看Automatic_variables的帮助。
TOPIC
about_Automatic_Variables主题ﻫabout_Automatic_Variables简短说明
说明存储WindowsPowerShell状态信息的变量。
这些变量由WindowsPowerShell创建并维护。详细说明
下面是WindowsPowerShell中的自动变量的列表:$$
包含会话所收到的最后一行中的最后一个令牌.$?ﻫ包含最后一个操作的执行状态。如果最后一个操作成功,则包含TRUE,失败则包含FALSE。$^
包含会话所收到的最后一行中的第一个令牌。$_
包含管道对象中的当前对象。在对管道中的每个对象或所选对象执行操作的命令中,可以使用此变量.$Args
包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组.ﻫ在创建函数时可以声明参数,方法是使用param关键字或在函数名称后添加以圆括号括起、逗号
分隔的参数列表。$ConsoleFileNameﻫ包含在会话中最近使用的控制台文件(。psc1)的路径.在通过PSConsoleFile参数启动ﻫWindowsPowerShell或使用Export-Consolecmdlet将管理单元名称导出到控制台文件ﻫ时,将填充此变量。在使用不带参数的Export—Consolecmdlet时,它自动更新在会话中最近使用的控制台文件.ﻫ可以使用此自动变量确定要更新的文件。$Errorﻫ包含错误对象的数组,这些对象表示最近的一些错误。最近的错误是该数组中的第一个错误对象ﻫ($Error[0])。$Eventﻫ包含一个PSEventArgs对象,该对象表示一个正在被处理的事件。
此变量只在事件注册命令(例如Register-ObjectEvent)的Action块内填充。
此变量的值是Get-Eventcmdlet返回的同一个对象。
因此,可以在Action脚本块中使用$Event变量的属性(例如
$Event.TimeGenerated)。$EventSubscriber
包含一个PSEventSubscriber对象,该对象表示正在被处理的事件的事件订阅者。
此变量只在事件注册命令的Action块内填充。此变量的值ﻫ是Get—EventSubscribercmdlet返回的同一个对象。$ExecutionContext
包含一个EngineIntrinsics对象,该对象表示WindowsPowerShell主机的执行上下文。ﻫ可以使用此变量来查找可用于cmdlet的执行对象。$Falseﻫ包含FALSE。可以使用此变量在命令和脚本中表示FALSE,而不是使用字符串”false”。如果
该字符串转换为非空字符串或非零整数,则可将该字符串解释为TRUE。$ForEach
包含ForEach-Object循环的枚举数。可以对$ForEach变量的值使用枚举数的属性和方法.
此变量仅在运行For循环时存在,循环完成即会删除。$Home
包含用户的主目录的完整路径。此变量等效于%homedrive%%homepath%环境变量。$Hostﻫ包含一个对象,该对象表示WindowsPowerShell的当前主机应用程序。可以使用此变量在命ﻫ令中表示当前主机,或者显示或更改主机的属性,如$Host。version、$Host.CurrentCulture
或$host.ui。rawui.setbackgroundcolor(“Red”)。$Input
一个枚举数,它包含传递给函数的输入。$Input变量区分大小写,只能用于函数和脚本块。(脚
本块本质上是未命名的函数.)在函数的Process块中,$Input变量包含当前位于管道中的对ﻫ象.在Process块完成后,$Input的值为NULL。如果函数没有Process块,则$Inputﻫ的值可用于End块,它包含函数的所有输入。$LastExitCodeﻫ包含运行的最后一个基于Windows的程序的退出代码。$Matchesﻫ$Matches变量与-match和—notmatch运算符一起使用。ﻫ将标量输入提交给-match或—notmatch运算符时,如果检测到匹配,则会返回一个布尔值,ﻫ并使用由所有匹配字符串值组成的哈希表填充$Matches自动变量。有关—match运算符的详细
信息,请参阅about_comparison_operators。$MyInvocation
包含一个对象,该对象具有有关当前命令(如脚本、函数或脚本块)的信息。可以使用该对象中的ﻫ信息(如脚本的路径和文件名($myinvocation.mycommand.path)或函数的名称
($myinvocation.mycomman))来标识当前命令。对于查找正在运行的脚本的名称,这非常有用。$NestedPromptLevel
包含当前提示级别。值0指示原始提示级别。该值在进入嵌套级别时递增,在退出嵌套级别时递减。例如,在使用$Host.EnterNestedPrompt方法时,WindowsPowerShell会出现嵌套命令
提示符.在WindowsPowerShell调试程序中到达断点时,WindowsPowerShell也会出现嵌ﻫ套命令提示符.在进入嵌套提示时,WindowsPowerShell暂停当前命令,保存执行上下文,并递增
$NestedPromptLevel变量的值。要创建更多嵌套命令提示符(最多128级)或返回到原始命
令提示符,请完成命令,或键入”exit”.$NestedPromptLevel变量有助于跟踪提示级别。可以创建包含此值的备用WindowsﻫPowerShell命令提示符,以使此值始终可见。$NULLﻫ包含NULL或空值。可以在命令和脚本中使用此变量表示NULL,而不是使用字符串”NULL"。ﻫ如果该字符串转换为非空字符串或非零整数,则可将该字符串解释为TRUE.$PID
包含承载当前WindowsPowerShell会话的进程的进程标识符(PID)。$Profileﻫ包含当前用户和当前主机应用程序的WindowsPowerShell配置文件的完整路径。可以在命令ﻫ中使用此变量表示配置文件。例如,可以在命令中使用此变量确定是否已创建某个配置文件:test-path$profile也可以在命令中使用此变量创建配置文件:new-item—typefile-path$pshome—force此外,还可以在命令中使用此变量在记事本中打开配置文件:notepad$profile$PSBoundParametersﻫ包含活动参数及其当前值的字典.只有在声明参数的作用域(如脚本或函数)中,
此变量才有值。可以使用此变量显示或更改参数的当前值,也可以将参数值传递给
其他脚本或函数。例如:functiontest{ﻫparam($a,$b)#Displaytheparametersindictionaryformat。ﻫ$psboundparameters#CalltheTest1functionwith$aand$b.
test1@psboundparametersﻫ}$PsCmdlet
包含一个对象,该对象表示正在运行的cmdlet或高级函数。可以在cmdlet或函数代码中使用该对象的属性和方法来响应使用的条件.例如,
ParameterSetName属性包含正在使用的参数集的名称,而ShouldProcess方法将WhatIf
和Confirm参数动态添加到cmdlet.有关$PSCmdlet自动变量的详细信息,请参阅about_Functions_Advanced.$PsCultureﻫ包含操作系统中当前所用的区域性的名称。区域性确定数字、货币和日期等项的显示格式.这是系ﻫ统的System.Globalization。CultureInfo。CurrentCulture.Name属性的值。要获取系统
的System。Globalization.CultureInfo对象,请使用Get—Culturecmdlet。$PSDebugContextﻫ在调试期间,此变量包含有关调试环境的信息.在其他时间,此变量包含NULL值.因此,可以使ﻫ用此变量指示调试程序是否拥有控制权。填充之后,此变量包含一个具有Breakpoints和ﻫInvocationInfo属性的PsDebugContext对象。InvocationInfo属性有多个十分有用的
属性,包括Location属性。Location属性指示正在调试的脚本的路径。$PsHome
包含WindowsPowerShell的安装目录的完整路径(通常为ﻫ%windir%\System32\WindowsPowerShell\v1。0)。可以在WindowsPowerShell文件ﻫ的路径中使用此变量。例如,下面的命令在概念性帮助主题中搜索”variable”一词:select-string—patternvariable—path$pshome\*.txt$PSScriptRoot
包含要从中执行脚本模块的目录.
通过此变量,脚本可以使用模块路径来访问其他资源。$PsUICulture
包含操作系统中当前所用的用户界面(UI)区域性的名称。UI区域性确定哪些文本字符串用于用户ﻫ界面元素(如菜单和消息)。这是系统的ﻫSystem。Globalization.CultureInfo.CurrentUICulture。Name属性的值。要获取系统
的System。Globalization。CultureInfo对象,请使用Get-UICulturecmdlet。$PsVersionTableﻫ包含一个只读哈希表,该哈希表显示有关在当前会话中运行的WindowsPowerShell版本的详ﻫ细信息.
该表包括下列项:CLRVersion:公共语言运行时(CLR)的版本BuildVersion:当前版本的内部版本号PSVersion:WindowsPowerShell版本号WSManStackVersion:WS—Management堆栈的版本号PSCompatibleVersions:与当前版本兼容的WindowsPowerShell版本SerializationVersion序列化方法的版本PSRemotingProtocolVersion
WindowsPowerShell远程管理协议的版本$Pwd
包含一个路径对象,该对象表示当前目录的完整路径.$Senderﻫ包含生成此事件的对象。此变量只在事件注册命令的Action块内填充。ﻫ此变量的值也可在Get—Event返回的PSEventArgsﻫ(System。Management.Automation.PSEventArgs)对象的Sender属性中找到.$ShellIDﻫ包含当前shell的标识符。$SourceArgsﻫ包含表示正在被处理的事件的事件参数的对象。此变量只在事件注册命令的Actionﻫ块内填充。此变量的值也可在Get—Event返回的PSEventArgsﻫ(System.Management.Automation。PSEventArgs)对象的SourceArgs属性中找到。$SourceEventArgsﻫ包含一个对象,该对象表示从正在被处理的事件的EventArgs中派生出的ﻫ第一个事件参数。此变量只在事件注册命令的Action块内填充。
此变量的值也可在Get-Event返回的PSEventArgs
(System.Management.Automation。PSEventArgs)对象的SourceArgs属性中找到。$Thisﻫ在定义脚本属性或脚本方法的脚本块中,$This变量引用要扩展的对象。$True
包含TRUE。可以在命令和脚本中使用此变量表示TRUE。另请参阅ﻫabout_Hash_Tablesﻫabout_Preference_Variables
about_Variables\o”Powershell通过函数扩展别名”Powershell通过函数扩展别名
HYPERLINK”http://www.mossfly。com/category/programming/powershell"\o"查看Powershell中的全部文章”Powershell,HYPERLINK”http://www.mossfly.com/category/programming"\o”查看程序设计中的全部文章"程序设计
HYPERLINK"http://www.mossfl/powershell—extend—alias—by—function。html"添加评论十一252011
在Powershell中设置别名的确方便快捷,但是在设置别名的过程中并设置参数的相关信息。尽管别名会自动识别参数,但是如何把经常使用的参数默认设定在别名里面呢?例如Test-Connection-Count2-ComputerName,让-"-Count2″固化在别名中。ﻫ这时简单的别名无法完成上述需求,可以通过函数来完成它,并且一旦把函数拉过来,定义别名会变得更加灵活。有了函数牵线,别名可以完成更高级更强大的功能,其中$args为参数的占位符,经测试,发现这个占位符必须以$args命名,否则不能识别,会抛出异常:ﻫCannotvalidateargumentonparameter‘ComputerName’。Theargumentisnullorempty。Supplyanargﻫntthatisnotnulloremptyandthentrythecommandagain.HYPERLINK"http://www.mossfly.com/powershell—quickedit—mode-and-stand—ard-mode。html"\o”Powershell快速编辑模式和标准模式”Powershell快速编辑模式和标准模式
HYPERLINK”http://www.mossfly。com/category/programming/powershell”\o"查看Powershell中的全部文章"Powershell,HYPERLINK”http://www。mo/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK”http://www.mossfly.com/powershell-quickedit—mode-and-stand-ard-mode。html”\o”查看Powershell中的全部文章"Powershell,HYPERLINK”http://www。mossfly。com/category/programming”\o”查看程序设计中的全部文章”程序设计
HYPERLINK"http://www.mossfly.com/powershell-customize—the—console。html"\l”respond”添加评论十一232011
右击标题栏选择"属性”弹出powershell控制台对话框。
在这里有三个四个选项卡:选项、字体、布局和颜色。
“选项”设置光标,历史记录,编辑模式的切换。“字体”设置字体的名称和大小“布局”设置窗口的缓冲区、窗口的大小、窗口起始坐标“颜色”设置屏幕和对话框的背景色和前景色.HYPERLINK"http://www。mossfly.com/powershell—foreach-loop。html"\o”PowershellForeach循环”PowershellForeach循环
HYPERLINK"http://www.mossfly.com/category/programming/powershell”\o"查看Powershell中的全部文章"Powershell,HYPERLINK"http://www.mossf/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK"http://www。mossfly。com/powershell-foreach-loop。html"\o”查看Powershell中的全部文章"Powershell,HYPERLINK”http://www.mossfly。com/category/programming"\o"查看程序设计中的全部文章"程序设计
HYPERLINK”http://www.mossfly.com/powershell—formulating-conditions。html"\l”respond”添加评论一162012
Powershell中的比较运算符
-eq:等于
-ne:不等于ﻫ—gt:大于
—ge:大于等于ﻫ-lt:小于
—le:小于等于
-contains:包含ﻫ-notcontains:不包含进行比较可以将比较表达式直接输入进Powershell控制台,然后回车,会自动比较并把比较结果返回。求反求反运算符为—not但是像高级语言一样”!“也支持求反.布尔运算-and:和ﻫ—or:或
—xor:异或
—not:逆比较数组和集合过滤数组中的元素验证一个数组是否存在特定元素HYPERLINK”http://www。mossfly。com/powershell-where-object。html"\o”PowershellWhere-Object条件过滤"PowershellWhere—Object条件过滤
HYPERLINK"http://www.mossf/category/programming/powershell”\o”查看Powershell中的全部文章"Powershell,HYPERLINK”http://www.m/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK”http://www.mossfl/powershell—where—object。html”\l”respond”添加评论一172012
本篇会对条件判断进行实际应用。在管道中可以通过条件判断过滤管道结果,Where-Object会对集合逐个过滤,将符合条件的结果保留.过滤管道结果使用Get-Process返回所有的当前进程,但是你可能并不对所有的进程感兴趣,然后通过每个Process对象的属性进行过滤。首先得知道每个对象支持那些属性。根据进程名过滤所有记事本进程.根据进程名过滤所有IE进程.根据company过滤所有产品发布者以”Microsoft”打头的进程:使用别名因为Where-Object的使用概率比较高,所以有一个很形象的别名?可以使用:HYPERLINK”http://ww/powershell—foreach-object-loop。html"\o”PowershellForEach-Object循环"PowershellForEach-Object循环
HYPERLINK"http://www.moss/category/programming/powershell”\o”查看Powershell中的全部文章”Powershell,HYPERLINK"http://www。mossf/category/programming"\o"查看程序设计中的全部文章”程序设计
HYPERLINK”http://www。mossfly.com/powershell—foreach-object—loop。html"\l”respond”添加评论一222012
Powershell管道就像流水线,对于数据的处理是一个环节接着一个环节,如果你想在某一环节对流进来的数据逐个细致化的处理,可是使用ForEach—Object,$_代表当前的数据。对管道对象逐个处理如果使用Get—WmiObject获取系统中的服务,为了排版可能会也会使用Format-Table对结果进行表格排版.但是如果想对每个服务进行更定制化的处理可是使用ForEach—Object结合条件处理ForEach-Object的处理可以包含任意Powershell脚本,当然也包括条件语句HYPERLINK”http://www。mossfly.com/powershell-foreach-object-loop。html”帮助1234Get-WmiObjectWin32_Service|ForEach-Object{
if($_。ProcessId-gt3000)
{”{0}({1})"—f$_.DisplayName,$_。ProcessID}}调用方法在ForEach—Object中,$_代表当前对象,当然也允许通过$_,调用该对象支持的方法.
下面的例子杀死所有IE浏览器进程:Get-Process:找不到名为“iexplore"的进程.请验证该进程名称,然后再次调用cmdlet。ﻫ所在位置行:1字符:12
+Get-Process〈〈<〈iexploreﻫ+CategoryInfo:ObjectNotFound:(iexplore:String)[Get-Process],ﻫProcessCommandExceptionﻫ+FullyQualifiedErrorId:NoProcessFoundForGivenName,Microsoft.PowerShell。
Commands。GetProcessCommandHYPERLINK”http://www。mossfly.com/powershell—alias。html"\o"Powershell别名”Powershell别名
HYPERLINK"http://www。mossfly.com/category/programming/powershell”\o"查看Powershell中的全部文章”Powershell,HYPERLINK”http://www.mossfly.com/category/programming"\o”查看程序设计中的全部文章"程序设计
HYPERLINK”http://www.mossfly.com/powershell—alias.html”添加评论十一242011
cmdlet的名称由一个动词和一个名词组成,其功能对用户来讲一目了然。但是对于一个经常使用powershell命令的人每天敲那么多命令也很麻烦啊。能不能把命令缩短一点呢?于是“别名”就应运而生了.Powershell内部也实现了很多常用命令的别名.例如Get-ChildItem,列出当前的子文件或目录.它有两个别名:ls和dir,这两个别名来源于unix的shell和windows的cmd。ﻫ因此别名有两个作用:继承:继承unix—shell和windows—cmd。方便:方便用户使用.处理别名:查询别名所指的真实cmdlet命令。查看可用的别名
查看可用的别名,可以通过"lsalias:"或者"Get—Alias“ﻫ如何查看所有以Remove打头的cmdlet的命令?说明:diralias:获取的是别名的数组,通过where对数组元素进行遍历,$_代表当前元素,alias的Definition为String类型,因为powershell支持.net,.net中的string类有一个方法Startswith.通过where过滤集合在powershell中使用非常广泛。有的cmdlet命令可能有2-3个别名,我们可以通过下面的命令查看所有别名和指向cmdlet的别名的个数.创建自己的别名ﻫ给记事本创建一个别名,并查看该别名;删除自己的别名
别名不用删除自定义的别名在powershell退出时会自动清除.但是请放心,powershell内置别名(诸如ls,dir,fl等)不会清除。如果你非得手工删除别名.请使用保存自己的别名
可以使用Export—Alias将别名导出到文件,需要时再通过Import-Alias导入.但是导入时可能会有异常,提示别名已经存在无法导入:PSC:\www.mossfly。com〉Import-Aliasalias。ps1Import—Alias:Aliasnotallowedbecauseanaliaswiththename'ac’alreadyexists。Atline:1char:13+Import-Alias〈<〈〈alias。ps1+CategoryInfo:ResourceExists:(ac:String)[Import-Alias],SessionStateException+FullyQualifiedErrorId:AliasAlreadyExists,Microsoft.PowerShell.Commands。ImportAliasCommand这时可以使用Force强制导入。HYPERLINK”http://www.mossfly.com/powershell-as-a—calculator.html”\o”Powershell进行数学运算”Powershell进行数学运算
HYPERLINK”http://www.mossfly.com/category/programming/powershell"\o"查看Powershell中的全部文章"Powershell,HYPERLINK”http://www。mossfly.com/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK"http://www。m/powershell-as-a—calculator.html"\l”respond"添加评论十一242011
我们可以把powershell当成一个计算器。象键入命令行那样输入数学表达式,回车,powershell会自动计算并把结果输出.常用的加减乘除模(+,-,*,/,%)运算和小括号表达式都支持。ﻫpowershell也能自动识别计算机容量单位,包括KB,MB,GB,TB,PB假如一个网站每个页面大小为80kb,统计显示每天的PV操作为800,1个月下来占用的带宽:假如一个网站的每天人均PV操作为5,页面大小为80Kb,主机提供商限制的总流量为10G,那平均每天的最大访客数为:HYPERLINK”http://www.mossfly.com/powershell—keyboard—shortcuts。html"\o”Powershell快捷键"Powershell快捷键
HYPERLINK”http://www。mossfly.com/category/programming/powershell"\o"查看Powershell中的全部文章”Powershell,HYPERLINK"http://www。moss/category/programming”\o"查看程序设计中的全部文章”程序设计
HYPERLINK”http://www.mossfly.com/powershell-keyboard-shortcuts.html”\l”respond"添加评论十一232011
Powershell的快捷键和cmd,linux中的shell,都比较像。ALT+F7清除命令的历史记录PgUpPgDn显示当前会话的第一个命令和最后一个命令Enter执行当前命令End将光标移至当前命令的末尾Del从右开始删除输入的命令字符Esc清空当前命令行F2自动补充历史命令至指定字符ﻫ(例如历史记录中存在Get-Process,按F2,提示"Enterchartocopyupto”,键入‘s',自动补齐命令:Get-Proce)F4删除命令行至光标右边指定字符处F7对话框显示命令行历史记录F8检索包含指定字符的命令行历史记录F9根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看左/右方向键左右移动光标上/下方向键切换命令行的历史记录Home光标移至命令行最左端Backspace从右删除命令行字符Ctrl+C取消正在执行的命令Ctrl+左/右方向键在单词之间移动光标Ctrl+Home删除光标最左端的所有字符Tab自动补齐命令或者文件名HYPERLINK"http://www。mossfly。com/powershell—do-while—loop。html"\o"PowershellDoWhile循环”PowershellDoWhile循环
HYPERLINK”http://www.mossfly.com/category/programming/powershell"\o"查看Powershell中的全部文章”Powershell,HYPERLINK"http://www.mossfly.com/category/programming”\o"查看程序设计中的全部文章”程序设计
HYPERLINK"http://www。mossfly。com/powershell-do-while—loop。html"\l”respond”添加评论一242012
Do和While可能产生死循环,为了防止死循环的发生,你必须确切的指定循环终止的条件.指定了循环终止的条件后,一旦条件不满足就会退出循环.继续与终止循环的条件do—while()会先执行再去判断,能保证循环至少执行一次。单独使用While终止当前循环使用continue关键字,可是终止当前循环,跳过continue后其它语句,重新下一次循环。HYPERLINK”http://www。mossfly。com/powershell-do-while—loop.html"帮助01020304050607080910111213141516171819$n=1while($n-lt6){
if($n-eq4)
{
$n=$n+1
continue
}
else
{
$n
}
$n=$n+1}1235跳出循环语句跳出循环语句使用break关键字HYPERLINK"http://www.mossfly.com/powershell—do-while-loop.html"帮助01020304050607080910$n=1while($n-lt6){
if($n—eq4)
{
break
}
$n
$n++}HYPERLINK”http://www。mo/powershell-if-else—condition.html"\o”PowershellIF-ELSEIF-ELSE条件"PowershellIF-ELSEIF-ELSE条件
HYPERLINK"http://www。mossfl/category/programming/powershell"\o"查看Powershell中的全部文章”Powershell,HYPERLINK”http://www.mossfly.com/category/programming"\o”查看程序设计中的全部文章"程序设计
HYPERLINK"http://www.mossfly。com/powershell—if—else—condition.html”添加评论一182012
Where—Object进行条件判断很方便,如果在判断后执行很多代码可以使用IF—ELSEIF—ELSE语句。语句模板:If(条件满足){ﻫ如果条件满足就执行代码
}ﻫElse
{
如果条件不满足ﻫ}
条件判断必须放在圆括号中,执行的代码必须紧跟在后面的花括号中。HYPERLINK"http://www。mossfly。com/powershell-switch-loop。html”\o”PowershellSwitch循环”PowershellSwitch循环
HYPERLINK”http://www.mossfly。com/category/programming/powershell"\o”查看Powershell中的全部文章”Powershell,HYPERLINK”http://www。mossfly.com/category/programming"\o”查看程序设计中的全部文章"程序设计
HYPERLINK”http://www.mossfly.com/powershell—switch-loop.html"\l”respond"添加评论一262012
Switch本是多路分支的关键字,但是在Powershell中由于Switch支持集合,所以也可以使用它进行循环处理。下面举两个例子。
第一个将Foreach循环转换成Switch循环:帮助01020304050607080910111213141516171819202122#使用Foreach循环$nums=10.。7foreach($nin$nums){
”n=$n”}n=10n=9n=8n=7
#使用Switch循环$nums=10.。7Switch($nums){Default{"n=$_"}}
n=10n=9n=8n=7有时对集合的处理,在循环中还须条件判断,使用Switch循环可以一部到位,例如:HYPERLINK"http://www。mossfly.com/powershell-switch-loop.html”帮助0102030405060708091011$nums=10。.7Switch($nums){
{($_%2)—eq0}{"$_偶数”}
{($_%2)—ne0}{”$_基数”}}
10偶数9基数8偶数7基数HYPERLINK”http://www.mossfly.com/powershell—switch-condition。html"\o"PowershellSwitch条件"PowershellSwitch条件
HYPERLINK"http://www.mossfly.com/category/programming/powershell”\o”查看Powershell中的全部文章"Powershell,HYPERLINK"http://www.mossfl/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK"http://www。mossfly。com/powershell-switch—condition.html"\l”respond”添加评论一212012
如果语句中有多路分支,使用IF-ELSEIF-ELSE不友好,可以使用Switch,看起来比较清爽一点。ﻫ下面的例子将If—ElseIF-Else转换成Switch语句HYPERLINK”http://www。mossfly.com/powershell-switch—condition.html"帮助0102030405060708091011121314151617181920212223242526#使用IF—ElseIF—ElseIf($value—eq1){
”Beijing”}Elseif($value-eq2){
”Shanghai"}Elseif($value—eq3){
”Tianjin”}Else{
”Chongqing"}
#使用Switchswitch($value){
1{"Beijing”}
2{”Shanghai"}
3{"Tianjin”}
4{"Chongqing”}}HYPERLINK"http://www./powershell-switch—condition.html"帮助1
测试取值范围使用Switch时缺省的比较运算符为—eq等于,你也可以自己定制比较条件,将条件放在花括号中,必须保证条件表达式的返回值为布尔类型”$True"或”$False"HYPERLINK”http://www.mossfly。com/powershell—switch—condition.html”帮助01020304050607080910$value=18#使用Switch测试取值范围switch($value){
{$_-lt10}{”小于10"}
10
{”等于10"}
{$_
—gt10}{”大于10"}}#输出#大于10没有匹配条件在IF—Else语句中如果没有合适的条件匹配,可以在Else中进行处理,同样在Switch语句中如果case中没有条件匹配,可以使用关键字Default进行处理。
同样是上面的例子,稍加修改:HYPERLINK"http://www。mossfly.com/powershell—switch—condition.html"帮助0102030405060708091011$value=—7#使用Switch测试取值范围switch($value){
{($_-lt10)—and($_—gt0)}
{"小于10”}
10
{"等于10"}
{$_
—gt10}{”大于10"}
Default{”没有匹配条件"}}#Output:#没有匹配条件多个条件匹配如果case中有多个条件匹配,那么每个匹配的条件都会进行处理,例如:HYPERLINK”http://www.mossfly.com/powershell—switch-condition.html”帮助01020304050607080910111213$value=2#使用Switch测试取值范围switch($value){
{$_—lt5}
{"小于5"}
{$_-gt0}
{”大于0”}
{$_-lt100}{”小于100"}
Default{”没有匹配条件"}}
#小于5#大于0#小于100如果碰到匹配条件时只处理一次,可以使用Break关键字HYPERLINK"http://www.mossfl/powershell—switch—condition.html"帮助0102030405060708091011$value=99#使用Switch测试取值范围switch($value){
{$_-lt5}
{”小于5";break}
{$_—gt0}
{”大于0";break}
{$_-lt100}
{"小于100";break}
Default{”没有匹配条件"}}
#大于0比较字符串之前的条件比较的都是数字,接下来比较字符串,默认的条件判断为-eq,我们知道在Powershell中字符串的使用-eq比较大小写不敏感,所以才有下面的例子:HYPERLINK”http://www。mossfly.com/powershell-switch—condition。html"帮助01020304050607080910$domain="www.mossf”switch($domain){
”Www.moSSfly。com”{”Ok1"}
"www.MOSSFLY.com"{”Ok2”}
”WWW.mossfly。COM”{”Ok3"}}Ok1Ok2Ok3大小写敏感怎样在比较字符串时能够恢复为大小写敏感模式,Switch有一个—case选项,一旦指定了这个选项,比较运算符就会从—eq切换到-ceq,即大小写敏感比较字符串:HYPERLINK”http://www。mossfly.com/powershell-switch-condition。html"帮助123456789$domain="www.mossfly.com”#大小写敏感switch—case($domain){
"Www.moSSfly。com"{"Ok1"}
”www。MOSSFLY。com”{”Ok2"}
"www.”{”Ok3"}}#Ok3使用通配符字符串非常特殊,可是使用通配符,幸运的是Powershell也支持,果然Power啊。但是在Switch语句后要指定—wildcard选项HYPERLINK”http://www.m/powershell-switch—condition。html”帮助0102030405060708091011$domain=”www。mossfl”#使用通配符switch—wildcard($domain){
"*”
{”匹配'*’"}
"*.com”{”匹配*。com"}
”*。*。*"{”匹配*。*。*"}}匹配’*'匹配*.com匹配*.*。*在字符串匹配中,比通配符功能更强大是正则表达式,Powershell的Switch语句也支持,真是太棒了。当然需要给Switch关键字指定选项-regexHYPERLINK"http://www。moss/powershell-switch-condition.html”帮助0102030405060708091011$mail=”www@mossfly。com”#使用通配符switch-regex($mail){
”^www”
{”www打头"}
”com$"
{"com结尾”}
”\d{1,3}\。\d{1,3}\。\d{1,3}\。\d{1,3}"{"IP地址"}}
#www打头#com结尾同时处理多个值Switch支持对集合所有元素进行匹配,下面的例子使用PowershellSwitch语句演示打印水仙花数:HYPERLINK"http://www。m/powershell—switch-condition.html"帮助01020304050607080910$value=100.。999switch($value){{[Math]::Pow($_%10,3)+[Math]::Pow([Math]::Truncate($_%100/10),3)+[Math]::Pow([Math]::Truncate($_/100),3)-eq$_}{$_}}
#153#370#371HYPERLINK"http://www.moss/powershell—invoking-files-and—scripts。html”\o”Powershell执行文件和脚本”Powershell执行文件和脚本
HYPERLINK"http://www。mossf/category/programming/powershell"\o”查看Powershell中的全部文章”Powershell,HYPERLINK”http://www。mossfly.com/category/programming"\o"查看程序设计中的全部文章”程序设计
添加评论十一282011
象运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中.关于脚本脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码.执行批处理文件批处理是扩展名为”.bat”的文本文件,它可以包含任何cmd控制台能够处理的命令。当批处理文件被打开,Cmd控制台会逐行执行每条命令。那Powershell能够直接执行批处理吗?
将下列命令保存为ping.bat@echooffechobatchFileTestpauseDir%windir%\system然后执行ping
屏幕会打印ping命令帮助,说明掉用的pingcmd而不是ping.bat。
改为:这时运行的是批处理。通过cmd进入cmd控制台输入ping发现执行的不是ping命令,而是直接运行ping.bat,也就是说可以通过。bat覆盖cmd命令。这种机制很危险,如果有人侵入电脑,并将系统内部命令篡改成自己批处理,那就太悲剧了。这种命令与脚本的混淆不会发生在powershell中,因为powershell有更安全的机制.执行VB脚本文件将下列命令保存为test。vbsSetwmi=GetObject(”winmgmts:")Setcollection=wmi.ExecQuery("select*fromWin32_Process")ForEachprocessincollectionWScript。Echoprocess。getObjectText_Next执行.\test。vbs会遍历当前Win32进程,并把每个进程的详细信息通过窗口显示出来。
怎样让VB脚本的通过控制台输出呢?
Wscript//H:CScriptﻫ怎样还原VB脚本通过窗口输出呢?ﻫWScript//H:WScript
在powershell中执行VB脚本执行powershell脚本Powershell拥有自己的脚本,扩展名为“。ps1”初次执行脚本时,可能会碰到一个异常:
File"C:\www.mossftest。ps1″cannotbeloadedbecausetheexecutionofscriptsisdisabledonthissystem。Pleasesee“get-helpabout_signing”formoredetails.Atline:1char:10+。\test。ps1〈〈〈<这是powershell的默认安全设置禁用了执行脚本,要启用这个功能需要拥有管理员的权限。ﻫ这里有详细解释:http://www.mossfly。com/file—cannot—be—loaded-because—the—execution—of—scripts—is-disabled—on—this—system-error—in-powershell.htmlPowershell调用入口的优先级别名:控制台首先会寻找输入是否为一个别名,如果是,执行别名所指的命令。因此我们可以通过别名覆盖任意powershell命令,因为别名的优先级最高。函数:如果没有找到别名,会继续寻找函数,函数类似别名,只不过它包含了更多的powershell命令.因此可以自定义函数扩充cmdlet把常用的参数给固化进去。命令:如果没有找到函数,控制台会继续寻找命令,即cmdlet,powershell的内部命令.脚本:没有找到命令,继续寻找扩展名为“.ps1”的Powershell脚本。文件:没有找到脚本,会继续寻找文件,如果没有可用的文件,控制台会抛出异常.
Theterm‘now'isnotrecognizedasthenameofacmdlet,function,scriptfile,oroperableprogram。Checgofthename,orifapathwasincluded,verifythatthepathiscorrectandtryagain.Atline:1char:4+now<<<<+CategoryInfo:ObjectNotFound:(now:String)[],CommandNotFoundException+FullyQualifiedErrorId:CommandNotFoundExceptionHYPERLINK"http://www.mossfly。com/powershell—executing—external—commands.html”\o”Powershell执行外部命令”Powershell执行外部命令
HYPERLINK"http://www.mossf/category/programming/powershell"\o"查看Powershell中的全部文章”Powershell,HYPERLINK”http://www。mossfly。com/category/programming"\o”查看程序设计中的全部文章”程序设计
HYPERLINK”/powershell—executing—external—commands。html”helpAdd-ContentMicrosoft。PowerShell。ManagementHYPERLINK”http://go.microsoft.com/fwlink/?LinkID=113278”helpAdd—HistoryMicrosoft.PowerShell.CoreHYPERLINK”http://go.microsoft.com/fwlink/?LinkID=113279”helpAdd—MemberMicrosoft.PowerShell.UtilityHYPERLINK”http://go.microsoft。com/fwlink/?LinkID=113280”helpAdd-PSSnapinMicrosoft。PowerShell.CoreHYPERLINK”http://go.microsoft.com/fwlink/?LinkID=113281"helpAdd-TypeMicrosoft.PowerShell。UtilityHYPERLINK"http://go.microsoft.com/fwlink/?LinkID=135195”helpCheckpoint-ComputerMicrosoft。PowerShell。ManagementHYPERLINK”http://go.micr/fwlink/?LinkID=135197"helpClear—ContentMicrosoft.PowerShell.ManagementHYPERLINK”http://go。microsoft。com/fwlink/?LinkID=113282"helpClear-EventLogMicrosoft.PowerShell。ManagementHYPERLINK”http://go.microsoft.com/fwlink/?LinkID=135198”helpClear—HistoryMicrosoft。PowerShell。CoreHYPERLINK”http://go。microsoft。com/fwlink/?LinkID=135199”helpClear-ItemMicrosoft.PowerShell。ManagementHYPERLINK"http://go。microsoft。com/fwlink/?LinkID=113283"helpClear—ItemPropertyMicrosoft.PowerShell。ManagementHYPERLINK"http://go。microso/fwlink/?LinkID=113284"helpClear-VariableMicrosoft.PowerShell。UtilityHYPERLINK”http://go.microsoft。com/fwlink/?LinkID=113285"helpCompare—ObjectMicrosoft。PowerShell.UtilityHYPERLINK”http://go.microsof/fwlink/?LinkID=113286"helpComplete—TransactionMicrosoft.PowerShell。ManagementHYPERLINK"http://go。microsoft.com/fwlink/?LinkID=135200”helpConnect—WSManMicrosoft。WSMan.ManagementHYPERLINK"http://go。microsoft.com/fwlink/?LinkId=141437”helpConvertFrom—CsvMicrosoft.PowerShell.UtilityHYPERLINK”http://go.microsoft.com/fwlink/?LinkID=135201"helpConvertFrom—SecureStringMicrosoft.PowerShell.SecurityHYPERLINK"http://go.microsoft.com/fwlink/?LinkID=113287"helpConvertFrom-StringDataMicrosoft。PowerShell.UtilityHYPERLINK"http://go.microsoft。com/fwlink/?LinkID=113288"helpConvert-PathMicrosoft.PowerShell.ManagementHYPERLINK"http://go.microsoft。com/fwlink/?LinkID=113289"helpConvertTo—CsvMicrosoft.PowerShell.UtilityHYPERLINK"http://go.microsoft.com/fwlink/?LinkID=135203”helpConvertTo-HtmlMicrosoft.PowerShell。UtilityHYPERLINK”http://go。microsoft.com/fwlink/?LinkID=113290”helpConvertTo-SecureStringMicrosoft。PowerShell.SecurityHYPERLINK”http://go。microsoft.com/fwlink/?LinkID=113291”helpConvertTo—XmlMicrosoft.PowerShell.UtilityHYPERLINK"http://go。micro/fwlink/?LinkID=135204”helpCopy—ItemMicrosoft。PowerShell。ManagementHYPERLINK"http://go.microsof/fwlink/?LinkID=113292"helpCopy—ItemPropertyMicrosoft.PowerShell.ManagementHYPERLINK”http://go.microsoft。com/fwlink/?LinkID=113293"helpDebug-ProcessMicrosoft。PowerShell.ManagementHYPERLINK”http://go。microsoft。com/fwlink/?LinkID=135206”helpDisable-ComputerRestoreMicrosoft。PowerShell.ManagementHYPERLINK”http://go.microso/fwlink/?LinkID=135207”helpDisable-PSBreakpointMicrosoft。PowerShell。UtilityHYPERLINK”http://go。microsoft。com/fwlink/?LinkID=113294”helpDisable-PSSessionConfigurationMicrosoft。PowerShell.CoreHYPERLINK”http://go。micro/fwlink/?LinkID=144299”helpDisable—WSManCredSSPMicrosoft.WSMan。ManagementHYPERLINK"http://go。microsoft。com/fwlink/?LinkId=141438"helpDisconnect-WSManMicrosoft.WSMan.ManagementHYPERLINK"http:///fwlink/?LinkId=141439"helpEnable-ComputerRestoreMicrosoft。PowerShell。ManagementHYPERLINK”http://go。microsoft。com/fwlink/?LinkID=135209"helpEnable—PSBreakpointMicrosoft.PowerShell。UtilityHYPERLINK”http://go。/fwlink/?LinkID=113295”helpEnable-PSRemotingMicrosoft。PowerShell。CoreHYPERLINK”http://go.microsoft。com/fwlink/?LinkID=144300”helpEnable-PSSessionConfigurationMicrosoft.PowerShell.CoreHYPERLINK”http://go。microsoft。com/fwlink/?LinkID=144301"help
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论