Powershell入門筆記
Contents
這篇文章想分享下,最近準備挑戰向新人介紹的Powershell基礎使用,也順便透過整理資料來加深自己這方面的基礎,裡面也有給一些練習題,如果你剛好路過也可以做做看。
注:原始文件寫在OneNote上,在轉換成Markdown的過程已盡量修改成部落格版本的寫法。
簡單介紹
Powershell是微軟推出的CLI,擁有以下特性:
- 一致性的指令命名規則
所有”官方”指令都遵守
Verb-Noun
,例如get-help
- 內建強大的Cmdlet(command-let)
- 具有Scripts的功能
可以透過編寫Code,把指令像是樂高一樣組成我們想要的樣子。
每個指令都是以動詞+名詞(通常是單數)的方式組成,而使用每個指令時,以-parameters
表示參數。
例如: get-command -verb write -none host
get-command 指令
-verb,-none 參數
write 是 -verb的參數內容;host是-none的參數內容
常用快捷鍵
快捷鍵 | Memo |
---|---|
Tab |
最常用的快捷鍵,可以自動完成指令、參數名稱。 |
Ctrl+C |
停止目前指令 |
Ctrl+L |
清除畫面 |
(Ctrl+Shift+)Pageup |
切到上一面 |
(Ctrl+Shift+)Pagedown |
切到下一面 |
get-help by yourself(救你自己!)
一般我們在編寫Powershell指令時,由於Powershell的功能實在太強大,有太多的指令我們無法全部記住,所以我們必須學會使用內建的手冊,來查找我們要使用的指令。
指令 | 說明 | 範例 |
---|---|---|
update-help |
更新Powershell的說明文件 | |
get-help <功能> |
用來查看說明文件 | 取得hyper-v 有關的指令或說明檔get-help *hyper-v* |
get-command <功能> |
用來查找相關指令 | 查找和Hyper-V有關的指令 get-command -Module hyper-v |
get-member <物件> |
查詢或指令相關的Properties | 看$x 物件的屬性 get-member -InputObject $x or $x|get-member |
注意
get-help
*hyper-v*
直接執行可能會顯示不出結果,但是寫在get-command -Module hyper-v
之後卻可以,所以或許兩個指令有對應關係,在查找指令時最好先用get-command
找到未知的指令後,再使用get-help
來查使用方式。
常用CLI指令
因為不確定是否每個人都有使用CLI的經驗,所以特別列一些時常用來檔案管理的幾個指令(最常用的)。
指令 | 說明 | 範例 |
---|---|---|
cd |
到指定目錄 | cd C:\\ |
mkdir |
建立資料夾 | mkdir newfolder |
rm |
刪除檔案 | rm test.txt |
cls |
清空畫面 | |
pwd |
查看現在目錄 | |
echo |
寫資料 | echo "Hello" > World.txt |
Notepad |
打開記事本 | Notepad <路徑> |
code |
有裝VSCODE的話,可以直接用這個指令打開文件編輯程式碼 | code <路徑> |
其他縮寫可以透過get-alias | select name,definition
來查看縮寫與原始指令。
特殊符號
特殊符號: Exchange Cmdlet 語法 | Microsoft
符號 | 說明 | 範例 |
---|---|---|
$ |
代表參數 | $h = get-help |
| |
Pipeline,串接指令用的水管符號 | get-alias|select name |
> |
把指令產生結果輸出成某檔案 (會覆寫) |
get-process > Process.txt |
>> |
把指令產生結果輸出成某檔案 (檔案存在的話會在後面加入) |
get-process >> Process.txt |
* |
1.比對字串 2.乘法運算 3.重複字串 |
1.get-help *keyword* 2. $a * $b 3.”test”*3 –> testtesttest |
[] |
拿來指定索引(index)、資料型態 | 指定索引:$array[3] 指定資料型態: $b = [string]$a |
{} |
用來包指令間的運算式的符號 | 見@ 的範例 |
.. |
表示之間,例如$array[2..5],會回傳array中第二個到第五個間的值 | 見@ 的範例 |
$_ |
表示”每一個”物件,只有在執行指令的範圍有效,例如:$x[0..5].foreach({$_*$_}) 表示0~5每個數字的平方數 |
見@ 的範例 |
@ |
作為關聯陣列的符號 | |
% |
1.在運算式裡面作為”取餘數”的符號 2.在 | 後面作為foreach的速記符號 |
|
? |
where的速記符號 |
比較參數
另外在Powershell的運算式(在{}裡面,見上面範例)中,是使用預留的參數作為比較用途,而非使用符號=
,>
,<
,原因在於Powershell除了可以比較數值大小,也可以比較字串,為了應付不同的比較方式,採用更多種預留參數作為比較運算子。about_Comparison_Operators
查看差異:
由此可知,=
用來定義參數,而-eq
用來判斷,回傳$true
or $false
自動變數
關於自動變數 - PowerShell | Microsoft Docs
參數 | Memo |
---|---|
$Profile |
一個預設拿來存Powershell設定檔的內建參數,可以在此設定每次打開Powershell要載入的函數、模組。 也可以在這定義平常會用到的參數作為自動變數 |
$Error |
顯示近期發生的錯誤訊息。 |
資料處理
Array
您想知道有關於陣列的一切 - PowerShell | Microsoft Docs
算矩陣(供參考)
對$\begin{bmatrix}1&2&3 \\ 4&5&6 \\ 7&8&9\end{bmatrix}$做運算
(橫的為Row列,直的為Col欄,索引從0開始)
Operate | Example |
---|---|
Matrix | $matrix = @(@(1,2,3),@(4,5,6),@(7,8,9)) |
row | $row = $matrix[0] |
col | $col = $matrix | %{$_[0]} |
加法
Action | Memo |
---|---|
列加法 | 第0列+第1列for($i=0;$i -le $matrix.Length;$i++){$matrix[0][$i]+$matrix[1][$i]} |
Action | Memo |
---|---|
欄加法 | 第0行+第1行$matrix | %{$_[0]+$_[1]} |
乘法
Action | Memo |
---|---|
欄乘列 | 欄乘列 $\begin{bmatrix} 1 \\ 4 \\ 7 \end{bmatrix}$ * $\begin{bmatrix}1&2&3\end{bmatrix}=\begin{bmatrix}1∗1&1∗2&1∗3 \\ 4∗1&4∗2&4∗3 \\ 7∗1&7∗2&7∗3\end{bmatrix}=\begin{bmatrix}1&2&3 \\ 4&8&12 \\ 7&14&21\end{bmatrix}$ for($j=0;$j-lt$col.length;$j++){$elements[$j]=for($i=0;$i -lt $row.length;$i++){$col[$j]*$row[$i]}} |
Action | Memo |
---|---|
列乘欄 | 列乘欄 $\begin{bmatrix}1&2&3\end{bmatrix}$*$\begin{bmatrix} 1 \\ 4 \\ 7 \end{bmatrix}$ = 1*1+2*4+3*7=30 $elements = for($i=0;$i-lt$row.Length;$i++){$row[$i] * $col[$i]} $sum = ($elements | Measure-Object -sum).sum |
Hashtable
您想知道有關雜湊表的一切 - PowerShell | Microsoft Docs
可以用來對群組資料做分類,例如今天有個表格資料
Group | Domain | IP |
---|---|---|
AD | ad.company.ad | 192.168.0.3 |
Server1 | server1.company.ad | 192.168.0.4 |
Server2 | server2.company.ad | 192.168.0.5 |
可以使用hashtable來存資料
1 | $group = @{ |
如此一來,就能使用Properties來查這個表格內的相關資料
Exercises
查找題
- 執行
update-help
- 使用
get-help get-content
來學習如何使用此指令
a. 使用get-help get-content -example
來查看範例
b. 使用get-help get-content -onlinn
連去微軟網站看此指令的說明
基本檔案操作+計算+輸出結果題
- 在C槽建立一個名為 pwsh 的資料夾,並且到此目錄底下
- 建立一個名為
Cube.txt
的文字檔案 - 對0~20取立方,輸出結果至
Cube.txt
- 使用指令在CLI介面查看
Cube.txt
的內容
如圖
衍生題
- 請對上面
Cube.txt
的檔案裡的每個數字,標示出是奇數(odd)或偶數(even)
如圖
hint: $x.tostring
- 把上面那題改用雜湊表(hashtable)表示
情境題
(請自行創空白的txt練習)
今天有個檔案夾內的檔案,裡面的檔案名稱因為不明原因全部都有相同的錯誤,請用Powershell來快速修正檔案名稱。
範例: Error_NAME_file01.txt –> Correct_Name_file01.txt
hint: Rename-Item,get-childItem
Reference
get-help
說明系統 - PowerShell | Microsoft Docs
特殊符號
Exchange Cmdlet 語法 | Microsoft
比較參數
資料結構
您想知道有關於陣列的一切 - PowerShell | Microsoft Docs
您想知道有關雜湊表的一切 - PowerShell | Microsoft Docs
快捷鍵
Windows PowerShell 基本操作 - 熱鍵 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)|
Author: Justin Wu
Link: http://hey-series.com/Powershell/from-get-help-to-use-powershell/
License: 知識共享署名-非商業性使用 4.0 國際許可協議