Powershell變量

# 數學運算
# 數學表達式 +-*/%
# 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
# $b=@()

# ValidatePatternAttribute:限制變量要滿足制定的正則表達式
# 驗證Emile的格式
# $email="[email protected]"
# $con3=New-Object System.Management.Automation.ValidatePatternAttribute "b[A-Z0-9._%+-]+@[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:限制變量的取值集合

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章