1、Powershell 定义变量Powershell,程序设计 添加评论 十二 05 变量可以暂时保存数据,因而可以把数据保存在变量中,以便进一步操作。协助0102030405060708091011#定义变量 $a=10 $b=4 #计算变量 $result=$a*$b$msg=保存文本#输出变量 $result$msg40保存文本powershell 不需要显示地去声明,可以自动创立变量,只须记住变量前缀为$.创立好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中。但是有个例外单引号中字符串不会辨认和解决变量名。选取变量名在powershell中变量名均是以美元符”$”开始,剩余
2、字符可以是数字、字母、下划线任意字符,并且powershell变量名大小写不敏感($a和$A 是同一种变量)。某些特殊字符在powershell中有特殊用途,普通不推荐使用这些字符作为变量名。固然你硬要使用,请把整个变量名后缀用花括号括起来。PS C:.com $Ilike $=mossflyPS C:.com $Ilike $mossfly赋值和返回值赋值操作符为“=”,几乎可以把任何数据赋值给一种变量,甚至一条cmdlet命令,为什么,由于Powershell支持对象,对象可以包罗万象。PS C:.com $item=Get-ChildItem .PS C:.com $item Direc
3、tory:C:.comMode LastWriteTime Length Name- - - -d- /11/23 17:25 ABC-a- /11/24 18:30 67580 a.html-a- /11/24 20:04 26384 a.txt-a- /11/24 20:26 12060 alias-a- /11/24 20:27 12060 alias.ps1-a- /11/23 17:25 0 b.txt-a- /11/23 17:25 0 c.txt-a- /11/23 17:25 0 d.txt-a- /11/25 11:20 556 employee.xml-a- /11/24
4、17:37 7420 name.html-a- /11/28 15:30 63 ping.bat-a- /11/24 17:44 735892 Powershell_Cmdlets.html-a- /11/28 17:03 60 test.ps1-a- /11/23 17:37 242 test.txt-a- /11/28 16:42 170 test.vbsPS C:.com $result=3000*(1/12+0.0075)PS C:.com $result272.5给各种变量同步赋值赋值操作符不但能给一种变量赋值,还可以同步给各种变量赋相似值。PS C:.com $a=$b=$c=12
5、3PS C:.com $a123PS C:.com $b123PS C:.com $c123互换变量值要互换两个变量值,老式程序语言至少需要三步,并且还需定义一种中间暂时变量。$Value1 = 10$Value2 = 20$Temp = $Value1$Value1 = $Value2$Value2 = $Temp在powershell中,互换两个变量值,这个功能变得非常简朴。PS C:.com $value1=10PS C:.com $value2=20PS C:.com $value1,$value2=$value2,$value1PS C:.com $value120PS C:.com
6、 $value210查看正在使用变量Powershell将变量有关信息记录存储在名为variable:驱动中。如果要查看所有定义变量,可以直接遍历variable:PS C:.com ls variable:Name Value- -Ilike $ mossfly$ cls? True cls_1 1a 123args b 123c 123ConfirmPreference HighConsoleFileNameDebugPreference SilentlyContinue。查找变量由于有虚拟驱动variable:存在,可以象查找文献那样使用通配符查找变量。例如要查询以value打头变量名。
7、PS C:.com ls variable:value*Name Value- -value1 20value2 10验证变量与否存在验证一种变量与否存在,依然可以象验证文献系统那样,使用cmdlet Test-Path。为什么?由于变量存在变量驱动器中。PS C:.com Test-Path variable:value1TruePS C:.com Test-Path variable:value2TruePS C:.com Test-Path variable:valueUnkonwFalse删除变量由于变量会在powershell退出或关闭时,自动清除。普通没必要删除,但是你非得删除,也
8、可以象删除文献那样删除它。PS C:.com Test-Path variable:value1TruePS C:.com del variable:value1PS C:.com Test-Path variable:value1False使用专用变量命令为了管理变量,powershell提供了五个专门管理变量命令Clear-Variable,Get-Variable,New-Variable,Remove-Variable,Set-Variable。由于虚拟驱动器variable:存在,clear,remove,set打头命令可以被代替。但是Get-Variable,New-Variabl
9、e。却非常有用new-variable可以在定义变量时,指定变量某些其他属性,例如访问权限。同样Get-Variable也可以获取这些附加信息。变量写保护可以使用New-Variable option选项 在创立变量时,给变量加上只读属性,这样就不能给变量重新赋值了。PS C:.com New-Variable num -Value 100 -Force -Option readonlyPS C:.com $num=101Cannot overwrite variable num because it is read-only or constant.At line:1 char:5+ $nu
10、m del Variable:numRemove-Item :Cannot remove variable num because it is constant or read-only. If the variable is read-only,ration again specifying the Force option.At line:1 char:4+ del del Variable:num -ForcePS C:.com $num=101PS C:.com $num101有无权限更高变量,有,那就是:选项Constant,常量一旦声明,不可修改PS C:.com new-vari
11、able num -Value strong -Option constantPS C:.com $num=why?can not delete it.Cannot overwrite variable num because it is read-only or constant.At line:1 char:5+ $num del Variable:num -ForceRemove-Item :Cannot remove variable num because it is constant or read-only. If the variable is read-only,ration
12、 again specifying the Force option.At line:1 char:4+ del new-variable name -Value me -Description This is my namePS C:.com ls Variable:name | fl *PSPath :Microsoft.PowerShell.CoreVariable:namePSDrive :VariablePSProvider :Microsoft.PowerShell.CoreVariablePSIsContainer :FalseName :nameDescription :Thi
13、s is my nameValue :meVisibility :PublicModule :ModuleName :Options :NoneAttributes :Powershell自动化变量Powershell,程序设计 添加评论 十二 07 Powershell 自动化变量 是那些一旦打开Powershell就会自动加载变量。这些变量普通存储内容涉及顾客信息:例如顾客根目录$home配备信息:例如powershell控制台大小,颜色,背景等。运营时信息:例如一种函数由谁调用,一种脚本运营目录等。PS C:PowerShell $HOMEC:UserstestPS C:PowerShe
14、ll $currentProcessID=$pidPS C:PowerShell $currentProcessID5356PS C:PowerShell Get-Process -Id $pidHandles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName- - - - - - - - 390 10 30604 33100 172 1.11 5356 powershellPS C:PowerShell $PROFILEC:UserstestDocumentsWindowsPowerShellMicrosoft.PowerShell_profile
15、.ps1powershell中某些自动化变量只能读,不能写。例如:$Pid。可以通过Get-Help about_Automatic_variables查看Automatic_variables协助。TOPICabout_Automatic_Variables主题about_Automatic_Variables简短阐明阐明存储 Windows PowerShell 状态信息变量。这些变量由 Windows PowerShell 创立并维护。详细阐明下面是 Windows PowerShell 中自动变量列表:$包括会话所收到最后一行中最后一种令牌。$?包括最后一种操作执行状态。如果最后一种操
16、作成功,则包括 TRUE,失败则包括 FALSE。$包括会话所收到最后一行中第一种令牌。$_包括管道对象中当前对象。在对管道中每个对象或所选对象执行操作命令中,可以使用此变量。$Args包括由未声明参数和/或传递给函数、脚本或脚本块参数值构成数组。在创立函数时可以声明参数,办法是使用 param 核心字或在函数名称后添加以圆括号括起、逗号分隔参数列表。$ConsoleFileName包括在会话中近来使用控制台文献 (.psc1) 途径。在通过 PSConsoleFile 参数启动Windows PowerShell 或使用 Export-Console cmdlet 将管理单元名称导出到控制台
17、文献时,将填充此变量。在使用不带参数 Export-Console cmdlet 时,它自动更新在会话中近来使用控制台文献。可以使用此自动变量拟定要更新文献。$Error包括错误对象数组,这些对象表达近来某些错误。近来错误是该数组中第一种错误对象($Error0)。$Event包括一种 PSEventArgs 对象,该对象表达一种正在被解决事件。此变量只在事件注册命令(例如 Register-ObjectEvent) Action 块内填充。此变量值是 Get-Event cmdlet 返回同一种对象。因而,可以在 Action 脚本块中使用 $Event 变量属性(例如$Event.Time
18、Generated)。$EventSubscriber包括一种 PSEventSubscriber 对象,该对象表达正在被解决事件事件订阅者。此变量只在事件注册命令 Action 块内填充。此变量值是 Get-EventSubscriber cmdlet 返回同一种对象。$ExecutionContext包括一种 EngineIntrinsics 对象,该对象表达 Windows PowerShell 主机执行上下文。可以使用此变量来查找可用于 cmdlet 执行对象。$False包括 FALSE。可以使用此变量在命令和脚本中表达 FALSE,而不是使用字符串”false”。如果该字符串转换为
19、非空字符串或非零整数,则可将该字符串解释为 TRUE。$ForEach包括 ForEach-Object 循环枚举数。可以对 $ForEach 变量值使用枚举数属性和办法。此变量仅在运营 For 循环时存在,循环完毕即会删除。$Home包括顾客主目录完整途径。此变量等效于 %homedrive%homepath% 环境变量。$Host包括一种对象,该对象表达 Windows PowerShell 当前主机应用程序。可以使用此变量在命令中表达当前主机,或者显示或更改主机属性,如 $Host.version、$Host.CurrentCulture或 $host.ui.rawui.setbackg
20、roundcolor(“Red”)。$Input一种枚举数,它包括传递给函数输入。$Input 变量区别大小写,只能用于函数和脚本块。(脚本块本质上是未命名函数。)在函数 Process 块中,$Input 变量包括当前位于管道中对象。在 Process 块完毕后,$Input 值为 NULL。如果函数没有 Process 块,则 $Input值可用于 End 块,它包括函数所有输入。$LastExitCode包括运营最后一种基于 Windows 程序退出代码。$Matches$Matches 变量与 -match 和 -not match 运算符一起使用。将标量输入提交给 -match 或
21、-notmatch 运算符时,如果检测到匹配,则会返回一种布尔值,并使用由所有匹配字符串值构成哈希表填充 $Matches 自动变量。关于 -match 运算符详细信息,请参阅 about_comparison_operators。$MyInvocation包括一种对象,该对象具备关于当前命令(如脚本、函数或脚本块)信息。可以使用该对象中信息(如脚本途径和文献名 ($myinvocation.mycommand.path) 或函数名称($myinvocation.mycommand.name))来标记当前命令。对于查找正在运营脚本名称,这非常有用。$NestedPromptLevel包括当前提
22、示级别。值 0 批示原始提示级别。该值在进入嵌套级别时递增,在退出嵌套级别时递减。例如,在使用 $Host.EnterNestedPrompt 办法时,Windows PowerShell 会浮现嵌套命令提示符。在 Windows PowerShell 调试程序中到达断点时,Windows PowerShell 也会浮现嵌套命令提示符。在进入嵌套提示时,Windows PowerShell 暂停当前命令,保存执行上下文,并递增$NestedPromptLevel 变量值。要创立更多嵌套命令提示符(最多 128 级)或返回到原始命令提示符,请完毕命令,或键入”exit”。$NestedPromp
23、tLevel 变量有助于跟踪提示级别。可以创立包括此值备用 WindowsPowerShell 命令提示符,以使此值始终可见。$NULL包括 NULL 或空值。可以在命令和脚本中使用此变量表达 NULL,而不是使用字符串”NULL”。如果该字符串转换为非空字符串或非零整数,则可将该字符串解释为 TRUE。$PID包括承载当前 Windows PowerShell 会话进程进程标记符 (PID)。$Profile包括当前顾客和当前主机应用程序 Windows PowerShell 配备文献完整途径。可以在命令中使用此变量表达配备文献。例如,可以在命令中使用此变量拟定与否已创立某个配备文献:tes
24、t-path $profile也可以在命令中使用此变量创立配备文献:new-item -type file -path $pshome -force此外,还可以在命令中使用此变量在记事本中打开配备文献:notepad $profile$PSBoundParameters包括活动参数及其当前值字典。只有在声明参数作用域(如脚本或函数)中,此变量才有值。可以使用此变量显示或更改参数当前值,也可以将参数值传递给其她脚本或函数。例如:function test param($a,$b)# Display the parameters in dictionary format.$psboundparam
25、eters# Call the Test1 function with $a and $b.test1 psboundparameters$PsCmdlet包括一种对象,该对象表达正在运营 cmdlet 或高档函数。可以在 cmdlet 或函数代码中使用该对象属性和办法来响应使用条件。例如,ParameterSetName 属性包括正在使用参数集名称,而 ShouldProcess 办法将 WhatIf和 Confirm 参数动态添加到 cmdlet。关于 $PSCmdlet 自动变量详细信息,请参阅 about_Functions_Advanced。$PsCulture包括操作系统中当前所用
26、区域性名称。区域性拟定数字、货币和日期等项显示格式。这是系统 System.Globalization.CultureInfo.CurrentCulture.Name 属性值。要获取系统 System.Globalization.CultureInfo 对象,请使用 Get-Culture cmdlet。$PSDebugContext在调试期间,此变量包具关于调试环境信息。在其她时间,此变量包括 NULL 值。因而,可以使用此变量批示调试程序与否拥有控制权。填充之后,此变量包括一种具备 Breakpoints 和InvocationInfo 属性 PsDebugContext 对象。Invoc
27、ationInfo 属性有各种十分有用属性,涉及 Location 属性。Location 属性批示正在调试脚本途径。$PsHome包括 Windows PowerShell 安装目录完整途径(普通为%windir%System32WindowsPowerShellv1.0)。可以在 Windows PowerShell 文献途径中使用此变量。例如,下面命令在概念性协助主题中搜索”variable”一词:select-string -pattern variable -path $pshome*.txt$PSScriptRoot包括要从中执行脚本模块目录。通过此变量,脚本可以使用模块途径来访问
28、其她资源。$PsUICulture包括操作系统中当前所用顾客界面 (UI) 区域性名称。UI 区域性拟定哪些文本字符串用于顾客界面元素(如菜单和消息)。这是系统System.Globalization.CultureInfo.CurrentUICulture.Name 属性值。要获取系统 System.Globalization.CultureInfo 对象,请使用 Get-UICulture cmdlet。$PsVersionTable包括一种只读哈希表,该哈希表显示关于在当前会话中运营 Windows PowerShell 版本详细信息。该表涉及下列项:CLRVersion: 公共语言运营
29、时 (CLR) 版本BuildVersion: 当前版本内部版本号PSVersion: Windows PowerShell 版本号WSManStackVersion: WS-Management 堆栈版本号PSCompatibleVersions: 与当前版本兼容 Windows PowerShell 版本SerializationVersion 序列化办法版本PSRemotingProtocolVersionWindows PowerShell 远程管理合同版本$Pwd包括一种途径对象,该对象表达当前目录完整途径。$Sender包括生成此事件对象。此变量只在事件注册命令 Action 块内
30、填充。此变量值也可在 Get-Event 返回 PSEventArgs(System.Management.Automation.PSEventArgs) 对象 Sender 属性中找到。$ShellID包括当前 shell 标记符。$SourceArgs包括表达正在被解决事件事件参数对象。此变量只在事件注册命令 Action块内填充。此变量值也可在 Get-Event 返回 PSEventArgs(System.Management.Automation.PSEventArgs) 对象 SourceArgs 属性中找到。$SourceEventArgs包括一种对象,该对象表达从正在被解决事件
31、 EventArgs 中派生出第一种事件参数。此变量只在事件注册命令 Action 块内填充。此变量值也可在 Get-Event 返回 PSEventArgs(System.Management.Automation.PSEventArgs) 对象 SourceArgs 属性中找到。$This在定义脚本属性或脚本办法脚本块中,$This 变量引用要扩展对象。$True包括 TRUE。可以在命令和脚本中使用此变量表达 TRUE。另请参阅about_Hash_Tablesabout_Preference_Variablesabout_Variables Powershell 通过函数扩展别名Pow
32、ershell,程序设计 添加评论 十一 25 在Powershell中设立别名确以便快捷,但是在设立别名过程中并设立参数有关信息。尽管别名会自动辨认参数,但是如何把经常使用参数默认设定在别名里面呢?例如Test-Connection -Count 2 -ComputerName,让-”-Count 2 固化在别名中。这时简朴别名无法完毕上述需求,可以通过函数来完毕它,并且一旦把函数拉过来,定义别名会变得更加灵活。PS C:.com function test-conn Test-Connection -Count 2 -ComputerName $argsPS C:.com Set-Alia
33、s tc test-connPS C:.com tc localhostSource Destination IPV4Address IPV6Address Bytes Time(ms)- - - - - -test-me-01 localhost 127.0.0.1 :1 32 0test-me-01 localhost 127.0.0.1 :1 32 0有了函数牵线,别名可以完毕更高档更强大功能,其中$args为参数占位符,经测试,发现这个占位符必要以$args命名,否则不能辨认,会抛出异常:Cannot validate argument on parameter ComputerNam
34、e. The argument is null or empty. Supply an argnt that is not null or empty and then try the command again. Powershell 迅速编辑模式和原则模式Powershell,程序设计 添加评论 十一 23 powershell控制台有两种模式,一种是迅速编辑模式,一种是原则模式。迅速编辑模式和原则模式切换可以通过控制台标题栏-鼠标右击-属性-选项-编辑选项 。powershell原则模式鼠标右击选取标记后才干实现复制和粘切功能。powershell迅速编辑模式可以通过鼠标右键选取任意矩形
35、区域内文本,并且鼠标右击实现复制功能。 Powershell 自定义控制台Powershell,程序设计 添加评论 十一 23 右击标题栏选取”属性”弹出powershell控制台对话框。在这里有三个四个选项卡:选项、字体、布局和颜色。“选项”设立光标,历史记录,编辑模式切换。“字体”设立字体名称和大小“布局”设立窗口缓冲区、窗口大小、窗口起始坐标“颜色”设立屏幕和对话框背景色和前景色。Powershell Foreach 循环Powershell,程序设计 添加评论 一 23 Foreach-object 为cmdlet命令,使用在管道中,对管道成果逐个解决,foreach为遍历集合核心字。
36、下面举两个例子:协助010203040506070809101112131415161718192021$array=7.10 foreach ($n in $array) $n*$n #49 #64 #81 #100 foreach($file in dir c:windows) if($file.Length -gt 1mb) $File.Name #explorer.exe #WindowsUpdate.log这里只为了演示foreach,其实上面第二个例子可以用Foreach-Object更简洁。PS C:Powershell dir C:Windows | where $_.leng
37、th -gt 1mb |foreach-object $_.Nameexplorer.exeWindowsUpdate.logPowershell 条件操作符Powershell,程序设计 添加评论 一 16 Powershell 中比较运算符-eq :等于-ne :不等于-gt :不不大于-ge :不不大于等于-lt :不大于-le :不大于等于-contains :包括-notcontains :不包括进行比较可以将比较表达式直接输入进Powershell控制台,然后回车,会自动比较并把比较成果返回。PS C:Powershell (3,4,5 ) -contains 2FalsePS C
38、:Powershell (3,4,5 ) -contains 5TruePS C:Powershell (3,4,5 ) -notcontains 6TruePS C:Powershell 2 -eq 10FalsePS C:Powershell A -eq aTruePS C:Powershell A -ieq aTruePS C:Powershell A -ceq aFalsePS C:Powershell 1gb -lt 1gb+1TruePS C:Powershell 1gb -lt 1gb-1False求反求反运算符为-not 但是像高档语言同样”! “ 也支持求反。PS C:Powershell $a= 2 -eq 3PS C:Powershell $aFalsePS C:Powershell -not $aTruePS C:Powershell !($a)True布尔运算-and :和-or :或-xor :异或-not :逆PS C:Powershell $true -and