PowerShell 使用

Undefined443發表於2024-06-06

Practice

常用命令

vim $PROFILE  # 編輯配置檔案
Get-ChildItem *> $null  # 拋棄所有輸出
whoami
Remove-Item -Recurse -Force <dir>  # rm -rf
Start-Process <dir>  # macOS 中的 open,alias start
Get-Help <string> -Online
Get-Command <string>  # sh 中的 which
Get-Command pwsh | Select-Object Source  # 只輸出 Get-Command 返回物件的 Source 屬性;Select-Object 也可以用 select 代替
Get-Service sshd
Start-Service sshd
Set-Service -StartupType Automatic sshd
Update-Help -UICulture en-US  # 更新 PowerShell 幫助文件
Unblock-File course.ps1  # 取消阻止從 Internet 下載的檔案

Get-Content 命令也可以顯示變數值:Get-Content Env:PATH

常用環境變數

$Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890"  # 設定環境變數
$Env:http_proxy="";$Env:https_proxy=""  # 清除環境變數
$Env:Path -split ';' | sls python  # 檢視環境變數並篩選 python
$Env:Path += ';C:\Tools'
$Env:USERNAME

配置檔案位置:$PROFILE

about_Profiles

about_PowerShell_Config

about_Environment_Variables

關於指令碼:about_Scripts

安裝 PowerShell 7

winget search Microsoft.PowerShell
winget install --id Microsoft.Powershell --source winget

Oh My Posh

Oh My Posh

安裝

winget install JanDeDobbeleer.OhMyPosh -s winget

Oh My Posh 更新很快,有時會被防毒軟體誤報,可以考慮將可執行檔案路徑 (Get-Command oh-my-posh).Source 加入防毒軟體的白名單。

更新

winget install JanDeDobbeleer.OhMyPosh -s winget

安裝字型

oh-my-posh font install  # 在管理員許可權下執行

官方推薦 MesloLGM NF 字型

啟用 Oh My Posh

notepad $PROFILE  # 編輯 PowerShell 配置檔案

向配置檔案中新增如下內容:

oh-my-posh init pwsh | Invoke-Expression

Oh My Posh 的主題資料夾位置儲存在環境變數 $Env:POSH_THEMES_PATH 中。可以透過命令以下命令檢視。

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json"

PowerShell 101

PowerShell 101

PowerShell 101 中文版

什麼是 101 課程 我們常說的 "101課程",通常是指 XXXX 的入門級課程。在美國,數字 "101" 是大學課程中普遍使用的介紹性課程編號,是對某一個主題的綜覽課程。

因為許多教程的第一章或者導論部分都會用 "101" 做標註,這個詞彙漸漸的就被引申了出來,用來表示基礎入門級課程,變成了一個代號,也就是基礎課程的同義詞。

部落格園: 什麼是 101 課程

管理當前位置

變數

註釋

$a = 1  # 單行註釋

<#
多行註釋
$b = 2
#>

變數

變數名以 $ 開始,不區分大小寫:

$a = 1
$b = 2
$result = $a * $b
$result  # 輸出變數

自動變數

變數名 描述
$? 上一個命令的退出狀態,如果上一個命令執行成功,則 $? 的值為 True,否則為 False
$args 傳遞給指令碼的引數,是一個陣列
$HOME 使用者主目錄
$PWD 當前工作目錄

PowerShell 自動變數 | 易百教程

字串

$s1 = '$a * $b = $result'  # 單引號字串中的變數不會被解析
$s2 = "$a * $b = $result"  # 雙引號字串中的變數會被解析
$s3 = "line1`nline2"  # PowerShell 使用 ` 作為轉義符
$s4 = $(Get-Date)  # 命令替換

PowerShell cmdlets

PowerShell 命令被稱作 cmdlet (發音 command-let),每個cmdlet 的名字由一個動詞-名詞對組成,例如 Get-Process。當你要查詢一個 cmdlet 時,可以指定篩選 cmdlet 的動詞或者名詞。

cmdlet 是原生 PowerShell 命令
PowerShell 命令不區分大小寫

幫助系統

PowerShell 中的三個核心 Cmdlets:

  • Get-Command
  • Get-Help
  • Get-Member

Get-Help

help *process*  # help process
help Get-Help -Full
help Get-Help -Online
help Get-Help -Parameter Name
help Get-Help -Examples

Update-Help

函式 help 的使用體驗要比 cmdlet Get-Help 更好,help 一次只顯示一頁內容,使用空格鍵翻頁。

Update-Help 失敗
Update-Help -UICulture en-US

解決 powershell 7.1 的 Get-Help 找不到對應的詳細幫助 | CSDN

Get-Command

Get-Command 用來定位命令

Get-Command -Verb Get
Get-Command -Noun Process
Get-Command -Name Get-Process

Get-Command -Name *service* -CommandType Cmdlet, Function, Alias  # 使用萬用字元搜尋時最好限制一下命令型別
# 更好的做法是指定 Verb 或 Noun 或同時指定

Get-Command | Get-Random | Get-Help -Full  # Learn a PowerShell command a day

Microsoft Docs: PowerShell 101

Reference

Command Syntax

方括號表示可選項

尖括號是內容佔位符,表示引數的 .NET 型別

型別後面的 [] 表示該引數可以接受多個值,用逗號分隔:

Get-Process [-Name] <string[]>

Get-Process -Name Explorer, Winlogon, Services

花括號表示列舉,表示引數的可選值:

-Option {None | ReadOnly | Constant | Private | AllScope}

-Option ReadOnly

Microsoft Docs: about_Command_Syntax

About Parameter

Microsoft Docs: about_Parameters

引數名和引數值可以用空格分隔,也可以用冒號分隔:

-<parameter_name> <parameter_value>
-<parameter_name>:<parameter_value>

使用 Get-Help cmdlet 獲取命令引數資訊:

Get-Help Get-ChildItem

Get-Help Get-Member -Parameter *  # 獲取關於 Get-Member 的所有引數的資訊

Appendix

Windows Commands

Windows Commands

常用命令

REM 註釋
HELP [command]  REM man
ECHO            REM 顯示訊息,或將命令回顯開啟或關閉
CD              REM 顯示當前目錄的名稱或將其更改
CLS             REM 清除螢幕
START           REM 啟動單獨的視窗以執行指定的程式或命令
SET Path        REM 顯示環境變數 Path
SET var=val     REM 設定環境變數 var 的值為 val
TYPE            REM cat
COPY            REM cp
MOVE            REM mv

RENAME [drive:][path]filename1 filename2           REM 重新命名檔案
REPLACE [drive1:][path1]filename [drive2:][path2]  REM 替換檔案

DIR       REM ls
MKDIR     REM mkdir
DEL       REM rm
RMDIR /S  REM rmdir, 遞迴刪除
MKLINK    REM 建立符號連結和硬連結
ATTRIB    REM 顯示或更改檔案屬性
ICACLS    REM chmod, 顯示、修改、備份或還原檔案和目錄的 ACL
TREE [drive:][path]  REM 顯示目錄結構
TASKLIST  REM ps
TASKKILL  REM kill
PATH [[drive:]path[;...]][;%PATH%]  REM 將 %PATH% 包括在新的路徑設定中會將舊路徑附加到新設定
SHUTDOWN /s /t 30  REM 允許透過本地或遠端方式正確關閉計算機
SC query sshd  REM 查詢服務的狀態
CMD        REM 開啟另一個 Windows 命令解釋程式視窗
EXIT       REM 退出 CMD.EXE 程式(命令解釋程式)

ACL: Access Control List

windows 命令: net 與 sc 的區別 | 簡書

流程控制命令

FOR        REM 為一組檔案中的每個檔案執行一個指定的命令
IF         REM 在批處理程式中執行有條件的處理操作
LABEL      REM 建立、更改或刪除磁碟的卷標
GOTO       REM 將 Windows 命令解釋程式定向到批處理程式中某個帶標籤的行

感興趣的命令

ATTRIB      REM 顯示或更改檔案屬性
CALL        REM 從另一個批處理程式呼叫這一個
CHCP        REM 顯示或設定活動內碼表,中國地區預設是 936 (GBK),可以設定為 65001 (UTF-8)
CHKDSK      REM 檢查磁碟並顯示狀態報告
COMP        REM 比較兩個或兩套檔案的內容
DOSKEY      REM alias
FC          REM 比較兩個檔案或兩個檔案集並顯示它們之間的不同
FIND        REM 在一個或多個檔案中搜尋一個文字字串
FINDSTR     REM 在多個檔案中搜尋字串
MODE        REM 配置系統裝置(也可以檢視內碼表)
MORE        REM 逐屏顯示輸出
PAUSE       REM 暫停批處理檔案的處理並顯示訊息
POPD        REM 還原透過 PUSHD 儲存的當前目錄的上一個值
PUSHD       REM 儲存當前目錄,然後對其進行更改
RECOVER     REM 從損壞的或有缺陷的磁碟中恢復可讀資訊
REM 記錄批處理檔案或 CONFIG.SYS 中的註釋(批註)
ROBOCOPY    REM 複製檔案和目錄樹的高階實用工具
SETLOCAL    REM 開始本地化批處理檔案中的環境更改
SCHTASKS    REM 安排在一臺計算機上執行命令和程式
SORT        REM 對輸入排序
SYSTEMINFO  REM 顯示計算機的特定屬性和配置
XCOPY       REM 複製檔案和目錄樹

常用環境變數

%CD%  REM 當前工作目錄
%USERPROFILE%  REM 使用者主目錄
%PATH%
%PATH:str1=str2%  REM 環境變數替換增強

%USERPROFILE% 包含了驅動器名,而 %HOMEPATH% 則不包含驅動器名

Windows 登錄檔

Windows registry for advanced users - Windows Server | Microsoft Learn

相關文章