zoukankan      html  css  js  c++  java
  • PowerShell笔记

    概要

    本系列是一个重新学习PowerShell的笔记,内容引用自PowerShell中文博客

    启动时变量

    下面是 Windows PowerShell 中的自动变量的列表:
    $$
    包含会话所收到的最后一行中的最后一个令牌。
    
    $?
    包含最后一个操作的执行状态。如果最后一个操作成功,则包含 TRUE,失败则包含 FALSE。
    
    $^
    包含会话所收到的最后一行中的第一个令牌。
    
    $_
    包含管道对象中的当前对象。在对管道中的每个对象或所选对象执行操作的命令中,可以使用此变量。
    
    $Args
    包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组。
    在创建函数时可以声明参数,方法是使用 param 关键字或在函数名称后添加以圆括号括起、逗号
    分隔的参数列表。
    
    $ConsoleFileName
    包含在会话中最近使用的控制台文件 (.psc1) 的路径。在通过 PSConsoleFile 参数启动
    Windows PowerShell 或使用 Export-Console cmdlet 将管理单元名称导出到控制台文件
    在使用不带参数的 Export-Console cmdlet 时,它自动更新在会话中最近使用的控制台文件。
    可以使用此自动变量确定要更新的文件。
    
    $Error
    包含错误对象的数组,这些对象表示最近的一些错误。最近的错误是该数组中的第一个错误对象
    ($Error[0])。
    
    $Event
    包含一个 PSEventArgs 对象,该对象表示一个正在被处理的事件。
    此变量只在事件注册命令(例如 Register-ObjectEvent)的 Action 块内填充。
    此变量的值是 Get-Event cmdlet 返回的同一个对象。
    因此,可以在 Action 脚本块中使用 $Event 变量的属性(例如
    $Event.TimeGenerated)。
    
    $EventSubscriber
    包含一个 PSEventSubscriber 对象,该对象表示正在被处理的事件的事件订阅者。
    此变量只在事件注册命令的 Action 块内填充。此变量的值
    是 Get-EventSubscriber cmdlet 返回的同一个对象。
    
    $ExecutionContext
    包含一个 EngineIntrinsics 对象,该对象表示 Windows PowerShell 主机的执行上下文。
    可以使用此变量来查找可用于 cmdlet 的执行对象。
    
    $False
    包含 FALSE。可以使用此变量在命令和脚本中表示 FALSE,而不是使用字符串”false”。如果
    该字符串转换为非空字符串或非零整数,则可将该字符串解释为 TRUE。
    
    $ForEach
    包含 ForEach-Object 循环的枚举数。可以对 $ForEach 变量的值使用枚举数的属性和方法。
    此变量仅在运行 For 循环时存在,循环完成即会删除。
    
    $Home
    包含用户的主目录的完整路径。此变量等效于 %homedrive%%homepath% 环境变量。
    
    $Host
    包含一个对象,该对象表示 Windows PowerShell 的当前主机应用程序。可以使用此变量在命
    令中表示当前主机,或者显示或更改主机的属性,如 $Host.version、$Host.CurrentCulture
    或 $host.ui.rawui.setbackgroundcolor(“Red”)。
    
    $Input
    一个枚举数,它包含传递给函数的输入。$Input 变量区分大小写,只能用于函数和脚本块。(脚
    本块本质上是未命名的函数。)在函数的 Process 块中,$Input 变量包含当前位于管道中的对
    象。在 Process 块完成后,$Input 的值为 NULL。如果函数没有 Process 块,则 $Input
    的值可用于 End 块,它包含函数的所有输入。
    
    $LastExitCode
    包含运行的最后一个基于 Windows 的程序的退出代码。
    
    $Matches
    $Matches 变量与 -match 和 -not match 运算符一起使用。
    将标量输入提交给 -match 或 -notmatch 运算符时,如果检测到匹配,则会返回一个布尔值,
    并使用由所有匹配字符串值组成的哈希表填充 $Matches 自动变量。有关 -match 运算符的详细
    信息,请参阅 about_comparison_operators。
    
    $MyInvocation
    包含一个对象,该对象具有有关当前命令(如脚本、函数或脚本块)的信息。可以使用该对象中的
    信息(如脚本的路径和文件名 ($myinvocation.mycommand.path) 或函数的名称
    ($myinvocation.mycommand.name))来标识当前命令。对于查找正在运行的脚本的名称,这非常有用。
    $NestedPromptLevel
    包含当前提示级别。值 0 指示原始提示级别。该值在进入嵌套级别时递增,在退出嵌套级别时递减。
    
    例如,在使用 $Host.EnterNestedPrompt 方法时,Windows PowerShell 会出现嵌套命令
    提示符。在 Windows PowerShell 调试程序中到达断点时,Windows PowerShell 也会出现嵌
    套命令提示符。
    
    在进入嵌套提示时,Windows PowerShell 暂停当前命令,保存执行上下文,并递增
    $NestedPromptLevel 变量的值。要创建更多嵌套命令提示符(最多 128 级)或返回到原始命
    令提示符,请完成命令,或键入”exit”。
    
    $NestedPromptLevel 变量有助于跟踪提示级别。可以创建包含此值的备用 Windows
    PowerShell 命令提示符,以使此值始终可见。
    
    $NULL
    包含 NULL 或空值。可以在命令和脚本中使用此变量表示 NULL,而不是使用字符串”NULL”。
    如果该字符串转换为非空字符串或非零整数,则可将该字符串解释为 TRUE。
    
    $PID
    包含承载当前 Windows PowerShell 会话的进程的进程标识符 (PID)。
    
    $Profile
    包含当前用户和当前主机应用程序的 Windows PowerShell 配置文件的完整路径。可以在命令
    中使用此变量表示配置文件。例如,可以在命令中使用此变量确定是否已创建某个配置文件:
    
    test-path $profile
    
    也可以在命令中使用此变量创建配置文件:
    
    new-item -type file -path $pshome -force
    
    此外,还可以在命令中使用此变量在记事本中打开配置文件:
    
    notepad $profile
    
    $PSBoundParameters
    包含活动参数及其当前值的字典。只有在声明参数的作用域(如脚本或函数)中,
    此变量才有值。可以使用此变量显示或更改参数的当前值,也可以将参数值传递给
    其他脚本或函数。
    
    例如:
    
    function test {
    param($a, $b)
    
    # Display the parameters in dictionary format.
    $psboundparameters
    
    # Call the Test1 function with $a and $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-Culture cmdlet。
    
    $PSDebugContext
    在调试期间,此变量包含有关调试环境的信息。在其他时间,此变量包含 NULL 值。因此,可以使
    用此变量指示调试程序是否拥有控制权。填充之后,此变量包含一个具有 Breakpoints 和
    InvocationInfo 属性的 PsDebugContext 对象。InvocationInfo 属性有多个十分有用的
    属性,包括 Location 属性。Location 属性指示正在调试的脚本的路径。
    
    $PsHome
    包含 Windows PowerShell 的安装目录的完整路径(通常为
    %windir%System32WindowsPowerShellv1.0)。可以在 Windows PowerShell 文件
    的路径中使用此变量。例如,下面的命令在概念性帮助主题中搜索”variable”一词:
    
    select-string -pattern variable -path $pshome*.txt
    
    $PSScriptRoot
    包含要从中执行脚本模块的目录。
    通过此变量,脚本可以使用模块路径来访问其他资源。
    
    $PsUICulture
    包含操作系统中当前所用的用户界面 (UI) 区域性的名称。UI 区域性确定哪些文本字符串用于用户
    界面元素(如菜单和消息)。这是系统的
    System.Globalization.CultureInfo.CurrentUICulture.Name 属性的值。要获取系统
    的 System.Globalization.CultureInfo 对象,请使用 Get-UICulture cmdlet。
    
    $PsVersionTable
    包含一个只读哈希表,该哈希表显示有关在当前会话中运行的 Windows PowerShell 版本的详
    细信息。
    该表包括下列项:
    
    CLRVersion: 公共语言运行时 (CLR) 的版本
    BuildVersion: 当前版本的内部版本号
    PSVersion: Windows PowerShell 版本号
    WSManStackVersion: WS-Management 堆栈的版本号
    PSCompatibleVersions: 与当前版本兼容的 Windows PowerShell 版本
    SerializationVersion :序列化方法的版本
    PSRemotingProtocolVersion:Windows PowerShell 远程管理协议的版本
    $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_Va
    
    riables
    about_Variables
    

    临时变量

    设置临时变量

    PS > $Value=1
    PS > $Value2=2
    PS > $Value,$Value2=$Value2,$Value
    PS > $Value2
    PS > $Value
    

    指定变量的数据类型

    PS C:> [byte]$Test1=255
    PS C:> $Test1                                                                                                         
    PS C:> $Test1.GetType()
    

    查找所有变量

    #正在使用的环境变量
    
    PS > ls  Variable:
    #查找Value开头的环境变量
    PS > ls  Variable:Value*
    

    验证变量是否存在

    PS > Test-Path variable:value1
    

    删除变量

    PS > Del variable:value1
    

    创建变量时指定只读权限

    PS > New-Variable -Name Value1 -Value "1111" -Force -Option ReadOnly
    #删除设定权限的变量
    PS > Del Variable:Value1 -Force
    

    为变量添加描述

    PS > New-Variable -Name Value1 -Value "1111" -Description "一个变量"
    PS > LS Variable:Value1 | Format-List *
    

    环境变量

    传统的控制台一般没有象Powershell这么高级的变量系统。它们都是依赖于机器本身的环境变量,进行操作 。环境变量对于powershell显得很重要,因为它涵盖了许多操作系统的细节信息。
    此外,powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭。但是如果环境变量被更新了,它会继续保存在操作系统中,即使其它程序也可以调用它。
    

    查看环境变量

    #通过环境变量读取Windows操作系统的安装路径,和默认应用程序的安装路径。
    PS C:> ls env:   
    PS C:> $env:windir
    PS C:> $env:ProgramFiles
    PS C:> "My computer name $env:COMPUTERNAME"  
    

    操作环境变量

    PS C:> $env:TestName1="11111"
    PS C:> $env:TestName2="22222"
    PS C:> Del env:TestName1
    PS C:> LS env:Test*   
    

    持久写入环境变量

    PS> [environment]::SetEnvironmentvariable("Path", ";c:powershellscript", "User")
    PS> [environment]::GetEnvironmentvariable("Path", "User")
    

    驱动器变量

    访问文件

    #获取当前Powershell下的驱动器
    PS C:> Get-PSDrive
    
    #直接访问文件
    PS C:> "测试内容" > C:	est.txt                                                                                      PS C:> ${C:	est.txt}
    
    #反引号`放在$前,会把$解析成普通字符,解释器会继续去解析第二个$,发现env:HOMEDRIVE,将其替换成c
    PS C:> Invoke-Expression "`${$env:HOMEDRIVE/test.txt}"
    
    #通过变量表达式访问文件
    PS C:Code> $file1 = ls .	est.txt                                                                                      PS C:Code> $file1.Length
    PS C:Code> "文件长度:$($(ls .	est.txt).Length)"                                                                      
    

    变量作用域

    到目前为止,看到的变量作用域的改变都是全局的,能不能针对某个具体变量的作用域做一些个性化的设置。
    $global

    全局变量,在所有的作用域中有效,如果你在脚本或者函数中设置了全局变量,即使脚本和函数都运行结束,这个变量也任然有效。
    

    $script

    脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收。
    

    $private

    私有变量,只会在当前作用域有效,不能贯穿到其他作用域。
    

    $local

    默认变量,可以省略修饰符,在当前作用域有效,其它作用域只对它有只读权限。
    打开Powershell控制台后,Powershell会自动生成一个新的全局作用域。如果增加了函数和脚本,或者特殊的定义,才会生成其它作用域。
    

    变量类型

    查看变量的其他信息

    如果在Powershell中输出一个变量,只会输出这个变量的值。不能够显示它的其它信息,如果想查看一个变量的其它保留信息,就需要变量的基类PSVariable对象,这个可以通过Get-Variable命令得到
    
    #查看变量的属性
    PS> $a=get-date
    PS> Get-Variable a
    
    #变更变量的描述属性
    PS> $str = "这是一个变量"
    PS> (Get-Variable str).Description="变量的描述已更改;"
    PS> Get-Variable str | Format-Table Name,Description
    

    变更变量的保护级别或作用域

    变量的选项是一个枚举值,包含:
    “None”:默认设置
    “ReadOnly”:变量只读,但是可以通过-Force 选项更新。
    “Constant”:常量一旦声明,在当前控制台不能更新。
    “Private”:只在当前作用域可见,不能贯穿到其它作用域
    “AllScope”:全局,可以贯穿于任何作用域
    
    #设置变量保护
    PS> $var="mossfly"
    PS> Set-Variable var -Option "ReadOnly"
    PS> (Get-Variable var).Options
    ReadOnly
    PS> Set-Variable var -Option "None" -Force
    PS> (Get-Variable var).Options
    None
    

    变更变量的属性特性

    PS C:> [int]$str = 1                                                                                                   PS C:> (Get-Variable str).Attributes                                                                                   
    TransformNullOptionalParameters TypeId
    ------------------------------- ------
                               True System.Management.Automation.ArgumentTypeConverterAttribute
    
    
    PS C:> $str = "哈哈哈"                                                                                                 Cannot convert value "哈哈哈" to type "System.Int32". Error: "Input string was not in a correct format."
    At line:1 char:1
    + $str = "哈哈哈"
    + ~~~~~~~~~~~~
        + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
        + FullyQualifiedErrorId : RuntimeException
    
    PS C:> (Get-Variable str).Attributes.Clear()                                                                           PS C:> $str = "哈哈哈"                                                                                                 PS C:> $str.GetType()                                                                                                  
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    
  • 相关阅读:
    ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录
    py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录
    spring配置hibernate的sessionFactory
    Java编程题
    java编写encode方法和decode方法,机试题
    港交所OMD-C对接笔记
    基于百词斩和扇贝单词的背单词APP软件测试
    C++实现对文件中各单词词频的统计及其代码优化
    C++如何获取当前路径下所有文件的文件名
    【信号与线性系统】为什么求解零输入响应时转移算子H(p)不能约分,但计算单位冲激响应时却可以约分?
  • 原文地址:https://www.cnblogs.com/MerLin-LiuNian/p/15250975.html
Copyright © 2011-2022 走看看