日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PowerShell学习笔记(1)-基础

發布時間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PowerShell学习笔记(1)-基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PowerShell學習筆記(1):基礎


??前段時間在知乎上得知Windows下的一款強大的命令行工具PowerShell(原諒我剛剛得知)。 其強大的功能,令人驚嘆,興趣盎然,這么優秀的工具值得我去學習、了解, 雖然我并不是程序猿。我的測試練習環境:win7 PowerShell v1.0


基礎內容


命令的概念與術語

??基本命令形式如下:
command -parameter1 -parameter2 arg1 arg2
- command:命令名稱
- parameter1:開關參數
- parameter2 arg1:帶參數變量的參數
- arg2:位置參數

例:Write-Output -InputObject HelloWorld
??dir -Recurse -Filter *.ps1 D:\Test,其中開關參數-Recuse指定dir命令顯示指定目錄及其子目錄下的所有文件,-Filter *.ps1過濾出后綴為ps1的文件。

命令分類

??PowerShell中的命令可以分為四類:cmdlets、functions、scripts、native Win32 executables。

cmdlet C#源碼例子:

[Cmdlet("Write", "InputObject")] public class MyWriteInputObjectCmdlet : Cmdlet {[Parameter]public string Parameter1;[Parameter(Mandatory = true, ValueFromPipeline=true)]public string InputObject;protected override void ProcessRecord(){if (Parameter1 != null)WriteObject(Parameter1 + ":" + InputObject);elseWriteObject(InputObject);} }

shell函數命令源碼例子:

function Write-InputObject {param($Parameter1)process{if ($Parameter1){"$Parameter1: $_"}else{"$_"}} }

shell腳本命令源碼例子:

param($Parameter1) process {if ($Parameter1){"$Parameter1:$_"}else{"$_"} }

native Win32 executables也被稱作為本地命令,是能被操作系統執行的外部程序。

別名與彈性語法

??PowerShell中實現了大量的預定義別名,這些別名可以分為兩個基本的類別:transitional別名和convenience別名。使用Get-Command命令可以查看別名的具體的定義。

PowerShell語句解析

??雙引號、單引號與反引號之間的區別。

??轉義序列,如下:

`n 換行 `r 回車 `t 水平制表符`a 警鈴`b 退格`' 單引號`" 雙引號 '0 空`` 單反引號

??表達式模式與命令模式。在表達式模式中,字符串必須由引號括起,數字始終解析為數字等等。在命令模式中,數字被視為數字,但是其它的參數則被視為字符串(除非參數以$,@,’,”,(開頭,當以這些特殊字符開頭時,其后的參數被解析為值表達式)。
??模式解析例子,如下:

2+2 表達式模式,結果是4.write-output 2+2 命令模式,結果是 “2+2”.$a=2+2 表達式模式,變量$a被賦值為值4write-output (2+2) 表達式模式,2+2被作為表達式計算得到值4,然后作為參數傳給write-outputwrite-output $a 表達式模式,參數前有特殊字符write-output $a.Equals(4) 表達式模式,$a.Equals(4)計算得到Boolean值Truewrite-output $a/dir.txt 命令模式,首先參數被計算為4/dir.txt,然后解釋器發現并不是一個合法的表達式,然后將其轉換為命令模式

??有兩種語句終止方式:一種是以分號”;”終止,還有一種是以換行符終止。

??管線是由管線操作符”|”分割的一系列命令,如:

dir -recurse -filter *.cpp | format-table name,length

??格式化與輸出。可以通過$PSHOME查看所安裝的默認格式數據庫的所在路徑。


類型處理


基本類型與字面值

??PowerShell中的字面值:strings,numbers,array,dictionaries,hashtables。
??PowerShell中,字符串是一個16位的Unicode字符序列,其直接由.NET System.String類型直接實現。單引號、雙引號字符串,例:"Double quoted string","Single quoted string"。here-strings:以@<quote><newline>開頭,并以<quote><newline>@結尾。
??數值字面值。PowerShell支持所有基本的.NET數值類型并可在需要時完成不同類型之間的轉換。數值字面值如下:

數值字面值.NET全類型名短類型名
1System.Int32[int]
10000000System.Int64[long]
1.1System.Double[double]
1dSystem.Decimal[decimal]

??數值乘數后綴:

乘數后綴乘數因子例子等效值.NET類型
kb/KB10241KB1024System.Int32
kb/KB10242.2KB2252.8System.Double
mb/MB1024*10241MB1045876System.Int32
mb/MB1024*10242.2MB2306867.2System.Double
gb/GB1024*1024*10241Gb1073741824System.Int32
gb/GB1024*1024*10242.14Gb3371549327.36System.Double

??創建Hash表,語法以@{開頭以}結尾,在分隔符內以定義鍵值對集,其中鍵值以=分割,不同的鍵值對以;分割。例:$test = @{ b1 = "prml"; b2 = "ia"},可以通過$test.b1、$test['b1']訪問值,通過$test.keys得到所有鍵。
??PowerShell中創建數組的方式以逗號分割,例$test = 1, 2, 3,對于數字數組還可以使用范圍運算符$test = 2 .. 3。PowerShell中數組默認是多態的,即可以在數組中存儲任意類型的對象。創建單元素數組$test = ,1,創建空數組$test = @()。

類型名別名:

PowerShell類型別名.NET類型
int[]System.Int32
[int[]]System.Int32[]
[long]System.Int64
[long[]System.Int64[]
[string]System.String
[string[]]System.String[]
[char]System.Char
[char[]]System.Char[]
[bool]System.Boolean
[bool[]]System.Boolean[]
[byte]System.Byte
[byte[]]System.Byte[]
[double]System.Double
[double[]]System.Double[]
[decimal]System.Decimal
[decimal[]]System.Decimal[]
[float[]]System.Single
[single]System.Single
[regex]System.Text.RegularExpressions.Regex
[array]System.Array
[xml]System.Xml.XmlDocument
[sriptblock]System.Management.Automation.ScriptBlock
[switch]System.Management.Automation.SwitchParameter
[hashtable]System.Collections.Hashtable
[psobject]System.Management.Automation.PSObject
[type]System.Type
[type[]]System.Type[]

??訪問靜態方法,[類名]::屬性名,如[math]::cos([math]::pi / 3)。
??類型轉換,例:[string] [char[]] ( [int[]] [char[]] $s | foreach {$_+1} )。


操作符與表達式


??算術運算符

運算符描述
+兩個值(數值、字符串、數組)相加
*兩個值(數值、字符串、數組)相乘
-兩個值(數值)相減
/兩個值(數值)相除
%兩個值(數值)相模

??賦值運算符:=、+=、-=、*=、、=、%=。

??比較運算符

運算符描述
-eq -ceq -ieq等于
-ne -cne -ine不等于
-gt -cgt -iget大于
-ge -cge -ige大于等于
-lt -clt -ilt小于
-le -cle -ile小于等于
-contains -ccontains -icontains左側的集合包含右側指定的值
-notcontains -cnotcontains -inotcontains左側的集合不包含右側指定的值

注:“c“變體表示大小寫敏感,”i“變體表示大小寫不敏感.未加限定比較運算符是大小寫不敏感的。

??模式匹配操作符,有兩種匹配類型:通配符表達式(wildcard expressions)、正則表達式(regular expressions)。

??通配符模式匹配運算符

運算符描述
-like -clike -ilike通配符模式匹配,匹配上表達式值則為True
-notlike -cnotlike -inotlike與-like相反

??PowerShell中的通配符模式

運算符描述
*匹配字符串中零個或多個字符
?匹配任意單個字符
[<char>-<char>]匹配字符區間中的字符
[<char><char>..]匹配字符集中任意一個字符

??正則表達式匹配操作符

運算符描述
-match -cmatch -imatch正則表達式模式匹配
-notmatch -cnotmatch -inotmatch與-match相反
-replace -creplace -ireplace替換字符串中正則匹配的部分

??邏輯與按位操作符

運算符描述
-and邏輯與
-or邏輯或
-xor異或
-not邏輯非
-band按位與
-bor按位或
-bxor按位異或
-bnot位非

高級操作符與變量


??以類型為參數的操作符

運算符描述
-is操作符左側的類型與右側匹配,則表達式為True
-isnot與-is相反
-as將操作符左側的值轉換為右側指定的類型的值

??一元操作符:-(將參數轉為數值,求負)、+(將參數轉換為數值,并返回數值結果)、--(將參數轉換為數值,前綴返回新值,后綴返回原值)、++(類似于--)、[<type>](類型轉換)、,(一元逗號操作符,創建一個新的單元素數組)。

??表達式與分組操作符:(...)、$(...)、@(...)(返回結果是一個數組)。

??范圍運算符..,生成連續的數值數組的快捷方式。

??方法屬性操作符:.、::(靜態方法)。

??格式化運算符:-f是一個二元運算符,運算符左側是格式化字符串,右側是需格式化的數組。例:$test = "{2} {1} {0}" -f 1, 2, 3"。

??重定向運算符

運算符例子描述
>dir > out.txt重定向輸出到文件。如果文件已存在,則清空當前的內容;如果文件不存在, 則創建該文件
>>dir >> out.txt重定向輸出到文件。如果文件已存在,則追加到當前的文件;如果文件不存在,則創建該文件
2>dir nosuchfile.txt 2> err.txt重定向錯誤流到文件…
2>>dir nosuchfile.txt 2>> err.txt重定向錯誤流到文件…
2>&1dir nosuchfile.txt 2>&1將錯誤流寫到輸出管線

??變量:PowerShell中不需顯示的聲明變量,在第一次賦值時自動創建,變量以$為前綴。


流控制語句


??if/elseif/else語句,例:

if ($test -gt 100) {"It's greater than one hundred" } elseif ($test -gt 50) {"It's greater than 50" } else {"It's not very good" }

??while循環,例:

$val = 0 while ($val -ne 3) {$val++Write-Host "The number is $val" }

??do-while循環,例:

$val = 0 do {$val++Write-Host "The number is $val" } while($val -ne 3)

??for循環,例:

for ($i = 0; $i -le 10; $i++) {$i; }

??foreach循環,例:

foreach ($i in "hello") {$i }

??label,break,continue,例:

for ($i = 0; $i -le 15; $i++) {if ($i % 2){ continue }if ($i -eq 10){ break }$i }:outer while ($true) {while ($true){ break outer } }

??switch語句。switch語句是PowerShell中最強大的語句,該語句將模式匹配,分支,迭代組合在一個控制結構中。switch語句語法形式如下:

switch -options ( <pipeline> ){<pattern> { <statementList> }<pattern> { <statementList> }.....default { <statementList> }} -options:控制怎樣匹配,可以是-regex-wildcard-match-case-case:大小寫敏感。-wildcard:通配符。-regex:正則表達式。 <pipeline>:用于產生值控制switch分支。另外,也可以指定序列-file <expr>代替<pipeline>。 pattern/action語句.所有的模式匹配語句都將執行,default語句僅當其他匹配模式都沒匹配到時執行。

??使用cmdlets進行流控制,例:

dir *.txt | foreach-object {$_.length}1..10 | where-object { ! ($_ -band 1) }

函數與腳本


??PowerShell函數的基本形式如下:

function <name> (<parameter list>) { <statement> } function subtract ($from, $to) { &from - &to } function subtract ([int]$from, [int]$to) { $from - $to }function <name> ($p1=<expr1>, $p2=<expr2>...){<statementList>} function subtract ($from=2, $to=1) { $from - $to }

??參數類型

參數類型描述
SwitchesSwitches參數,例:Get-ChildItem -Recurse
OptionsOptions參數,可帶參數值,例:Get-ChildItem -Filter *.txt
Arguments位置參數,不需要有名字關聯位置參數
function arith( [switch] $sub, [int] $x, [int] $y ) {if ($sub){$x - $y}else{$x + $y} }

??PowerShell變量的作用域。PowerShell支持四個作用域:全局(global)、本地(local)、私有(private)和腳本(script)。

??$global:test = 1 全局變量,在所有的作用域中有效,如果在腳本或者函數中設置了全局變量,即使腳本和函數都運行結束,這個變量也任然有效。
??$script:test = 1 腳本變量,只會在腳本內部有效,包括腳本中的函數,一旦腳本運行結束,這個變量就會被回收。
??$private:test = 1 私有變量只會在當前作用域有效,不能傳遞給其它的作用域,只能在當前作用域下讀寫。
??$local:test = 1 局部變量,可以省略修飾符,在當前作用域有效。本地變量能夠在其它作用域下讀取,但是不能通過其它作用域修改,只有本地作用域可以修改。

??return返回函數值,例:

function fact($x) {if ($x -lt 2){return 1}$x * (fact($x - 1)) }

??在管線中使用函數。通過特殊變量$input可以實現在管線中使用函數,這個變量包含一個枚舉器以處理輸入集合。例:

function sum($para) {$total = 0while ($input.MoveNext()){$total += $input.Current.$p}$total }dir | sum length

??過濾器執行一次,并自動實現循環管線中的每個元素。與函數通過$input來訪問當前管線對象不同,過濾器有一個特殊的變量$_表示當前的管線對象。過濾器的一般形式與示例如下:

filter <name> (<parameter list>) {<statementList>}

filter sum {if ($_ % 2 -eq 0){ $_} }

??cmdlet風格的函數,完整函數語法定義如下:

function <name> (<parameter list>) {begin {<statementList> #第一個管線對象可用之前執行}process {<statementList> #逐一執行每個管線對象}end {<statementList> #所有管線對象執行完后執行} }function test ($x) {begin{ $c = 0; "In begin, C is $c, x is $x"}process{ $c++; "In process, c is $c, x is $x, `$_ is $_"}end{"In end, c is $c, x is $x"} }

參考文檔
1. 《Windows PowerShell in Action》
2. 使用Windows PowerShell 編寫腳本
3. PowerShell-腳本之家
4. Cmdlet Overview
5. PowerShell中文博客

轉載于:https://www.cnblogs.com/corfox/p/5415007.html

總結

以上是生活随笔為你收集整理的PowerShell学习笔记(1)-基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。