Powershell变量
程序员文章站
2023-12-30 17:00:46
...
# 数学运算
# 数学表达式 +-*/%
# 1+2+3
0xABCD
# 3.14*10*10
# 自动识别计算机容量单位 KB MB GB TB PB
1pb/1tb
# 1gb/1kb
# 1gb/20mb*10kb
# 通过netstat查看网络端口状态
# netstat
# 查看路由信息
# route print
# 查找可用的cmd控制台的命令
# cmd /c help
# 清除控制台信息
# clear
# cls
# 启动外部程序
# 打开记事本
# notepad
# 查看当前目录下的文件夹
# ls
# 默认键入一个字符串,会直接输出。但是这个字符串是命令的话,前面添加 “&” 可以输出该命令
"ls"
# & "ls"
#别名
# 查询别名所指的真实的cmdlet命令
#Get-Alias -name ls
# 查看可用的别名
# Get-Alias
# ls alias:
# 查看所有以 Remove开始的cmdlet的命令的别名呢
# dir alias: | where {$_.Definition.StartsWith("Remove")}
# dir alias:获取到额是别名的数组。通过where对数组进行遍历。$_代表当前元素。alias的Definition为String类型。
# 查看所有别名和指向cmdlet的别名的个数
# ls alias: | Group-Object definition | sort -Descending count
# 创建自己的别名
# Set-Alias -Name edit -Value notepad
# 删除自己的别名
# 自定义的别名在Powershell退出时会自动删除。非要手动删除的话
# del alias:edit
# 保存自己的别名 使用-Force强制导入道出
# Import-Alias -Force alias.ps1
# Export-Alias alias.ps1
# Powershell 执行文件和脚本
#./ping.bat
# Powershell变量
# 定义变量
# $a = 10
# $b = 4
# 计算变量
# $result = $a*$b
# $msg = "保存文本"
# 输出变量
# $result
# $msg
# 注意 :Powershell对大小写不敏感($a和$A是同一个变量)
# 某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名。
# 当然你硬要使用,请把整个变量名后缀用花括号括起来
#${"i"like $} = "mossfly"
#${"i"like $}
#赋值和返回值
#赋值运算符 "=".任何值都可以赋值。甚至是一条cmdlet命令。
#$tiem = Get-ChildItem
#$tiem
# Get-ChildItem
#给多个变量同时赋值
# $a=$b=$c="love"
# $a
# $b
# $c
# 交换变量的值
# $value1 = "a"
# $value2 = "b"
# $value1
# $value2
# $value1,$value2=$value2,$value1
# $value1
# $value2
# 查看正在使用的变量
# Powershell将变量的相关信息的记录存放在名为variable:的驱动中
#ls variable:
# 查找变量
# ls variable:a*
# 验证变量是否存在
#$flag = Test-Path variable:a
#$flag
# 删除变量(变量会在powershell退出或关闭时自动清除)
#del variable:a
#Test-Path variable:a
# 使用专用的变量命令
# 为了管理变量,powershell提供了五个专门管理变量的命令Clear-Variable,Get-Variable,New-Variable,Remove-Variable,Set-Variable。
# 变量写保护
#可以使用上述的New-Varivale的option选项,在创建变量时,给变量添加只读属性。
# New-Variable num -Value 1000 -Force -Option ReadOnly
# New-Variable number -Value "100" -Force -Option None
#通过删除变量可以修改变量的值
# del variable:num -Force
# New-Variable num -Value 100
# $num
# 权限更高的变量选项:Constant,常量一旦声明就不可修改
# New-Variable finally_ -Value 100 -Force -Option Constant
# Test-Path variable:finally_
# del variable:finally_ -Force
# 变量描述
#在New-Variable 可以通过-description 添加变量描述,但是变量描述默认不会显示,
# 可以通过Format-List 查看。
# New-Variable des -Value "123" -Description "number"
# ls variable:des | Format-List
# ls variable:des | fl*
# Powershell 自动化变量
# 用户信息:根目录
# $HOME
# 配置信息
#$PID
# TOPIC
# 参考https://www.pstips.net/powershell-automatic-variables.html
#Powershell环境变量
#读取特殊的环境变量
# $env:windir
# $env:ProgramFiles
# $env:COMPUTERNAME
# 可以放置在string字符串中直接输出
# "my computer name $env:COMPUTERNAME"
#查找环境变量
#ls env:
#创建新的环境变量
# $env:test="111"
# ls env:test
#删除和更新环境变量
# del env:test
# 变量的作用域
# Powershell支持四个作用域:全局、当前、私有和脚本。
# $windows = "hello"
#.\test.ps1
# $windows
# 在脚本调用结束后,这个变量被回收,脚本中的变量不会影响脚本外的变量,因为它们在不同的作用域中。
# powershell会针对每个函数和脚本给它们分配不同的作用域。
# 更改变量的可见性
# $windows = "hello"
# . .\test.ps1
# $windows
<##>
# 设置单个变量的作用域
# $global 全局变量,在所有的作用域中有效。
# $script 脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收。
# $private 私有变量,只会在当前作用域有效,不能贯穿到其他的作用域。
# $local 默认变量,只会在当前作用域有效,不能贯穿其他的作用域。
# $Global:a=10
# $Private:logo="www.pstios.net"
# $logo
# 当调用一个已定义的函数,Powershell会生成第二个作用域,
# 它可以对调用者的作用域中的变量执行读操作,但是不能执行写操作。
# function f(){
# "var=$var";
# $var = "function inner";
# $var
# }
# $var="i am in console."
# $var
# f
# private保护控制台的变量。
# function f(){
# "var=$var";
# $var = "function inner";
# $var
# }
# $private:var="i am private."
# f
# 对于$private限制的变量能不能在函数中通过$global修改呢?
# 不但不能修改,还会删除当前的$private变量
# function f(){
# "var = $var"
# $global:var=" Try to change variable in function"
# $var
# }
#
# $Private:var="i am a private variable"
# $Private:var
# $var
# f
# $Private:var
# 但是¥local修饰的变量可以通过¥global在函数内部修改
# Function f(){ "var=$var";$global:var=" Try to change variable in function"}
# $var="I am a local variable."
# $var
# $private:var
# f
# $var
# $local:var
# Powershell变量的类型和强类型
# 变量可以自动存储任何Powershell能够识别的类型信息。
# 可以通过$variable的GetType().Name查看和验证Powershell分配给变量的数据类型。
# (10).GetType().Name
# (3.14).GetType().Name
# 指定类型定义变量
# 定义变量时可以在变量前的中括号中加入数据类型
#[byte]$b=101
# $b.GetType()
# 使用固定类型的优点
# 手动地定义类型的一个重要原因是每个特殊的数据类型都有自己的特殊命令和特殊方法。
# [DateTime]$date="2019/11/01 12:00:00"
# $date.Date
# $date.DayOfWeek
# $date.DayOfYear
# Powershell处理Xml文档也很方便,
#LogoTest.xml
# <logotest>
# <extensions>
# <e>.exe</e>
# <e>.dll</e>
# </extensions>
# <files>
# <f></f>
# </files>
# <dirs></dirs>
# </logotest>
# 查询.exe和.dll的结点
# [ XML ]$xml=(Get-Content .LogoTestConfig.xml)
# $xml.LogoTest.Extensions.E
# Powershell变量的幕后管理
# 在Powershell中创建一个变量,会在后台生成一个PSVariable对象,这个对象不仅包含变量的值,也包含变量的其它信息
# 查看一个变量的其它保留信息,就需要变量的基类PSVariable对象,这个可以通过Get-Variable命令得到
# $vari=get-date
# Get-Variable vari
# Get-Variable vari | fl *
# 修改变量的选项设置
# Powershell处理一个变量的PSVariable对象,主要是为了能够更新变量的选项设置。
# 既可以使用命令Set-Variable,也可以在获取PSvariable对象后直接更改。
# $str = "私は変数です。"
# $var = Get-Variable str
# $var | fl *
# $var.Description = "変数をわかりました!"
# $var | fl *
# **变量的写保护
# $var="mossfly"
# Set-Variable var -Force -Option ReadOnly
# (Get-Variable var).Options
# 变量的选项
# 变量的选项是一个枚举值,包含:
# “None”:默认设置
# “ReadOnly”:变量只读,但是可以通过-Force 选项更新。
# “Constant”:常量一旦声明,在当前控制台不能更新。
# “Private”:只在当前作用域可见,不能贯穿到其它作用域
# “AllScope”:全局,可以贯穿于任何作用域
# 变量的类型规范
# 每个变量的都有自己的类型,这个具体的类型存放在PsVariable对象的Attributes[System.Management.Automation.PSVariableAttributeCollection]属性
# 如果这个Attributes为空,可以给这个变量存放任何 类型的数据,Powershell会自己选择合适的类型。
# 一旦这个Attributes属性确定下来,就不能随意存放数据了。
# 给$var存放一个整数,属于弱类型,所以Attributes属性为空,这时还可以给它赋值一个字符串。
# 但是如果给$var增加强类型,存放一个整数,再给它赋值一个其它类型,解释器会自动尝试转换,如果不能转换就会抛出异常。
# 可以使用 (Get-Variable var).Attributes.Clear(),清空Attributes,这样强类型就又转换成弱类型了。
# $var1 = 111
# (Get-Variable var1).Attributes
# $var1.GetType().FullName
# $var1 = "123"
# (Get-Variable var1).Attributes
# $var1.GetType().FullName
# [int]$var1=456
# (Get-Variable var1).Attributes
# $var1.GetType().FullName
# $var1="111世界"
# $var1
# $var1.GetType().FullName
# 验证和检查变量的内容
# $var2="限制变量"
# $condition=New-Object System.Management.Automation.ValidateLengthAttribute -ArgumentList 2,5
# (Get-Variable var2).Attributes.Add($condition)
# $var2="限制"
# $var2="限制变量长度"
# $var2
# 常用的变量内容验证还有5种,分别为:
# ValidateNotNullAttribute:限制变量不能为空
# $notnull_="123456"
# $con=New-Object System.Management.Automation.ValidateNotNullAttribute
# (Get-Variable $notnull_).Attributes.add($con)
# $notnull_=$null
# ValidateNotNullOrEmptyAttribute:限制变量不等为空,不能为空字符串,不能为空集合
# 注意@()为一个空数组。
# $b="321"
# $con2=New-Object System.Management.Automation.ValidateNotNullOrEmptyAttribute
# (Get-Variable $b).Attributes.Clear()
# (Get-Variable $b).Attributes.Add($con2)
# $b=$null
# [email protected]()
# ValidatePatternAttribute:限制变量要满足制定的正则表达式
# 验证Emile的格式
# $email="[email protected]"
# $con3=New-Object System.Management.Automation.ValidatePatternAttribute "b[A-Z0-9._%+-][email protected][A-Z0-9.-]+.[A-Z]{2,4}b"
# (Get-Variable $email).Attributes.Add($con3)
# $email="[email protected]"
# $email="[email protected]"
# $email="[email protected]"
# ValidateRangeAttribute:限制变量的取值范围
# $month=1
# (Get-Variable month).Attributes.Add($(New-Object System.Management.Automation.ValidateRangeAttribute -ArgumentList 1,12))
# $month=12
# $month=18
# ValidateSetAttribute:限制变量的取值集合