<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7646996704860285904</id><updated>2026-05-19T19:31:03.790+08:00</updated><category term="MIS"/><category term="Travel and Play"/><category term="PowerShell"/><category term="Virtualization"/><category term="Windows Script and Batch Files"/><category term="蘇滬杭九日遊"/><category term="Exchange and Outlook"/><category term="Android"/><category term="Free Software"/><category term="VMware"/><category term="網頁設計"/><category term="英法15天蜜月旅行"/><category term="Microsoft"/><category term="SharePoint Online"/><category term="Wordpress"/><category term="docker"/><category term="小琉球"/><category term="CSS"/><category term="JavaScript"/><category term="Script Guy"/><category term="Synology"/><category term="jQuery"/><category term="windows"/><category term="離線地圖"/><category term="AADSync"/><category term="Azure"/><category term="DirSync"/><category term="MOBAC"/><category term="O365"/><category term="Office 365"/><category term="Offline Google Maps"/><category term="上海"/><category term="Excel"/><category term="Hyper-V"/><category term="Jetpack"/><category term="Mobile Atlas Creator"/><category term="Office"/><category term="PHP"/><category term="SharePoint 2013"/><category term="Travel"/><category term="VBA"/><category term="linux"/><category term="血拼"/><category term="遠端協助"/><category term="Automation"/><category term="A貨"/><category term="Browser manipulation &amp; automation"/><category term="CIM"/><category term="Data Center Infrastructure"/><category term="Deco"/><category term="Escape"/><category term="FTP"/><category term="Free Service"/><category term="Game"/><category term="Gmail"/><category term="IIS"/><category term="Internet 程式設計師"/><category term="LDAP"/><category term="M9 Plus"/><category term="Mesh"/><category term="SQL"/><category term="SSL 2.0"/><category term="SSL 3.0"/><category term="Show Photo"/><category term="Synology Chat Webhook"/><category term="TLS 1.0"/><category term="TLS 1.1"/><category term="TP-Link"/><category term="Unescape"/><category term="Venezia"/><category term="WMI"/><category term="WiFi"/><category term="Win 10"/><category term="adb"/><category term="baidu"/><category term="ffmpeg"/><category term="gcp"/><category term="gitlab"/><category term="goaccess"/><category term="header"/><category term="http"/><category term="mobile-theme"/><category term="rsync"/><category term="sms"/><category term="text2speech"/><category term="web log analyzer"/><category term="七浦路"/><category term="上海科技館"/><category term="串流"/><category term="事件檢視器"/><category term="公益活動"/><category term="勇者鬥惡龍5"/><category term="千燈"/><category term="回琉麵館"/><category term="威尼斯"/><category term="婚禮記錄"/><category term="富基漁港"/><category term="小吃"/><category term="文氏管"/><category term="斷線"/><category term="昆山"/><category term="水貨"/><category term="求才"/><category term="求職"/><category term="江南古鎮"/><category term="沉水馬達"/><category term="河坊"/><category term="海底撈"/><category term="清晨"/><category term="清除暫存檔"/><category term="潮間帶"/><category term="田季發爺"/><category term="百度雲管家"/><category term="策略分析"/><category term="簡訊"/><category term="網路卡"/><category term="編碼"/><category term="群組"/><category term="蛤板灣"/><category term="襄陽市場"/><category term="解碼"/><category term="資產調查"/><category term="錦溪"/><category term="雲盤"/><category term="養殖"/><title type='text'>隨手記錄</title><subtitle type='html'>因為是隨手記錄，所以很懶得貼圖說明...^_^||&#xa;如果您有任何疑問，歡迎留言討論。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>238</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-248232200133789805</id><published>2025-09-21T12:52:00.007+08:00</published><updated>2025-09-21T12:54:10.118+08:00</updated><title type='text'>安裝 GEMINI CLI</title><content type='html'>&lt;h3 id=&quot;簡介&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;簡介&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Gemini CLI 是一個互動式命令列代理程式，專為軟體工程任務設計。它能夠理解自然語言指令，並透過執行程式碼、讀取/寫入檔案、執行 shell 命令等方式協助您完成工作。&lt;/p&gt;
&lt;h4 id=&quot;核心功能&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;核心功能&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h5 id=&quot;1.-程式碼理解與修改&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;1. 程式碼理解與修改&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;讀取檔案 (&lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;read_many_files&lt;/code&gt;)&lt;/strong&gt;: 讀取指定檔案或多個檔案的內容，以理解程式碼邏輯、配置等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;搜尋檔案內容 (&lt;code&gt;search_file_content&lt;/code&gt;)&lt;/strong&gt;: 在檔案內容中搜尋特定的正則表達式模式，用於快速定位相關程式碼。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;列出目錄 (&lt;code&gt;list_directory&lt;/code&gt;)&lt;/strong&gt;: 列出指定目錄下的檔案和子目錄，幫助您了解專案結構。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;修改檔案 (&lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;write_file&lt;/code&gt;)&lt;/strong&gt;: 替換檔案中的特定文字或寫入新內容到檔案中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;2.-shell-命令執行&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;2. Shell 命令執行&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;執行各種 shell 命令，例如：&lt;/li&gt;
&lt;li&gt;安裝依賴：&lt;code&gt;npm install&lt;/code&gt;, &lt;code&gt;pip install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;執行測試：&lt;code&gt;npm test&lt;/code&gt;, &lt;code&gt;pytest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;版本控制：&lt;code&gt;git status&lt;/code&gt;, &lt;code&gt;git diff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;啟動服務：&lt;code&gt;node server.js &amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全性提示&lt;/strong&gt;: 在執行會修改檔案系統或系統狀態的命令前，Gemini 會提供簡要說明，請務必仔細閱讀。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;3.-網路搜尋&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;3. 網路搜尋&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google 搜尋&lt;/strong&gt;: 透過 Google 搜尋獲取網路資訊。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;網頁內容擷取&lt;/strong&gt;: 擷取指定 URL 的內容，並可進行摘要或提取特定資料。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;4.-記憶功能：儲存使用者提供的特定事實或偏好，以便在未來的互動中提供更個人化的協助。&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;4. 記憶功能：儲存使用者提供的特定事實或偏好，以便在未來的互動中提供更個人化的協助。&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h5&gt;
&lt;h3 id=&quot;軟體需求&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;軟體需求&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;需要 Nodejs v20 以上版本&lt;/li&gt;
&lt;li&gt;需要 x64 系統(因為 Nodejs v20 以上，只支援 x64)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;安裝步驟&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;安裝步驟&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 id=&quot;下載-node-setup-script-setup_lts.x，並且透過-pipeline-執行&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;下載 Node Setup Script &lt;code&gt;setup_lts.x&lt;/code&gt;，並且透過 pipeline 執行&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;curl -fsSl https://deb.nodesource.com/setup_lts.x &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; -E &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; -
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;以下是-script-內容請參考&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;以下是 script 內容(請參考)&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;#!/bin/bash

# Logger Function
log() {
  local message=&quot;$1&quot;
  local type=&quot;$2&quot;
  local timestamp=$(date &#39;+%Y-%m-%d %H:%M:%S&#39;)
  local color
  local endcolor=&quot;\033[0m&quot;

  case &quot;$type&quot; in
    &quot;info&quot;) color=&quot;\033[38;5;79m&quot; ;;
    &quot;success&quot;) color=&quot;\033[1;32m&quot; ;;
    &quot;error&quot;) color=&quot;\033[1;31m&quot; ;;
    *) color=&quot;\033[1;34m&quot; ;;
  esac

  echo -e &quot;${color}${timestamp} - ${message}${endcolor}&quot;
}

# Error handler function
handle_error() {
  local exit_code=$1
  local error_message=&quot;$2&quot;
  log &quot;Error: $error_message (Exit Code: $exit_code)&quot; &quot;error&quot;
  exit $exit_code
}

# Function to check for command availability
command_exists() {
  command -v &quot;$1&quot; &amp;amp;&amp;gt; /dev/null
}

check_os() {
    if ! [ -f &quot;/etc/debian_version&quot; ]; then
        echo &quot;Error: This script is only supported on Debian-based systems.&quot;
        exit 1
    fi
}

# Function to Install the script pre-requisites
install_pre_reqs() {
    log &quot;Installing pre-requisites&quot; &quot;info&quot;

    # Run &#39;apt-get update&#39;
    if ! apt-get update -y; then
        handle_error &quot;$?&quot; &quot;Failed to run &#39;apt-get update&#39;&quot;
    fi

    # Run &#39;apt-get install&#39;
    if ! apt-get install -y apt-transport-https ca-certificates curl gnupg; then
        handle_error &quot;$?&quot; &quot;Failed to install packages&quot;
    fi

    if ! mkdir -p /usr/share/keyrings; then
      handle_error &quot;$?&quot; &quot;Makes sure the path /usr/share/keyrings exist or run &#39; mkdir -p /usr/share/keyrings&#39; with sudo&quot;
    fi

    rm -f /usr/share/keyrings/nodesource.gpg || true
    rm -f /etc/apt/sources.list.d/nodesource.list || true

    # Run &#39;curl&#39; and &#39;gpg&#39; to download and import the NodeSource signing key
    if ! curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg; then
      handle_error &quot;$?&quot; &quot;Failed to download and import the NodeSource signing key&quot;
    fi

    # Explicitly set the permissions to ensure the file is readable by all
    if ! chmod 644 /usr/share/keyrings/nodesource.gpg; then
        handle_error &quot;$?&quot; &quot;Failed to set correct permissions on /usr/share/keyrings/nodesource.gpg&quot;
    fi
}

# Function to configure the Repo
configure_repo() {
    local node_version=$1

    arch=$(dpkg --print-architecture)
    if [ &quot;$arch&quot; != &quot;amd64&quot; ] &amp;amp;&amp;amp; [ &quot;$arch&quot; != &quot;arm64&quot; ] &amp;amp;&amp;amp; [ &quot;$arch&quot; != &quot;armhf&quot; ]; then
      handle_error &quot;1&quot; &quot;Unsupported architecture: $arch. Only amd64, arm64, and armhf are supported.&quot;
    fi

    echo &quot;deb [arch=$arch signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$node_version nodistro main&quot; | tee /etc/apt/sources.list.d/nodesource.list &amp;gt; /dev/null

    # N|solid Config
    echo &quot;Package: nsolid&quot; | tee /etc/apt/preferences.d/nsolid &amp;gt; /dev/null
    echo &quot;Pin: origin deb.nodesource.com&quot; | tee -a /etc/apt/preferences.d/nsolid &amp;gt; /dev/null
    echo &quot;Pin-Priority: 600&quot; | tee -a /etc/apt/preferences.d/nsolid &amp;gt; /dev/null

    # Nodejs Config
    echo &quot;Package: nodejs&quot; | tee /etc/apt/preferences.d/nodejs &amp;gt; /dev/null
    echo &quot;Pin: origin deb.nodesource.com&quot; | tee -a /etc/apt/preferences.d/nodejs &amp;gt; /dev/null
    echo &quot;Pin-Priority: 600&quot; | tee -a /etc/apt/preferences.d/nodejs &amp;gt; /dev/null

    # Run &#39;apt-get update&#39;
    if ! apt-get update -y; then
        handle_error &quot;$?&quot; &quot;Failed to run &#39;apt-get update&#39;&quot;
    else
        log &quot;Repository configured successfully.&quot;
        log &quot;To install Node.js, run: apt-get install nodejs -y&quot; &quot;info&quot;
        log &quot;You can use N|solid Runtime as a node.js alternative&quot; &quot;info&quot;
        log &quot;To install N|solid Runtime, run: apt-get install nsolid -y \n&quot; &quot;success&quot;
    fi
}

# Define Node.js version
NODE_VERSION=&quot;22.x&quot;

# Check OS
check_os

# Main execution
install_pre_reqs || handle_error $? &quot;Failed installing pre-requisites&quot;
configure_repo &quot;$NODE_VERSION&quot; || handle_error $? &quot;Failed configuring repository&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;安裝-nodejs&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;安裝 Nodejs&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; apt &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; nodejs -y
&lt;span class=&quot;token comment&quot;&gt;# Install gemini-cli of node package&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; -g @google/gemini-cli
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;執行&quot;&gt;&lt;span class=&quot;prefix&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content&quot;&gt;執行&lt;/span&gt;&lt;span class=&quot;suffix&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;export GEMINI_API_KEY=&lt;br&gt;
gemini-cli -m gemini-2.5-flash&lt;/p&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/248232200133789805/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/248232200133789805' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/248232200133789805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/248232200133789805'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2025/09/gemini-cli-gemini-cli-shell-1.html' title='安裝 GEMINI CLI'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-8992857803091500597</id><published>2025-04-18T22:16:00.002+08:00</published><updated>2025-04-18T22:16:38.044+08:00</updated><title type='text'>Certbot</title><content type='html'>&lt;h1 id=&quot;certbot&quot;&gt;Certbot&lt;/h1&gt;
&lt;h2 id=&quot;在安裝之前&quot;&gt;在安裝之前&lt;/h2&gt;
&lt;p&gt;Ubuntu 有可能使用 snap 安裝 certbot&lt;br&gt;
如果同時使用 apt 安裝 certbot，可能會造成干擾&lt;/p&gt;
&lt;h2 id=&quot;檢查-certbot&quot;&gt;檢查 Certbot&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 查看 certbot 安裝的路徑(是否有安裝)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;which&lt;/span&gt; certbot
&lt;span class=&quot;token comment&quot;&gt;# 檢查 certbot 版本&lt;/span&gt;
certbot --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;安裝-certbot-與--google-dns-plugin&quot;&gt;安裝 Certbot 與  Google DNS Plugin&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; apt update
&lt;span class=&quot;token comment&quot;&gt;# 安裝 Certbot 與 Google Cloud DNS Plugin&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; apt &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; -y certbot python3-certbot-dns-google
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;directory-structure&quot;&gt;Directory Structure&lt;/h2&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;letsencrypt
├── accounts
│   ├── acme-staging-v02.api.letsencrypt.org
│   │   └── directory
│   │       └── 180d32a90fcecd7620396273e9c6fd95
│   │           ├── meta.json
│   │           ├── private_key.json
│   │           └── regr.json
│   └── acme-v02.api.letsencrypt.org
│       └── directory
│           └── 515be3a8137b3c8af7b6696dfc3915ad
│               ├── meta.json
│               ├── private_key.json
│               └── regr.json
├── archive (存放憑證的目錄)
│   └── ${main_fqdn}
│       ├── cert1.pem
│       ├── chain1.pem
│       ├── fullchain.pfx
│       ├── fullchain1.pem
│       └── privkey1.pem
├── cli.ini
├── csr (Certbot 自動產生)
│   ├── 0000_csr-certbot.pem
│   └── 0001_csr-certbot.pem
├── keys (Certbot 自動產生)
│   ├── 0000_key-certbot.pem
│   └── 0001_key-certbot.pem
├── live (連結到 archive 目錄下的憑證)
│   ├── README
│   └── ${main_fqdn}
│       ├── cert.pem -&amp;gt; ../../archive/${main_fqdn}/cert1.pem
│       ├── chain.pem -&amp;gt; ../../archive/${main_fqdn}/chain1.pem
│       ├── fullchain.pem -&amp;gt; ../../archive/${main_fqdn}/fullchain1.pem
│       └── privkey.pem -&amp;gt; ../../archive/${main_fqdn}/privkey1.pem
├── options-ssl-nginx.conf
├── renewal
│   └── ${main_fqdn}.conf
├── renewal-hooks
│   ├── deploy
│   ├── post (憑證更新後會執行 Script 的目錄)
│   │   └── post_script.sh
│   └── pre (憑證更新前會執行 Script 的目錄)
└── ssl-dhparams.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;建立目錄結構的指令&quot;&gt;建立目錄結構的指令&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/accounts/acme-staging-v02.api.letsencrypt.org/directory/
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/archive/&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/csr
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/keys
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/live/&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/renewal
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/renewal-hooks/deploy
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/renewal-hooks/post
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; -p /etc/letsencrypt/renewal-hooks/pre
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;檔案介紹&quot;&gt;檔案介紹&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;/etc/letsencrypt/renewal/${main_fqdn}.conf&lt;br&gt;
存放申請憑證的帳號、向誰驗證、驗證方式、金鑰，以及相關憑證存放路徑&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot; language-plaintext&quot;&gt;&lt;code class=&quot;prism  language-plaintext&quot;&gt;# 過期前 30天才能更新憑證
# renew_before_expiry = 30 days
version = 1.21.0
# 憑證存放路徑
archive_dir = /etc/letsencrypt/archive/${main_fqdn}
# 憑證連結路徑名稱
cert = /etc/letsencrypt/live/${main_fqdn}/cert.pem
privkey = /etc/letsencrypt/live/${main_fqdn}/privkey.pem
chain = /etc/letsencrypt/live/${main_fqdn}/chain.pem
fullchain = /etc/letsencrypt/live/${main_fqdn}/fullchain.pem

# Options used in the renewal process
[renewalparams]
# 申請憑證的帳號
account = 515be3a8696dfc3915ad
# 向誰驗證網域
authenticator = dns-google
dns_google_propagation_seconds = 60
# Google Cloud DNS 的金鑰
dns_google_credentials = /root/ssl_bak/myproject-123456.json
server = https://acme-v02.api.letsencrypt.org/directory
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;測試申請憑證&quot;&gt;測試&lt;mark&gt;申請&lt;/mark&gt;憑證&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Test Drive&lt;/span&gt;
certbot certonly \
	--dns-google \
	--dns-google-credentials&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/root/ssl_bak/myproject-123456.json \
	--dns-google-propagation-seconds 60 \
	-d &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;&quot;&lt;/span&gt; \
	-d &lt;span class=&quot;token string&quot;&gt;&quot;*.&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;&quot;&lt;/span&gt; \
	--email mis@&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt; \
	--agree-tos \
	--non-interactive \
	--force-renewal 
	--dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;如果要正式申請憑證，請拿掉 --dry-run 參數&lt;br&gt;
因為 Let’s Encrypt 會限制正式申請憑證測次數&lt;br&gt;
建議先用 --dry-run 測試沒有錯誤，再執行正式申請&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;測試更新憑證&quot;&gt;測試&lt;mark&gt;更新&lt;/mark&gt;憑證&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;certbot renew --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;Saving debug log to /var/log/letsencrypt/letsencrypt.log 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Processing /etc/letsencrypt/renewal/${main_fqdn}.conf 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Simulating renewal of an existing certificate for ${main_fqdn} and 3 more domains Waiting 60 seconds for DNS changes to propagate 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/${main_fqdn}/fullchain.pem (success) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;檢查-certbot-更新憑證的排程服務&quot;&gt;檢查 Certbot 更新憑證的排程服務&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;排程執行，可以使用 cron job 或是 systemd 去管理，certbot 使用 systemd 去管理&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;systemctl list-timers &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; certbot
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;Wed 2025-04-16 04:51:00 CST 2h 12min left 
Tue 2025-04-15 23:02:12 CST 3h 36min ago snap.certbot.renew.timer snap.certbot.renew.service 
Wed 2025-04-16 21:43:00 CST 19h left n/a n/a certbot.timer certbot.service
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;從上面的輸出訊息來看，系統也有 ubuntu snap 套件管理程式安裝的 certbot&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;停用-snap-certbot-排程&quot;&gt;停用 snap certbot 排程&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;systemctl stop snap.certbot.renew.timer
systemctl disable snap.certbot.renew.timer
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;如果要使用-cron-job--排程&quot;&gt;如果要使用 cron job  排程&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;crontab -l 2&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;/dev/null&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0 */12 * * * certbot renew --quiet&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;crontab&lt;/span&gt; -
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-plaintext&quot;&gt;&lt;code class=&quot;prism  language-plaintext&quot;&gt;0 */12 * * * certbot renew --quiet
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;檢查-certbot.timer-排程設定內容&quot;&gt;檢查 certbot.timer 排程設定內容&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;systemctl &lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; certbot.timer
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;# /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;OnCalendar=&lt;em&gt;-&lt;/em&gt;-* 00,12:00:00&lt;br&gt;
RandomizedDelaySec=43200&lt;br&gt;
&lt;strong&gt;每天 2 次&lt;/strong&gt;，大約在凌晨與中午之間，會隨機延遲最多 12 小時執行續期&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;systemctl &lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; certbot.service
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;# /lib/systemd/system/certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://certbot.eff.org/docs
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;usr/bin/certbot -q renew 表示靜默執行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;檢查申請憑證資訊&quot;&gt;檢查申請憑證資訊&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;certbot certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-output&quot;&gt;&lt;code class=&quot;prism  language-output&quot;&gt;Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: ${main_fqdn}
    Serial Number: 625834c79a1b0fbf5
    Key Type: RSA
    Domains: ${main_fqdn} *.${main_fqdn}
    Expiry Date: 2025-07-14 16:28:48+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/${main_fqdn}/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/${main_fqdn}/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;renew-hookspost&quot;&gt;Renew-Hooks/post&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/bash&lt;/span&gt;

DOMAIN&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;&quot;&lt;/span&gt;
PASS&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;1qaz2wsx&quot;&lt;/span&gt;
REMOTE_HOST&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;10.40.2.15&quot;&lt;/span&gt;
REMOTE_USER&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;root&quot;&lt;/span&gt;
ARCHIVE_PATH&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/etc/letsencrypt/archive/&lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt;&quot;&lt;/span&gt;
LIVE_PATH&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/etc/letsencrypt/live/&lt;span class=&quot;token variable&quot;&gt;${DOMAIN}&lt;/span&gt;&quot;&lt;/span&gt;
PFX_FILE&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/fullchain.pfx&quot;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# 1. 產出 PFX&lt;/span&gt;
openssl pkcs12 -export \
  -out &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${PFX_FILE}&lt;/span&gt;&quot;&lt;/span&gt; \
  -inkey &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/privkey1.pem&quot;&lt;/span&gt; \
  -in &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/fullchain1.pem&quot;&lt;/span&gt; \
  -certfile &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/chain1.pem&quot;&lt;/span&gt; \
  -password pass:&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${PASS}&lt;/span&gt;&quot;&lt;/span&gt; \
  -leagcy

&lt;span class=&quot;token comment&quot;&gt;# 2. 傳送所有檔案到遠端&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;scp&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/* &lt;span class=&quot;token variable&quot;&gt;${REMOTE_USER}&lt;/span&gt;@&lt;span class=&quot;token variable&quot;&gt;${REMOTE_HOST}&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/

&lt;span class=&quot;token comment&quot;&gt;# 3. 在遠端建立 symlinks&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${REMOTE_USER}&lt;/span&gt;@&lt;span class=&quot;token variable&quot;&gt;${REMOTE_HOST}&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;EOF
mkdir -p &lt;span class=&quot;token variable&quot;&gt;${LIVE_PATH}&lt;/span&gt;
ln -sf &lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/cert1.pem &lt;span class=&quot;token variable&quot;&gt;${LIVE_PATH}&lt;/span&gt;/cert.pem
ln -sf &lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/chain1.pem &lt;span class=&quot;token variable&quot;&gt;${LIVE_PATH}&lt;/span&gt;/chain.pem
ln -sf &lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/fullchain1.pem &lt;span class=&quot;token variable&quot;&gt;${LIVE_PATH}&lt;/span&gt;/fullchain.pem
ln -sf &lt;span class=&quot;token variable&quot;&gt;${ARCHIVE_PATH}&lt;/span&gt;/privkey1.pem &lt;span class=&quot;token variable&quot;&gt;${LIVE_PATH}&lt;/span&gt;/privkey.pem
EOF&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# 4. 測試並重啟 nginx&lt;/span&gt;
nginx -t &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl reload nginx

&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;將-憑證轉換成-pkcs12&quot;&gt;將 憑證轉換成 pkcs12&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;IIS 使用 PKCS12 格式，它將 Private Key, Full Chain 憑證都包裝成一個檔案&lt;br&gt;
還可以設定密碼(匯入/匯出憑證時會詢問)&lt;br&gt;
很早期的系統只要提供 Private Key &amp;amp; Endpoint Certificate 兩個憑證檔案，&lt;br&gt;
但是科技日新月異，安全性要求越來越高，&lt;br&gt;
所以必須提供中繼憑證 Intermediate Certificate，甚至是 Root Certificate&lt;br&gt;
傳統使用憑證需要 Private Key, Cert, Chain 三個憑證檔案&lt;br&gt;
新一點的系統會需要 Private Key, Full Chain 兩個憑證檔案&lt;br&gt;
Full Chain 通常就是包含 Root, Chain, Cert 三個憑證&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;openssl pkcs12 -export \
	-out /etc/letsencrypt/archive/&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;/fullchain.pfx \
	-inkey /etc/letsencrypt/archive/&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;/privkey1.pem \
	-in /etc/letsencrypt/archive/&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;/fullchain1.pem \
	-certfile /etc/letsencrypt/archive/&lt;span class=&quot;token variable&quot;&gt;${main_fqdn}&lt;/span&gt;/chain1.pem \
	-password pass:1qaz2wsx
	-legacy
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;使用-openssl-檢驗-pkcs12-憑證&quot;&gt;使用 OpenSSL 檢驗 PKCS12 憑證&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;openssl pkcs12 -info -in fullchain.pfx -noout
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;提取-pkcs12-當中的憑證與私鑰&quot;&gt;提取 PKCS12 當中的憑證與私鑰&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;openssl pkcs12 -in fullchain.pfx -clcerts -nokeys -out cert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;提取-pkcs12-當中的私鑰&quot;&gt;提取 PKCS12 當中的私鑰&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;openssl pkcs12 -in fullchain.pfx -nocerts -out privkey.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;提取-pkcs12-當中的chain&quot;&gt;提取 PKCS12 當中的Chain&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;openssl pkcs12 -in fullchain.pfx -cacerts -nokeys -out chain.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;檢查憑證檔案&quot;&gt;檢查憑證檔案&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;openssl x509 -in cert.pem -text -noout
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;檢查私鑰&quot;&gt;檢查私鑰&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;openssl rsa -in privkey.pem -check
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;驗證憑證與私鑰是否匹配&quot;&gt;驗證憑證與私鑰是否匹配&lt;/h2&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;openssl x509 -noout -modulus -in cert.pem &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; openssl md5
openssl rsa -noout -modulus -in privkey.pem &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; openssl md5
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/8992857803091500597/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/8992857803091500597' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/8992857803091500597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/8992857803091500597'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2025/04/certbot_18.html' title='Certbot'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-7227044866753197130</id><published>2024-12-12T17:29:00.001+08:00</published><updated>2024-12-12T17:29:15.651+08:00</updated><title type='text'>Dragon Quest 5</title><content type='html'>&lt;h2 id=&quot;dragon-quest-v-勇者鬥惡龍5&quot;&gt;Dragon Quest V 勇者鬥惡龍5&lt;/h2&gt;
&lt;h3 id=&quot;遊戲攻略概述，整個遊戲分成三階段&quot;&gt;遊戲攻略概述，整個遊戲分成三階段&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;幼兒期5歲~跟著父親帕帕斯王到處冒險&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;收刮船上物資&lt;/li&gt;
&lt;li&gt;聖玫瑰村：先到家門口的井中撿取聖玫瑰石，再到村口旁的農田，找農夫交談(沒撿到聖玫瑰石，會得不到聖原石訊息；沒交談會找不到聖原石)，會得到聖原石的訊息，然後進入村中山洞救道具店老闆，調查壓住道具店老闆的石頭，可獲得聖原石(等壯年期可在艾爾赫文找到工匠打磨成聖寶石，名產品之一，可鑲在亨利王子送的音樂盒上)&lt;br&gt;
小技巧：-   練到 Level 5 以上，學會荷依米治療，且生命至少有 20 點以上(怪物大木鎚會經常出大招)，再繼續往下層探險&lt;/li&gt;
&lt;li&gt;從阿爾卡帕村與碧安卡一起到勒努爾城解放鬼魂，收集銀質茶具、取得金色寶珠，回到阿爾卡帕村後，殺人豹加入同伴&lt;br&gt;
小技巧：-   多買些氣味袋，縮短練功時間
&lt;ul&gt;
&lt;li&gt;大約練到 Level 10 ，就可以很輕鬆打敗鬼魂老大&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;到妖精之村協助取回春風長笛，獲得櫻花樹枝(名產品之一，沒其他用途)&lt;br&gt;
小技巧：-   大約練到 Level 15 就可以輕鬆打敗怪物變成的雪之女王
&lt;ul&gt;
&lt;li&gt;雪之國的城堡外面左邊有寶箱&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Level 20 到古代遺蹟拯救亨利王子~父親帕帕斯被蓋瑪殺死，主角及亨利被蓋瑪擄去當奴隸&lt;br&gt;
小技巧：-   多準備一些氣味袋，在古代遺跡中盡快找到帕帕斯，陪同一起練功，帕帕斯生命、醫療法術用不完，而且會幫忙打怪&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;青年期15歲~&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;從大神殿逃出~到修道院，取得木雕女神像(裝備後幸運值上升)&lt;/li&gt;
&lt;li&gt;告別瑪麗亞，與亨利一起踏上返鄉歸途&lt;/li&gt;
&lt;li&gt;在聖果鎮跟怪物爺爺談話，去神諭之屋買馬車&lt;br&gt;
小技巧：-   雙六遊戲券別急著去玩，你可以存檔後去玩玩看，瞭解一下這是什麼樣的遊戲，然後直接跳出遊戲，再重新載入
&lt;ul&gt;
&lt;li&gt;所有遊戲券累積到最後，去暗黑雙六台玩，終點是名人卡，有名人卡以後玩雙六都不用券&lt;/li&gt;
&lt;li&gt;最後只要留一張雙六券，用來完成回憶項鏈(名產品之一，沒其他用途)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;到聖玫瑰村中山洞取回父親遺物，帕帕斯之劍、帕帕斯的信、天空之劍&lt;br&gt;
小技巧：有幾隻怪物必須要抓，後面遊戲會比較輕鬆-
&lt;ul&gt;
&lt;li&gt;史萊姆&lt;/li&gt;
&lt;li&gt;史萊姆騎士：對冰系及火系法術有基本抗性，此外能使用多數裝備，例如：斬龍劍(對龍系怪物傷害加倍)、淺眠之劍(對隱藏魔王艾斯塔克很有效)、風雪之劍(對大魔王米爾德拉斯很有效)&lt;/li&gt;
&lt;li&gt;雪人：冰系怪物，升級有點慢，等到學會冰雨特技，就可以不花MP打怪，尤其是取得火之戒指時就很好用。&lt;/li&gt;
&lt;li&gt;迷你龍：火系怪物，升級有點慢，等到學會火燄氣息，就可以不花MP打怪&lt;/li&gt;
&lt;li&gt;邪惡蘋果/青果怪：風系怪物，升等快，可以馬上協助練功，但只能升到20級，所以要搭配其他怪物&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;到阿爾卡帕村附近練功，在旅店睡兩次，就可以得到安眠枕(名產品之一，戰鬥中使用，會丟向怪物，偶爾會有催眠效果)&lt;/li&gt;
&lt;li&gt;到萊茵海特城，從城堡右側搭木閥，進入城門橋下的洞；讓亨利認親~告知國王假太后資訊&lt;/li&gt;
&lt;li&gt;到神之塔→再到修道院找修女，瑪麗亞會加入隊伍(有瑪麗亞才能打開神之塔的門)→取得太陽神鏡&lt;/li&gt;
&lt;li&gt;到萊茵海特城，在假太后面前使用太陽神鏡，殺掉假太后&lt;br&gt;
小技巧：有幾隻怪物必須要抓，後面遊戲會比較輕鬆-   殺掉假太后之後，就無法在進入神之塔，所以在殺掉假太后之前，神之塔的寶物要先搜刮完&lt;/li&gt;
&lt;li&gt;搭船到波特賽爾密&lt;/li&gt;
&lt;li&gt;在波特賽爾密酒店救人&lt;/li&gt;
&lt;li&gt;到卡波奇村西邊洞窟，主角身上要放碧安卡的緞帶，戰鬥時使用，給殺人豹聞，即可結束戰鬥，殺人豹會加入隊伍；如果是其他怪物身上放碧安卡的緞帶，只是會退出戰鬥，離開洞穴。&lt;/li&gt;
&lt;li&gt;到卡波奇村長家領賞&lt;/li&gt;
&lt;li&gt;到魯拉菲爾學習法術&lt;/li&gt;
&lt;li&gt;取得魯拉月草&lt;/li&gt;
&lt;li&gt;取得魯拉菲爾的地方酒(名產品之一，沒其他用途)&lt;/li&gt;
&lt;li&gt;到薩拉波納鎮求親&lt;/li&gt;
&lt;li&gt;取得火之戒指&lt;br&gt;
小技巧：-   多準備些氣味袋，洞窟中有全體復原的神壇，很適合練功
&lt;ul&gt;
&lt;li&gt;洞中怪物怕冰系法術，記得在萊茵海特城要先抓隻雪人&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;到深山之村找回碧安卡(在阿爾卡帕2樓露台，老人會透露碧安卡搬到哪去)&lt;/li&gt;
&lt;li&gt;帶碧安卡一起去取得水之戒指，如果碧安卡太弱，進山洞前調整隊伍，不要讓碧安卡在隊伍即可，只是樂趣會減少些(少了一個人時不時在耳邊嘮叨 XD)&lt;/li&gt;
&lt;li&gt;新娘三選一(碧安卡、狄波拉、芙蘿拉)
&lt;ul&gt;
&lt;li&gt;碧安卡對話態度感覺像是姊弟&lt;/li&gt;
&lt;li&gt;狄波拉對話態度感覺像是主僕&lt;/li&gt;
&lt;li&gt;芙蘿拉對話態度感覺像是夫妻&lt;/li&gt;
&lt;li&gt;這三個人物的素質影響不大，因為剛結婚加入隊伍時，人物太弱，只能放在馬車中升等，不能放出來戰鬥。&lt;/li&gt;
&lt;li&gt;等練的差不多了，又會被魔物擄去、石化&lt;/li&gt;
&lt;li&gt;等到主角壯年期後期救回時，人物強度跟不上隊伍，也只能放在馬車中升等。&lt;/li&gt;
&lt;li&gt;三位新娘必要的法術都會有&lt;/li&gt;
&lt;li&gt;選狄波拉或是芙蘿拉當妻子，魯德曼會在遊戲過程中送些武器、裝甲、錢&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;獲得紅白包子(名產品之一，不確定還有什麼變化，因為紅白包子的物品代號就有三個！根據網友的說明，包子上面印有不同人像)&lt;/li&gt;
&lt;li&gt;跟德魯曼告別，獲得天空之盾&lt;/li&gt;
&lt;li&gt;到名產博物館，跟老鬼交談，得到大徽章訊息&lt;/li&gt;
&lt;li&gt;特魯帕多爾，有天空之盔的消息，要等兒子長大才能拿走；防具店有沙漠玫瑰的消息，在旅店睡一晚，隔天在城外就可以找到沙漠玫瑰。記得拿兩次沙漠玫瑰，一個要到碧安卡的村子中的水井裡，換溫泉精華素。&lt;/li&gt;
&lt;li&gt;然後去徽章王城堡，先跟旅店老闆娘講話，買徽章形巧克力(名產品之一)，然後找徽章王談話，再找旅店老闆娘、銀行大叔分別交談，最後出城，到河邊就會看到大徽章，救了史萊姆，它就會把大徽章塞給你，(名產品之一，可以當盾牌裝備)~然後回到名產博物館，跟老鬼對話，成為博物館長&lt;/li&gt;
&lt;li&gt;前往齊索特村的山道，在齊索特村洞口跟小孩說話，再回去找齊索特老太太，就會給你齊索特羅盤(名產品之一，使用時會告訴你所在位置)&lt;/li&gt;
&lt;li&gt;前往格蘭巴尼亞國，在城堡裡面的右邊，有個小房子，是桑喬的住所，去找他就會帶你上樓找國王。&lt;/li&gt;
&lt;li&gt;在二樓左下角酒吧裡的空位，找到一顆怪物象棋，交給最左邊的士兵，就可以獲得怪物象棋(名產品之一，沒其他用途)&lt;/li&gt;
&lt;li&gt;取得王家之證~成為國王&lt;/li&gt;
&lt;li&gt;老婆被魔物擄走&lt;/li&gt;
&lt;li&gt;在大臣房中取得飛天鞋&lt;/li&gt;
&lt;li&gt;或者在城堡左上角房間取得怪物象棋(如果被石化後再被兒子女兒救回，就得找皮皮恩了，讓皮皮恩加入隊伍，出城，在回城叫皮皮恩休息，然後去找皮皮恩對話)&lt;/li&gt;
&lt;li&gt;救老婆不成~被石化&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;壯年期3X歲~&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;被兒子、女兒救回&lt;/li&gt;
&lt;li&gt;臨行前佣人交給主角帕帕斯的遺物-回憶項鏈(名產品之一，沒其他用途，目前是空的，沒畫像)&lt;/li&gt;
&lt;li&gt;回母親故鄉艾爾赫文，取得魔毯及魔法鑰匙；把聖原石加工琢磨成聖寶石&lt;/li&gt;
&lt;li&gt;前往天空之塔塔頂，取得岩漿法杖&lt;/li&gt;
&lt;li&gt;從地下遺跡洞窟前往天空城&lt;/li&gt;
&lt;li&gt;前往妖精之村，取得妖精號角&lt;/li&gt;
&lt;li&gt;前往妖精之城，回到過去的聖玫瑰村，以發光寶珠換走金色寶珠&lt;/li&gt;
&lt;li&gt;返回天空城，操控天空城，飛到波布爾塔的草地降落&lt;/li&gt;
&lt;li&gt;前往波布爾塔~打敗蓋瑪、賈貢，取得龍之寶珠、龍之法杖，回天空城救龍王，得到天空之鈴&lt;/li&gt;
&lt;li&gt;前往薩拉波納，找德魯曼，德魯曼要求去看神壇封印顏色；再回薩拉波納，士兵叫你去塔裡找德魯曼，然後德魯曼就溜了！只能硬著頭皮打敗普翁！會得到最終鑰匙。&lt;/li&gt;
&lt;li&gt;如果老婆不是選碧安卡，跟魯德曼的老婆對話，會給 5000元零用錢…&lt;/li&gt;
&lt;li&gt;前往大神殿救老婆，先取得天空之鎧，打敗兩個魔頭，取得生命戒指&lt;/li&gt;
&lt;li&gt;前往從艾爾赫文的海中洞窟一直往北走，進入海中神殿，對女神獻上水之戒指、火之戒指、生命戒指，進入魔界，取得賢者之石&lt;/li&gt;
&lt;li&gt;前往賈漢納，練功&lt;/li&gt;
&lt;li&gt;前往暗黑雙六~取得名人卡&lt;/li&gt;
&lt;li&gt;前往各地雙六&lt;/li&gt;
&lt;li&gt;前往邪惡山脈，打敗蓋瑪，他會經常麻痺敵人，所以每個人身上要準備一些滿月草，最好還會奇阿里克法術。最後打敗大魔王米爾德拉斯&lt;/li&gt;
&lt;li&gt;前往妖精之城，從二樓右翼畫中，進入過去的艾爾赫文，先去長老樓上閣樓，跟士兵對話，再去旅店跟老闆對話，再去找閣樓士兵，使用雙六遊戲券，士兵就會離開；接著去工匠室，跟帕帕斯及畫師對話，離開艾爾赫文回到現實；跟妖精之城一樓右後方歷史學者對話，再去妖精之村一樓圖書館裡的妖精對話，取得妖精的羽毛筆；連同象牙墨水一起帶在身上，再回到妖精之城二樓右翼畫中，進入過去的艾爾赫文，跟帕帕斯對話，把妖精的羽毛筆以及象牙墨水一起借給帕帕斯。再去瑪薩的房間跟所有人對話，離開過去的艾爾赫文，再從畫中進入過去的艾爾赫文，然後去工匠房找到畫師，取回妖精的羽毛筆及象牙墨水(此時回憶項鏈已自動完成畫像)&lt;/li&gt;
&lt;li&gt;前往邪惡山脈南面的沼澤迷宮(沒有打敗一次大魔王之前，是無法進入的)&lt;/li&gt;
&lt;li&gt;前往迷之雙六，最終獎品是迷你怪物艾克塔斯，連帶可以去找普翁加入。&lt;/li&gt;
&lt;li&gt;取得暗黑獎盃(名產品之一，沒其他用途)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;貼心提醒：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;青年期之後，古代遺跡就完全沒怪物了，所以建議在幼童期，多多打怪，這樣怪物圖鑒才會有記錄。&lt;/li&gt;
&lt;li&gt;青年期在打敗萊茵海特的假太后之後，神之塔就無法再進入(因為瑪麗亞會跟亨利一起脫隊結婚)，所以寶物一定要拿完，怪物也要多打。&lt;/li&gt;
&lt;li&gt;到壯年期之後，萊茵海特的地下通道也會無法進入(木筏會消失，皇宮中庭樓梯會消失)，記得寶物要拿完&lt;/li&gt;
&lt;li&gt;在青年期要救老婆之前，一定要記得先取得怪物象棋；之後要取得怪物象棋，請將士兵皮皮恩帶出去，再留下來，然後去找他對話，他就會給你怪物象棋了。&lt;/li&gt;
&lt;li&gt;玩雙六最好是等拿到暗黑獎盃之後，因為某些格子會永久降主角的基本屬性。&lt;/li&gt;
&lt;li&gt;玩雙六最好身上多帶些錢，因為某些格子是道具店，可以買到特別的裝備！例如：星降手環、破壞鐵球(攻擊全體的最強武器，想想看一隊四人全部都裝備破壞鐵球，一輪攻擊將近600點)等。&lt;/li&gt;
&lt;/ol&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/7227044866753197130/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/7227044866753197130' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7227044866753197130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7227044866753197130'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/07/dragon-quest-5.html' title='Dragon Quest 5'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-7879633593853412001</id><published>2024-12-12T15:59:00.002+08:00</published><updated>2024-12-12T16:19:04.267+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="adb"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="sms"/><category scheme="http://www.blogger.com/atom/ns#" term="簡訊"/><title type='text'>ADB Send Short Message</title><content type='html'>&lt;h1 id=&quot;使用安卓手機搭配-adb-發送簡訊&quot;&gt;使用安卓手機搭配 ADB 發送簡訊&lt;/h1&gt;
&lt;h3 id=&quot;操作程序：&quot;&gt;操作程序：&lt;/h3&gt;
&lt;ol start=&quot;0&quot;&gt;
&lt;li&gt;安裝 ADB 工具&lt;/li&gt;
&lt;li&gt;手機設定啟用&lt;a href=&quot;https://developer.android.com/studio/debug/dev-options?hl=zh-tw#enable&quot;&gt;開發人員選項&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;手機啟用 USB 偵錯模式&lt;/li&gt;
&lt;li&gt;使用 USB 線，將手機連接電腦，並在手機上允許電腦進行偵錯&lt;/li&gt;
&lt;li&gt;開啟終端機視窗&lt;/li&gt;
&lt;li&gt;執行發送命令程式&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;ADB shell am start -a android.intent.action.SENDTO -d sms:&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;TARGET_PHONE_NUMBER&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; --es sms_body &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;SMS_CONTENT&amp;gt;&quot;&lt;/span&gt; --ez exit_on_sent &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;注意：&quot;&gt;注意：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;網路上流傳的 keyevent 其實就是在移動一個看不見的鼠標，將鼠標移動到簡訊發送鈕上，再送出 keyevent 66 (Enter)&lt;/li&gt;
&lt;li&gt;這會因為手機品牌型號不同，簡訊程式發送鈕的位置佈局不同，甚至同一個目標門號有歷史紀錄，都導致 keyevent 執行的代碼與次數不同&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;解決方法：&quot;&gt;解決方法：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;手機操作到發送簡訊的畫面&lt;/li&gt;
&lt;li&gt;終端機執行 ADB Dump UI 結構的指令&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;adb shell uiautomator dump
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;將 UI 結構的 XML 檔案拉回電腦上&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;adb pull /sdcard/window_dump.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;從 XML 檔案中，找到發送鈕的資訊&lt;/li&gt;
&lt;li&gt;改用 adb shell input tap   座標方式發送&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;以我的手機為例：&quot;&gt;以我的手機為例：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Dump UI XML&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;adb shell uiautomator dump
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/tom-blog-media/markdown_note/2024-12-12/wCN01XLKeuGgzYdn.png&quot; alt=&quot;输入图片说明&quot;&gt;&lt;br&gt;
2. Pull File to Windows，檔案會存在當前目錄下&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;adb pull /sdcard/window_dump.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/tom-blog-media/markdown_note/2024-12-12/Rzsrbmu6OHco6Jic.png&quot; alt=&quot;输入图片说明&quot;&gt;&lt;br&gt;
3. 打開 XML 檔案，找到發送鈕的 resource-id，其中就包含左上右下的座標&lt;br&gt;
&lt;img src=&quot;https://storage.googleapis.com/tom-blog-media/markdown_note/2024-12-12/lYLRO4CRGZr5S5ae.png&quot; alt=&quot;输入图片说明&quot;&gt;&lt;br&gt;
4. 計算一下大約要 tap 的座標&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;915 + (1047 - 915) / 2 = 981
2116 + (2180 - 2116) / 2 = 2148
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;執行點擊座標的程式&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;adb shell input tap 981 2148
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;備註：&quot;&gt;備註：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;XML 檔案包含簡訊應用程式的名稱，我的手機應用程式名稱是 &lt;strong&gt;&lt;code&gt;com.google.android.apps.messaging&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;reference：&quot;&gt;Reference：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.android.com/tools/adb?hl=zh-tw&quot;&gt;Android Debug Bridge (adb)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.android.com/reference/android/view/KeyEvent&quot;&gt;Android adb KeyEvent&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/7879633593853412001/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/7879633593853412001' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7879633593853412001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7879633593853412001'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/12/adb-send-short-message_12.html' title='ADB Send Short Message'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-8184214737327487794</id><published>2024-11-25T11:27:00.002+08:00</published><updated>2024-12-12T16:19:57.353+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="goaccess"/><category scheme="http://www.blogger.com/atom/ns#" term="web log analyzer"/><title type='text'>GoAccess</title><content type='html'>&lt;h2 id=&quot;goaccess---visual-web-log-analyzer&quot;&gt;GoAccess - Visual Web Log Analyzer&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;這是一個支援各種 Web Service Log 的分析程式，內建了 Apache &amp;amp; Nginx 的 Log 格式設定&lt;/li&gt;
&lt;li&gt;也可以支援 自訂 Log 格式&lt;/li&gt;
&lt;li&gt;Geo Location 需要搭配 MAXMind GeoLite2 Database，才會有訪客地域分析&lt;/li&gt;
&lt;li&gt;手動自行編譯，才能使用完整的功能&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;安裝方式介紹&quot;&gt;安裝方式介紹&lt;/h2&gt;
&lt;h3 id=&quot;下載原始碼，自行編譯&quot;&gt;下載原始碼，自行編譯&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;這裡並沒有補上相依的函式庫，請自行編譯時，查看錯誤訊息，下載相關函式庫工具一起編譯&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://tar.goaccess.io/goaccess-1.9.3.tar.gztar -xzvf goaccess-1.9.3.tar.gzcd goaccess-1.9.3/./configure --enable-utf8 --enable-geoip&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mmdb --enable-geomapmakemake &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;透過-apt-安裝&quot;&gt;透過 apt 安裝&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;沒有 Geo Location World Map&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg &amp;gt;/dev/nullecho &quot;deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main&quot; | sudo tee /etc/apt/sources.list.d/goaccess.listsudo apt-get updatesudo apt-get install goaccess
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;用程式及設定檔路徑：/etc/goaccess/goaccess.conf/usr/bin/goaccess&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;使用-github-版本編譯安裝&quot;&gt;使用 GitHub 版本編譯安裝&lt;/h3&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 從 GitHub 下載原始碼(這裡環境使用 Ubuntu)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/allinurl/goaccess.gitcd goaccess
&lt;span class=&quot;token comment&quot;&gt;# 安裝相依的套件&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; apt &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; autopoint build-essential gettext libmaxminddb-dev libncursesw5-dev -yautoreconf -fi
&lt;span class=&quot;token comment&quot;&gt;# 啟用 GeoLite2 資料庫，並啟用 Geo Location Map&lt;/span&gt;
./configure --enable-utf8 --enable-geoip&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;mmdb --enable-geomap
&lt;span class=&quot;token comment&quot;&gt;# 進行編譯&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 進行安裝&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;應用程式及設定檔路徑
&lt;ul&gt;
&lt;li&gt;/usr/local/etc/goaccess/goaccess.conf/usr/local/bin/goaccess&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;設定&quot;&gt;設定&lt;/h3&gt;
&lt;h4 id=&quot;log-時間、日期與欄位格式&quot;&gt;Log 時間、日期與欄位格式&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;不管是 apt 套件版，或是 GitHub 編譯版，預設設定檔都一樣，&lt;code&gt;time-format&lt;/code&gt;,  &lt;code&gt;date-format&lt;/code&gt;,  &lt;code&gt;log-format&lt;/code&gt;, 都沒有設定，所以不能直接使用 (當然也可以在命令列使用參數指定這些格式)&lt;/li&gt;
&lt;li&gt;以下為 nginx 的設定格式&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;time-format %H:%M:%Sdate-format %d/%b/%Ylog-format %h %^[%d:%t %^] &quot;%r&quot; %s %b &quot;%R&quot; &quot;%u&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;指定-geo-ip-地理資料庫&quot;&gt;指定 Geo IP 地理資料庫&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;geoip-database 的設定如下&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;geoip-database /usr/share/GeoIP/GeoLite2-ASN.mmdbgeoip-database /usr/share/GeoIP/GeoLite2-Country.mmdbgeoip-database /usr/share/GeoIP/GeoLite2-City.mmdb
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;命令行直接使用參數指定格式&quot;&gt;命令行直接使用參數指定格式&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;goaccess ~/tmp/access_portal.log.2 --log-format=&#39;%h %^ %e [%d:%t %^] &quot;%r&quot; %s %b &quot;%R&quot; &quot;%u&quot;&#39; --date-format=%d/%b/%Y --time-format=%T -o /var/www/Subs/stats/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;範例&quot;&gt;範例&lt;/h3&gt;
&lt;h4 id=&quot;處理-ad-所有相關紀錄&quot;&gt;處理 AD 所有相關紀錄&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;zcat -f /var/log/nginx/access_AD.log* | /usr/local/bin/goaccess \--enable-panel=GEO_LOCATION \--enable-panel=MIME_TYPE \--enable-panel=CACHE_STATUS \--enable-panel=VISIT_TIMES \--enable-panel=VISITORS \--enable-panel=REFERRERS \--enable-panel=KEYPHRASES \--enable-panel=CACHE_STATUS \--enable-panel=REQUESTS \--enable-panel=REQUESTS_STATIC \&amp;gt; /home/tom/ad.html
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;zcat 會自動處理 .gz 檔案的解壓縮&lt;/li&gt;
&lt;li&gt;如果 Log 檔案很大，又經過多日的 Log Rotate， goaccess 一次處理起來，會很耗用系統資源&lt;/li&gt;
&lt;/ul&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/8184214737327487794/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/8184214737327487794' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/8184214737327487794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/8184214737327487794'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/11/goaccess.html' title='GoAccess'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-4801934611974911593</id><published>2024-07-18T20:02:00.003+08:00</published><updated>2024-12-12T16:20:56.096+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>以 Windows 內建的 AppLocker 來管制使用者執行/安裝應用程式</title><content type='html'>&lt;span style=&quot;font-size: medium;&quot;&gt;AppLocker 是一個用來管制電腦可以運行的程式、Installer(.msi)、指令碼(.bat, .cmd, .vbs, .ps1, .js,...)、DLL、封裝的應用程式(.app, .appx)的服務。&amp;nbsp;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;它從 Windows Server 2008 R2/Windows 7 就已經存在，但是卻很少人使用它。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;其實搞懂它之後，它就是免費強大的資安管理系統！&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;要使用 AppLocker，有一個必要條件，Windows 10 版本需要更新到 22H2 版本以後，不然即使設定好相關的政策與服務，AppLocker 也不會生效！&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;AppLocker 要依靠 AppIDSvc 服務(Application Identity)，看名字就知道是用來識別應用程式的服務 。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;但是，在Windows 10 的服務管理，卻無法設定該服務於開機時自動啟動！&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;網路上多是叫你用 sc.exe 來設定該服務
&lt;/span&gt;&lt;blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;sc config appidsvc start=auto&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;

或是去修改機碼
&lt;/span&gt;&lt;blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppIDSvc]
&quot;Start&quot;=dword:00000002&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;

其實 AppIDSvc 是由 AppID 服務控制，只要設定 AppID 開機自動啟動，AppIDSvc 開機就會自動啟動(但是服務啟動類型仍顯示為手動啟動)

你可以使用 
&lt;/span&gt;&lt;blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;sc config appid start=auto&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;
或是使用 Powershell
&lt;/span&gt;&lt;blockquote&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Set-Service -Name AppID -Startup Automatic&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;注意：這個 AppID 在服務裡是找不到的！所以你沒辦法用服務管理 GUI 來維護。(個人猜測，本來是要在 AD 環境管理的；但是我是沒有AD的環境，只能這樣處理)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;當你重新開機，讓 AppID &amp;amp; AppIDSvc 服務啟動之後&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;你可以透過 c:\windows\system32\secpol.msc 啟動 本機安全性原則管理程式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;安全性原則 &amp;gt; 應用程式控制原則 &amp;gt; AppLocker&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;它分成四大類可以運行的程式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;可執行檔規則&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Windows Installer 規則&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;指令碼規則&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;已封裝的應用程式規則&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;這四項當中，如果都&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #3506ff; color: #2b00fe;&quot;&gt;&lt;b&gt;沒有任何規則時，預設是全部允許執行！&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;但是，當你設定&lt;/span&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #ff0606; color: red; font-size: large;&quot;&gt;&lt;b&gt;有任何一個規則，預設是全部不允許！&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;所以你要做的就是&lt;/span&gt;&lt;b&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #3506ff; color: #2b00fe; font-size: large;&quot;&gt;設定哪些程式允許被執行！&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #3506ff; color: #2b00fe; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #3506ff; color: #2b00fe; font-size: large;&quot;&gt;要讓所有人可以正常運行Windows基本功能，請在這四大項，建立預設規則(D)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;另外，當你要設定拒絕規則時，請&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #ff0606; color: red;&quot;&gt;&lt;b&gt;不要使用內建的 Users 群組名稱&lt;/b&gt;&lt;/span&gt;，這&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #ff0606; color: red;&quot;&gt;&lt;b&gt;會造成連管理者都被拒絕執行！&lt;/b&gt;&lt;/span&gt;請務必&lt;span data-darkreader-inline-color=&quot;&quot; style=&quot;--darkreader-inline-color: #3506ff; color: #2b00fe;&quot;&gt;&lt;b&gt;自行建立一個新群組名稱，然後把使用者帳號加入群組，然後設定該群組拒絕執行。&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows/security/application-security/application-control/windows-defender-application-control/applocker/applocker-overview&quot;&gt;AppLocker&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/applocker/?view=windowsserver2022-ps&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Powershell cmdlet for AppLocker&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/4801934611974911593/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/4801934611974911593' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/4801934611974911593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/4801934611974911593'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/07/windows-applocker.html' title='以 Windows 內建的 AppLocker 來管制使用者執行/安裝應用程式'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-4992723536094519399</id><published>2024-07-18T19:33:00.002+08:00</published><updated>2024-07-18T19:34:28.982+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><title type='text'>Docker Engine API</title><content type='html'>&lt;h1 id=&quot;docker-engine-api&quot;&gt;Docker Engine API&lt;/h1&gt;
&lt;h2 id=&quot;docker-的架構&quot;&gt;Docker 的架構&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;下圖是 Docker 官方的架構圖&lt;/li&gt;
&lt;li&gt;由圖可知，Docker Client 與 Docker Host 是可以分開的&lt;/li&gt;
&lt;li&gt;而我們一般運行 Docker，Client &amp;amp; Host 是同一台伺服器&lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjlEzl9zqW8yKZiiHzkSbQXer4txPjZm14Tf-ObYHbyi7uJ9lv3MnJKJGl3iNhdUL68nUrqFviG2UuadRfAYAP4uRvnV4YkCZiXsG-O7jVf7KTtDVCHM8e-34Dgtnoa2MNGvjnsad3Hxw/w1233-h651-s-no-gm/?authuser=0&quot; alt=&quot;image.png&quot;&gt;&lt;/li&gt;
&lt;li&gt;Docker Engine 提供了 Web API，讓你可以使用慣用的程式語言來控制 Docker Engine，甚至 Docker Container Apps 的數量(Scale Up/Down)&lt;/li&gt;
&lt;li&gt;另外，Docker Engine 也提供了 &lt;a href=&quot;https://docs.docker.com/engine/api/sdk/&quot;&gt;SDK for Go &amp;amp; Python&lt;/a&gt;，熟悉這兩種語言的人，可以直接使用 SDK&lt;/li&gt;
&lt;li&gt;Docker Engine API 是 RESTful API，你可以很輕鬆地使用 wget, curl, powershell, 或是你慣用的程式語言來存取它。&lt;/li&gt;
&lt;li&gt;要使用 Docker Engine API 之前，必須先知道你的 Docker Engine 版本所使用的 API 版本&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;查詢-docker-api-版本可以使用以下命令&quot;&gt;查詢 Docker API 版本可以使用以下命令&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;docker version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://hackmd.io/_uploads/SJTSwqPQT.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;啟用-docker-engine-api&quot;&gt;啟用 Docker Engine API&lt;/h2&gt;
&lt;h4 id=&quot;docker-engine-api-預設是沒有啟動的，必須自行設定，設定步驟如下&quot;&gt;Docker Engine API 預設是沒有啟動的，必須自行設定，設定步驟如下&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;開啟遠端 Docker Host 上的 Docker Service 設定檔&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 以 systemctl 讀取服務設定&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 第一行是設定檔路徑檔名&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 將第一行的註解符號去除掉，得到完整路徑檔名&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 存入環境變數&lt;/span&gt;
DOCKER_SERVICE_CONF_FILE&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;$(&lt;/span&gt;systemctl &lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; docker.service &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;head&lt;/span&gt; -n 1 &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;s/^#\s//g&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;vi&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${DOCKER_SERVICE_CONF_FILE}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# vi /usr/lib/systemd/system/docker.service&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;修改其中 &lt;strong&gt;ExecStart&lt;/strong&gt; 的命令，增加 &lt;mark&gt;-H tcp://0.0.0.0:2375&lt;/mark&gt; 並存檔。&lt;br&gt;
&lt;img src=&quot;https://hackmd.io/_uploads/HJJEi9DQT.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然後讓 systemd 重新載入 Daemon 相關設定檔，然後重新啟動 Docker&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 讓 systemd 重新載入 Daemon 設定檔&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; systemctl daemon-reload
&lt;span class=&quot;token comment&quot;&gt;# 重新啟動 Docker Daemon&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; systemctl restart docker
&lt;span class=&quot;token comment&quot;&gt;# 檢查 Docker Service 狀態&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; systemctl status docker
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;如果有正常啟動-docker-daemon-會看到如下圖&quot;&gt;如果有正常啟動 docker daemon 會看到如下圖&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://hackmd.io/_uploads/ByOQh5wQT.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;檢查 Docker 是否有監聽 2375 Port&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;lsof&lt;/span&gt; -i -P -n &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; dockerd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://hackmd.io/_uploads/rkGsh9PXT.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; ss -tulpn &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; dockerd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://hackmd.io/_uploads/HJxpn9PX6.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;以上就完成了啟用-docker-engine-api&quot;&gt;以上就完成了啟用 Docker Engine API&lt;/h4&gt;
&lt;hr&gt;
&lt;h2 id=&quot;docker-engine-api-v1.43-簡單列舉容器相關操作&quot;&gt;Docker Engine API v1.43 簡單列舉容器相關操作&lt;/h2&gt;
&lt;h3 id=&quot;查詢-container-資訊&quot;&gt;查詢 Container 資訊&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;br&gt;
http://{docker_host_ip}:2375/containers/json&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;參數&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;all&lt;/td&gt;
&lt;td&gt;boolean，預設值為 false/0，表示只回傳正在運行的容器資訊；all=true/1，表示回傳所有容器資訊；&lt;mark&gt;注意這裡數值的布林值，與Python相同，只有0代表 false，其他數值，不管正負，都代表true&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;limit&lt;/td&gt;
&lt;td&gt;integer，回傳最近幾個Container的資訊，包含沒有在運行的容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;size&lt;/td&gt;
&lt;td&gt;boolean，預設值為 false，回傳資訊增加容器大小&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;filters&lt;/td&gt;
&lt;td&gt;string，設定篩選容器的條件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h4 id=&quot;可用的-filters&quot;&gt;可用的 filters&lt;/h4&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;參數&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ancestor&lt;/td&gt;
&lt;td&gt;指定 “ancestor”: [“image_name”:“image_tag”]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;before&lt;/td&gt;
&lt;td&gt;指定 container_id 或 container_name之前的容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;expose&lt;/td&gt;
&lt;td&gt;指定 expose port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exited&lt;/td&gt;
&lt;td&gt;指定 container exit code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;health&lt;/td&gt;
&lt;td&gt;指定狀態：starting, healthy, unhealthy, none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;id&lt;/td&gt;
&lt;td&gt;指定 Container ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;isolation&lt;/td&gt;
&lt;td&gt;指定隔離狀態：default, process, hyperv；Windows Daemon Only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;label&lt;/td&gt;
&lt;td&gt;指定 {“label”:[“key”]} 或是 {“label”:[“key=value”]}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;指定Container Name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;network&lt;/td&gt;
&lt;td&gt;指定 network_id 或 network_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;publish&lt;/td&gt;
&lt;td&gt;指定 port/proto 或 startport-endport/proto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;since&lt;/td&gt;
&lt;td&gt;指定 container_id 或 container_name之後的容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;status&lt;/td&gt;
&lt;td&gt;指定特定狀態的容器：created, restarting, running, removing, paused, exited, dead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;volume&lt;/td&gt;
&lt;td&gt;指定volume_name 或 volume_id&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;範例：&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;curl http://192.168.13.161:2375/containers/json?all&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;1
curl http://192.168.13.161:2375/v1.43/containers/json?filters&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ancestor&quot;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;nginx:latest&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
curl http://192.168.13.161:2375/containers/json?filters&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;label&quot;&lt;/span&gt;:&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;CallFrom=Powershell&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;查詢指定的-container-資訊&quot;&gt;查詢指定的 Container 資訊&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/json
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;查看-container-內部運行的程式&quot;&gt;查看 Container 內部運行的程式&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/top
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;查看-container-運行的-log&quot;&gt;查看 Container 運行的 Log&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/logs
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;查看-container-內部被異動的檔案目錄&quot;&gt;查看 Container 內部被異動的檔案/目錄&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/changes
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;匯出-container-並下載&quot;&gt;匯出 Container 並下載&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/export
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;持續回傳容器運行資源狀態json&quot;&gt;持續回傳容器運行資源狀態(JSON)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/stats
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;建立容器注意：容器只有建立，並沒有運行&quot;&gt;建立容器(注意：&lt;mark&gt;容器只有建立，並沒有運行&lt;/mark&gt;)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/container/create
&lt;/code&gt;&lt;/pre&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;網址參數&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;string，必須符合正規式 ^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h4 id=&quot;header請指定-content-type-applicationjson&quot;&gt;Header請指定 “Content-Type: application/json”&lt;/h4&gt;
&lt;h4 id=&quot;body-json-簡單列舉參數如下&quot;&gt;Body JSON 簡單列舉參數如下&lt;/h4&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;參數名稱&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Env&lt;/td&gt;
&lt;td&gt;Array of Strings，指定環境變數及值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cmd&lt;/td&gt;
&lt;td&gt;Array of Strings，指定容器啟動時，要執行的命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image&lt;/td&gt;
&lt;td&gt;string，指定容器要使用的 Image Name 以及 Tag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volumes&lt;/td&gt;
&lt;td&gt;指定掛載的磁碟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WorkingDir&lt;/td&gt;
&lt;td&gt;指定命令要在哪個目錄下運行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Labels&lt;/td&gt;
&lt;td&gt;指定 Key/Value 的 Metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HostConfig&lt;/td&gt;
&lt;td&gt;設定網路相關資訊，例如：Port Mapping&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 id=&quot;範例：&quot;&gt;範例：&lt;/h3&gt;
&lt;h4 id=&quot;使用-bash-shell-curl-建立-container&quot;&gt;使用 bash shell curl 建立 Container&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;curl -X POST -H &lt;span class=&quot;token string&quot;&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt; \
-d &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;Image&quot;: &quot;nginx:latest&quot;, &quot;ExposedPorts&quot;: { &quot;80/tcp&quot;: {} }, &quot;HostConfig&quot;: { &quot;PortBindings&quot;: { &quot;80/tcp&quot;: [{ &quot;HostIp&quot;: &quot;&quot;, &quot;HostPort&quot;: &quot;9001&quot; }] } } }&#39;&lt;/span&gt; \
http://192.168.213.214:2375/containers/create
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;使用-powershell-跑迴圈，建立三個-container：web01-web02-web03，分別使用-port-9001-9002-9003，並啟動這三個container&quot;&gt;使用 Powershell 跑迴圈，建立三個 Container：web01, web02, web03，分別使用 Port 9001, 9002, 9003，並啟動這三個Container&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism = language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$head&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Content-Type&#39;&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&#39;application/json&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token variable&quot;&gt;$Port&lt;/span&gt; = 9000
&lt;span class=&quot;token keyword&quot;&gt;For&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;=1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-le&lt;/span&gt; 3&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;+&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$Port&lt;/span&gt;+&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$json&lt;/span&gt;  = &lt;span class=&quot;token string&quot;&gt;&quot;{&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Image&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;nginx:latest&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;, &quot;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$json&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;ExposedPorts&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: { &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;80/tcp&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: {} }, &quot;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$json&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;HostConfig&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: { &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;PortBindings&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: { &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;80/tcp&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: [{ &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;HostIp&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0.0.0.0&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;HostPort&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;: &quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$Port&lt;/span&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot; }] } }, &quot;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$json&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Labels&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot; : {&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;CallFrom&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;:&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Powershell&quot;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;} }&quot;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;# Create Container&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;Invoke-RestMethod&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Method POST &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Uri &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;http://192.168.13.161:2375/containers/create?name=web{0:d2}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Headers &lt;span class=&quot;token variable&quot;&gt;$head&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Body &lt;span class=&quot;token variable&quot;&gt;$json&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# Start Container&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;Invoke-RestMethod&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Method POST &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Uri &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;http://192.168.13.161:2375/containers/web{0:d2}/start&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Headers &lt;span class=&quot;token variable&quot;&gt;$head&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;啟動執行容器start&quot;&gt;啟動執行容器(Start)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/start
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;停止運行容器stop&quot;&gt;停止運行容器(Stop)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/stop
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;重新啟動執行容器restart&quot;&gt;重新啟動執行容器(Restart)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/restart
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;傳送-posix-signal-給容器kill&quot;&gt;傳送 POSIX signal 給容器(Kill)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/kill?signal=[SIGNAL_STRING | SIGNAL_CODE]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;變更容器名稱rename&quot;&gt;變更容器名稱(Rename)&lt;/h3&gt;
&lt;p&gt;Method: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]/rename?name=[new_container_name]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;刪除容器名稱remove&quot;&gt;刪除容器名稱(Remove)&lt;/h3&gt;
&lt;p&gt;Method: &lt;mark&gt;DELETE&lt;/mark&gt;&lt;/p&gt;
&lt;pre class=&quot; language-url&quot;&gt;&lt;code class=&quot;prism  language-url&quot;&gt;http://{docker_host_ip}:2375/containers/[container_id | container_name]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;以上，當你使用錯誤的-method-時，會顯示-page-not-found-錯誤訊息&quot;&gt;以上，當你使用錯誤的 Method 時，會顯示 page not found 錯誤訊息&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://hackmd.io/_uploads/Bka6ChD7a.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;參考資料&quot;&gt;參考資料&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/config/daemon/remote-access/&quot;&gt;Configure remote access for Docker daemon&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://docs.docker.com/engine/api/v1.43/&quot;&gt;Docker Engine API (1.43)&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://docs.docker.com/engine/api/version-history/&quot;&gt;Docker Engine API version history&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://docs.docker.com/engine/api/sdk/&quot;&gt;Develop with Docker Engine SDKs&lt;/a&gt;&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/4992723536094519399/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/4992723536094519399' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/4992723536094519399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/4992723536094519399'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/07/docker-engine-api.html' title='Docker Engine API'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjlEzl9zqW8yKZiiHzkSbQXer4txPjZm14Tf-ObYHbyi7uJ9lv3MnJKJGl3iNhdUL68nUrqFviG2UuadRfAYAP4uRvnV4YkCZiXsG-O7jVf7KTtDVCHM8e-34Dgtnoa2MNGvjnsad3Hxw/s72-w1233-h651-s-c-no-gm/?authuser=0" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-5758461841369650668</id><published>2024-07-18T18:52:00.002+08:00</published><updated>2024-07-18T19:34:34.887+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><title type='text'>docker config</title><content type='html'>&lt;h2 id=&quot;docker-config&quot;&gt;docker config&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;這個命令是用在 Docker Swarm 環境下&lt;/li&gt;
&lt;li&gt;你可以將你的應用程式容器需要的靜態檔案/設定檔，透過 docker config create 存到 Manager Node 上。&lt;/li&gt;
&lt;li&gt;當你的應用程式容器在 Worker Nodes 上部署運行時，可以將這些 config 檔案掛載到容器之中&lt;/li&gt;
&lt;li&gt;它跟 Volume 的差異，在於 Volume 的掛載是無法跨 Nodes，除非每個 Nodes 都去掛載網路磁碟(smb/nfs/…)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;指令表&quot;&gt;指令表&lt;/h3&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指令&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;docker config create&lt;/td&gt;
&lt;td&gt;Create a config from a file or STDIN&lt;/td&gt;
&lt;td&gt;從 STDIN 或是應用程式設定檔來建立 config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docker config inspect&lt;/td&gt;
&lt;td&gt;Display detailed information on one or more configs&lt;/td&gt;
&lt;td&gt;顯示 config 的詳細資訊(其中包含檔案被base64編碼的內容)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docker config ls&lt;/td&gt;
&lt;td&gt;List configs&lt;/td&gt;
&lt;td&gt;條列 Manager Node 上的 config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docker config rm&lt;/td&gt;
&lt;td&gt;Remove one or more configs&lt;/td&gt;
&lt;td&gt;刪除指定的 config&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 id=&quot;用實例離說明：&quot;&gt;用實例離說明：&lt;/h3&gt;
&lt;h4 id=&quot;部署簡單的-php-程式到-worker-node-web&quot;&gt;部署簡單的 php 程式到 Worker Node web&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;建立簡單的 php 程式檔案作為首頁 index.php，用來驗證部署結果&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-php&quot;&gt;&lt;code class=&quot;prism  language-php&quot;&gt;&lt;span class=&quot;token php language-php&quot;&gt;&lt;span class=&quot;token delimiter important&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// 獲取伺服器的 IP 地址&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$server_ip&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;SERVER_ADDR&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 顯示在網頁上&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;伺服器的 IP 地址是: &quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$server_ip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;phpinfo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token delimiter important&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;建立 apache 虛擬主機設定檔 ~/000-default.conf&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerAdmin webmaster@official.company.com
    ServerName official.company.com
    DocumentRoot /var/www/html

    &amp;lt;Directory /var/www/html&amp;gt;
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    &amp;lt;/Directory&amp;gt;

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;以 apache 虛擬主機設定檔 000-default.conf，在 Docker Swarm Manager Node 上，建立 config&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;docker config create apache_vhost ./000-default.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;列出 config，確認一下&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker config &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ3GlFoI6dZKKj_jzG-G4nmJe-pfpphs9AgrhGtYfeBQVPZg53oKOm-Te1AcH4redbOh0yWNnIBuJhvy9s8OXpVycfDX6sB-ZUq_Wmk-q4oapEt-VSvsJEhsFjJ96x1Z7beh3Miu3kwrw/w712-h87-s-no-gm/?authuser=0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;檢查一下 apache vhost config 詳細資訊，你會發現，設定檔內容以 base64 編碼，存在 Data 中&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker config inspect apache_vhost
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdhTsL1zIWWquBPvR8BA2kHImOpPrctO72LSEisnSWzpZ8IT27ZjCT92GIQOBt_2jRvwS44zRB7Ru6hL0nhy0wwThchyphenhyphenNg9XZ0_mkRXPTJ7kLEaGU5tDQqhmOCR3SR4w3NKl2u-m2z6h8/w1261-h371-no/?authuser=0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;驗證一下apache_vhost config內容&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker config inspect apache_vhost &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; jq -r &lt;span class=&quot;token string&quot;&gt;&#39;.[0].Spec.Data&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; base64 --decode
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifqngHb_qnQ5Z1mqaVFEnzSccnZCQsXy9GE1Mm9G-bI_-Cy6LQPxPa0FMwpGyX6olRSnWXSPSSmjbnGGOct7cayTRc2AsKWOYg9_11mGjvA20Bxi09qNf7oTeYL0iXasZJt5yP9NiHTjE/w883-h298-s-no-gm/?authuser=0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;驗證一下 index.php config內容&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker config inspect official_homepage &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; jq -r &lt;span class=&quot;token string&quot;&gt;&#39;.[0].Spec.Data&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; base64 --decode
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcqeUsIxudtcS04Lo9d-DLf_eqEsTopVNMS4KBDVUBk2yQZbQZqgji7YPnzBdVq83-t4t8xcsHhISKDjfTPtadByW7vo27U03cqXAtUI2mPmQd72q0YwO7q-nKR7ocTbpf1kBW_SbSLgw/w923-h201-s-no-gm/?authuser=0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;編寫 docker-compose.yml&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-docker&quot;&gt;&lt;code class=&quot;prism -compose.yml language-docker&quot;&gt;version&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;3.8&#39;&lt;/span&gt;

services&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  php_apache&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    image&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; php&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;7.1&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;apache
    deploy&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      replicas&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1
      placement&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        constraints&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;node.labels.server == web&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    configs&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; source&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; official_homepage
        target&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /var/www/html/index.php
        uid&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;33&#39;&lt;/span&gt;
        gid&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;33&#39;&lt;/span&gt;
        mode&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0444
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; source&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; apache_vhost
        target&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /etc/apache2/sites&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;available/000&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;default.conf
    networks&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; my_network

configs&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  official_homepage&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    external&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; true
  apache_vhost&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    external&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; true

networks&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  my_network&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    driver&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; overlay
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;9&quot;&gt;
&lt;li&gt;執行 odcker stack deploy 進行部署&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism = language-bash&quot;&gt;docker stack deploy -c docker-compose.yml official_homepage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI5w6CEnb_S0iNZz08K4PBpFLLeIbI7d0NrAgTwSyRJBhO20x6IlkYoKEn3zXcA14xyMV-T1BqYvarcIxifCbS6_WAQH0FnRPYNyqFNve7PEewBqNDUZTpNb75QwVKotiiJG8R79iTHPU/w738-h107-s-no-gm/?authuser=0&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
10. 檢查一下，看看 config 是不是都被容器掛載到對應的路徑&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; -a
docker &lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt; -it 6476ac33e359 &lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; /var/www/html/index.php
docker &lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt; -it 6476ac33e359 &lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; /etc/apache2/sites-available/000-default.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyQlLVXfOXbi1f3RfCOYwNG0T01hwcYtRHeSRuZ6Zi9p8bFYrUNuNdDQkU1l_tIqCYb8cS2wjQxskxrYMsPQ5xG-FP-CIlKYJUvpGQSnr-nkv5F6kdCQXXjPuRGG9apzo9wrBx3Xz2dus/w1263-h561-s-no-gm/?authuser=0&quot; alt=&quot;image&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;從上圖可以看到， php:7.1-apache 被部署到 server 標籤為 web 的 node (lab2)&lt;/li&gt;
&lt;li&gt;index.php 與 000-default.conf 也都被掛載到正確的路徑下了&lt;/li&gt;
&lt;/ul&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/5758461841369650668/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/5758461841369650668' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/5758461841369650668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/5758461841369650668'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/07/docker-config.html' title='docker config'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ3GlFoI6dZKKj_jzG-G4nmJe-pfpphs9AgrhGtYfeBQVPZg53oKOm-Te1AcH4redbOh0yWNnIBuJhvy9s8OXpVycfDX6sB-ZUq_Wmk-q4oapEt-VSvsJEhsFjJ96x1Z7beh3Miu3kwrw/s72-w712-h87-s-c-no-gm/?authuser=0" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-8750471626069840516</id><published>2024-07-01T02:15:00.002+08:00</published><updated>2024-07-18T19:34:42.827+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>Linux 上常用的打包壓縮軟體</title><content type='html'>&lt;h2 id=&quot;linux-上常見的打包、壓縮軟體&quot;&gt;Linux 上常見的打包、壓縮軟體&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;tar：(Tape Archive)是一個用於檔案打包的工具，最早用於將多個檔案和目錄打包成一個檔案，便於在磁帶等存儲設備上進行備份和傳輸。&lt;/li&gt;
&lt;li&gt;gzip：使用 DEFLATE 算法，基於 LZ77 和霍夫曼編碼。&lt;/li&gt;
&lt;li&gt;bzip2：使用 Burrows-Wheeler 變換和 Run-Length Encoding (RLE) 算法，並結合霍夫曼編碼。&lt;/li&gt;
&lt;li&gt;xz：使用 LZMA（Lempel-Ziv-Markov chain algorithm）算法，這是一種高度優化的壓縮算法，提供了非常高的壓縮比。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要注意的是，tar 只是打包工具，將多個檔案目錄屬性擁有者ID 等資訊打包成一個 tarball File，本身並沒有壓縮&lt;/p&gt;
&lt;p&gt;所以使用 tar，會搭配 gzip, bzip2, 或是 xz 等壓縮工具，來節省空間或是傳書時間&lt;/p&gt;
&lt;p&gt;壓縮比：gzip &amp;lt; bzip2 &amp;lt; xz&lt;br&gt;
壓縮速度：gzip &amp;gt; bzip2 &amp;gt; xz&lt;br&gt;
解壓縮速度：gzip &amp;gt; bzip2 &amp;gt; xz&lt;br&gt;
資源用量：gzip &amp;lt; bzip2 &amp;lt; xz&lt;/p&gt;
&lt;p&gt;雖然 7z &amp;amp; rar 都有 for Linux 版本，不過在 Linux 上並不流行&lt;/p&gt;
&lt;h4 id=&quot;tar-搭配-gzip-打包壓縮&quot;&gt;tar 搭配 gzip 打包壓縮&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; -zcvf archive.tar.gz /path/to/directory &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;mark&gt;有的人會將 archive.tar.gz 直接命名為 archive.tgz&lt;/mark&gt;&lt;/p&gt;
&lt;h4 id=&quot;tar-搭配-bzip2-打包壓縮&quot;&gt;tar 搭配 bzip2 打包壓縮&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; -jcvf archive.tar.bz2 /path/to/directory &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;mark&gt;注意：參數 j 是小寫&lt;/mark&gt;&lt;/p&gt;
&lt;h4 id=&quot;tar-搭配-xz-打包壓縮&quot;&gt;tar 搭配 xz 打包壓縮&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; -Jcvf archive.tar.xz /path/to/directory &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;mark&gt;注意：參數 J 是大寫&lt;/mark&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;常用參數意義&quot;&gt;常用參數意義&lt;/h4&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;參數&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;Create archive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v&lt;/td&gt;
&lt;td&gt;Verbosely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f&lt;/td&gt;
&lt;td&gt;use archive file or device ARCHIVE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t&lt;/td&gt;
&lt;td&gt;List all files in archive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;Extract files from archive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;append tar files to an archive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;find differences between archive and file system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;r&lt;/td&gt;
&lt;td&gt;append files to the end of an archive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;u&lt;/td&gt;
&lt;td&gt;only append files newer than copy in archive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;hr&gt;
&lt;h3 id=&quot;接下來，搭配-ssh，進行遠端管理&quot;&gt;接下來，搭配 ssh，進行遠端管理&lt;/h3&gt;
&lt;h4 id=&quot;命令遠端伺服器壓縮資料&quot;&gt;命令遠端伺服器壓縮資料&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; user@box &lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; zcvf - /dir1/ &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; /destination/file.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;將-tar-打包輸出的結果，透過-pipe-傳給-gzip，並指定-gzip-壓縮程度&quot;&gt;將 tar 打包輸出的結果，透過 Pipe 傳給 gzip，並指定 gzip 壓縮程度&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; user@box &lt;span class=&quot;token string&quot;&gt;&#39;cd /dir1/ &amp;amp;&amp;amp; tar -cf - file | gzip -9&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;file.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;壓縮本機檔案，然後透過-ssh-傳送到遠端伺服器保存&quot;&gt;壓縮本機檔案，然後透過 SSH 傳送到遠端伺服器保存&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; zcvf - /wwwdata &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;gzip&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; user@dumpserver.nixcraft.in &lt;span class=&quot;token string&quot;&gt;&quot;cat &amp;gt; /backup/wwwdata.tar.gz&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;tar-打包壓縮--gpg加密--ssh-傳送到遠端主機-cat-輸出成檔案&quot;&gt;tar 打包壓縮 &amp;gt; gpg加密 &amp;gt; ssh 傳送到遠端主機 cat 輸出成檔案&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; zcf - /data2/ &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; gpg -e &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; vivek@nas03 &lt;span class=&quot;token string&quot;&gt;&#39;cat - &amp;gt; data2-dd-mm-yyyy.tar.gz.gpg&#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;如果遠端伺服器需要特權，ssh-加上--t-參數，使用-sudo&quot;&gt;如果遠端伺服器需要特權，ssh 加上 -t 參數，使用 sudo&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; zcvf - /wwwdata &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; -t vivek@192.168.1.201 &lt;span class=&quot;token string&quot;&gt;&quot;sudo cat &amp;gt; /backup/wwwdata.tar.gz&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;命令遠端伺服器壓縮檔案，並傳送到本機目前路徑&quot;&gt;命令遠端伺服器壓縮檔案，並傳送到本機目前路徑&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cd&lt;/span&gt; /path/local/dir/ &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; vivek@server1.cyberciti.biz &lt;span class=&quot;token string&quot;&gt;&#39;tar zcf - /some/dir&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; zxf -
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;使用-dd-指令備份硬碟--devsdvf--到遠端&quot;&gt;使用 dd 指令備份硬碟  /dev/sdvf  到遠端&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;dd&lt;/span&gt; if&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/dev/sdvf &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; backupimg@vpc-aws-mumbai-backup-001 &lt;span class=&quot;token string&quot;&gt;&#39;dd of=prod-disk-hostname-sdvf-dd-mm-yyyy.img&#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;從遠端備份硬碟資料還原到本地端&quot;&gt;從遠端備份硬碟資料還原到本地端&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; backupimg@vpc-aws-mumbai-backup-001 &lt;span class=&quot;token string&quot;&gt;&#39;dd if=prod-disk-hostname-sdvf-dd-mm-yyyy.img&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;dd&lt;/span&gt; of&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/dev/sdvf
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;使用-scp-備份，遇到連結或是特殊裝置路徑就會失敗，可以使用-tar-來備份&quot;&gt;使用 SCP 備份，遇到連結或是特殊裝置路徑就會失敗，可以使用 tar 來備份&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; vivek@nuc-box &lt;span class=&quot;token string&quot;&gt;&#39;tar czf - /home/vivek&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; xvzf - -C /home/vivek
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; my-data.tar.gz &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; user@server1.cyberciti.biz &lt;span class=&quot;token string&quot;&gt;&quot;cd /path/to/dest/; tar zxvf -&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;顯示壓縮進度條&quot;&gt;顯示壓縮進度條&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cd&lt;/span&gt; /dir/to/backup/ &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; zcf - &lt;span class=&quot;token keyword&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;pv&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ssh&lt;/span&gt; vivek@server1.cyberciti.biz &lt;span class=&quot;token string&quot;&gt;&quot;cat &amp;gt; /backups/box42/backup-dd-mm-yyyy.tgz&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/8750471626069840516/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/8750471626069840516' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/8750471626069840516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/8750471626069840516'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/07/linux.html' title='Linux 上常用的打包壓縮軟體'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-681448661268632704</id><published>2024-06-28T16:39:00.002+08:00</published><updated>2024-07-18T19:34:51.638+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Windows 沙箱環境設定檔</title><content type='html'>&lt;h2 id=&quot;沙箱環境設定檔-sample&quot;&gt;沙箱環境設定檔 Sample&lt;/h2&gt;
&lt;h3 id=&quot;將xml-內容存成副檔名為-wsb-設定檔，點擊設定檔，就可以按照設定開啟沙箱&quot;&gt;將XML 內容存成副檔名為 ,wsb 設定檔，點擊設定檔，就可以按照設定開啟沙箱&lt;/h3&gt;
&lt;pre class=&quot; language-xml&quot;&gt;&lt;code class=&quot;prism  language-xml&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- 副檔名 .wsb --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Configuration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- 設定是否使用獨立顯卡晶片 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;VGpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Default&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;VGpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Networking&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Default&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;Networking&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- 將本機網路對應到沙箱 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;MappedFolders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;MappedFolder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- 本機路徑 -&amp;gt;&amp;gt;
		&amp;lt;HostFolder&amp;gt;D:\Downloads\Portable Apps&amp;lt;/HostFolder&amp;gt;
		&amp;lt;!-- 是否設定唯讀 --&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ReadOnly&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;true&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ReadOnly&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;MappedFolder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;MappedFolders&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- 啟動沙箱時，要執行的程式 --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;LogonCommand&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;	
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;explorer.exe C:\Users\WDAGUtilityAccount\Desktop\Portable Apps\4K Video Downloader Portable v4.12.5.3670&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;Command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;explorer.exe C:\Users\WDAGUtilityAccount\Desktop\Portable Apps\Musify\Musify.exe&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;Command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;LogonCommand&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;Configuration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/681448661268632704/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/681448661268632704' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/681448661268632704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/681448661268632704'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/06/windows_28.html' title='Windows 沙箱環境設定檔'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-2875563581419564319</id><published>2024-06-28T16:37:00.002+08:00</published><updated>2024-07-18T19:34:57.924+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Windows電腦認證管理員</title><content type='html'>&lt;h2 id=&quot;windows認證管理員&quot;&gt;Windows認證管理員&lt;/h2&gt;
&lt;h3 id=&quot;控制台--使用者帳戶--認證管理員&quot;&gt;控制台 &amp;gt; 使用者帳戶 &amp;gt; 認證管理員&lt;/h3&gt;
&lt;p&gt;不知何時，Windows Update 之後，原先儲存的遠端桌面密碼都沒用了，每次登入都要手動輸入密碼，真的很煩！&lt;br&gt;
使用 cmdkey 指令去查詢，會發現原先儲存的密碼&lt;mark&gt;類型&lt;/mark&gt;，都變成&lt;mark&gt;網域密碼&lt;/mark&gt;，微軟真的很雞婆&lt;/p&gt;
&lt;h3 id=&quot;讀取目前所有遠端桌面terminal-service的認證清單，並全部移除&quot;&gt;讀取目前所有遠端桌面(Terminal Service)的認證清單，並全部移除&lt;/h3&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;$(cmdkey /list:TERMSRV/*) | Where-Object { $_ -match &quot;目標: &quot; } | ForEach-Object {
    $target = $_
    $target = $target -replace &quot;目標: &quot;,&quot;&quot; -replace &quot; &quot;,&quot;&quot;
    (cmdkey /delete:$target)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;重新用一般標準方式儲存，類型會是標準&quot;&gt;重新用一般標準方式儲存，類型會是&lt;mark&gt;標準&lt;/mark&gt;&lt;/h3&gt;
&lt;pre class=&quot; language-cmd&quot;&gt;&lt;code class=&quot;prism  language-cmd&quot;&gt;cmdkey /generic:TERMSRV/[IP] /user:[ACCOUNT] /pass:&quot;[PASSWORD]&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;讀取目前遠端桌面所有認證資訊&quot;&gt;讀取目前遠端桌面所有認證資訊&lt;/h3&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;$Patten = &quot;目標: |類型: |使用者: &quot;
$List = @()
$Info = $(cmdkey /list:TERMSRV/*) | Select-String -Pattern $Patten 
For ($i=0; $i -le $Info.Count; $i+=3){
    $List += New-Object -TypeName PSOBject -Property @{
        &quot;Target&quot; = $Info[$i] -replace &quot;\s+目標:\s+&quot;,&quot;&quot;
        &quot;Type&quot; = $Info[$i+1] -replace &quot;\s+類型:\s+&quot;,&quot;&quot;
        &quot;User&quot; = $Info[$i+2] -replace &quot;\s+使用者:\s+&quot;,&quot;&quot;
    }
}
$Domain = $List | Where-Object { $_.Type -eq &quot;網域密碼&quot; }
If ($Domain.Count -eq 0){
    $List | Sort-Object -Property Target
}Else{
    ForEach($Key in $Domain){
        (cmdkey /delete:$Key.Target)
    }
}
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/2875563581419564319/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/2875563581419564319' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/2875563581419564319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/2875563581419564319'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/06/windows.html' title='Windows電腦認證管理員'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-3913172695598771307</id><published>2024-06-26T18:03:00.002+08:00</published><updated>2024-07-18T19:35:07.583+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="http"/><title type='text'>HTTP Status Code</title><content type='html'>&lt;h2 id=&quot;http-status-code&quot;&gt;HTTP Status Code&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;狀態碼&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;類別&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;Continue&lt;/td&gt;
&lt;td&gt;請求者應繼續進行請求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Switching Protocols&lt;/td&gt;
&lt;td&gt;服務器根據請求切換協議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;td&gt;Processing (WebDAV)&lt;/td&gt;
&lt;td&gt;服務器已經收到並正在處理請求，但無響應可用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;200&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;OK&lt;/td&gt;
&lt;td&gt;請求成功&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;201&lt;/td&gt;
&lt;td&gt;Created&lt;/td&gt;
&lt;td&gt;請求成功並且資源已被創建&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;202&lt;/td&gt;
&lt;td&gt;Accepted&lt;/td&gt;
&lt;td&gt;請求已接受，但尚未處理完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;203&lt;/td&gt;
&lt;td&gt;Non-Authoritative Information&lt;/td&gt;
&lt;td&gt;請求成功，但返回的元數據可能來自第三方源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;204&lt;/td&gt;
&lt;td&gt;No Content&lt;/td&gt;
&lt;td&gt;請求成功但無內容返回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;205&lt;/td&gt;
&lt;td&gt;Reset Content&lt;/td&gt;
&lt;td&gt;請求成功，要求重置文檔視圖&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;206&lt;/td&gt;
&lt;td&gt;Partial Content&lt;/td&gt;
&lt;td&gt;服務器成功處理了部分 GET 請求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;207&lt;/td&gt;
&lt;td&gt;Multi-Status (WebDAV)&lt;/td&gt;
&lt;td&gt;返回多個資源的狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;208&lt;/td&gt;
&lt;td&gt;Already Reported (WebDAV)&lt;/td&gt;
&lt;td&gt;DAV 之前已經枚舉的成員，不需要再次列出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;226&lt;/td&gt;
&lt;td&gt;IM Used&lt;/td&gt;
&lt;td&gt;伺服器完成了對資源的 IM（instance-manipulations）請求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;Multiple Choices&lt;/td&gt;
&lt;td&gt;請求的資源有多個表示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;301&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Moved Permanently&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;永久重定向&lt;/strong&gt;：HTTP 301 狀態碼表示資源已永久移動到新的 URL，未來的請求應該使用新的 URL&lt;br&gt;&lt;strong&gt;緩存行為&lt;/strong&gt;：瀏覽器和搜索引擎會更新資源的 URL 並緩存這個重定向，未來的請求將自動使用新 URL&lt;br&gt;&lt;strong&gt;SEO&lt;/strong&gt;：對於搜索引擎優化（SEO），301 重定向將權重轉移到新的 URL 上，這有助於保持網站的排名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;302&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Found&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;臨時重定向&lt;/strong&gt;：HTTP 302 狀態碼表示資源臨時移動到新的 URL，未來的請求應該仍使用原始 URL。&lt;br&gt;&lt;strong&gt;緩存行為&lt;/strong&gt;：瀏覽器和搜索引擎通常不會緩存這個重定向，未來的請求仍然會訪問原始 URL。&lt;br&gt;&lt;strong&gt;SEO&lt;/strong&gt;：對於 SEO，302 重定向不會將權重轉移到新的 URL 上，因為它被認為是臨時的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;303&lt;/td&gt;
&lt;td&gt;See Other&lt;/td&gt;
&lt;td&gt;請求的資源可在其他 URI 上找到，應使用 GET 方法獲取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;304&lt;/td&gt;
&lt;td&gt;Not Modified&lt;/td&gt;
&lt;td&gt;資源未修改，可以使用緩存版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;305&lt;/td&gt;
&lt;td&gt;Use Proxy&lt;/td&gt;
&lt;td&gt;請求應通過代理訪問資源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;307&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Temporary Redirect&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;暫時重定向&lt;/strong&gt;：HTTP 307 表示這個重定向是臨時的。未來請求仍然應該使用原始 URL。&lt;br&gt;&lt;strong&gt;保持方法和正文&lt;/strong&gt;：與 302 Found 狀態碼不同，307 明確要求客戶端在重定向時保持原始的 HTTP 方法和請求正文。例如，如果原始請求是 POST，重定向後仍然是 POST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;308&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Permanent Redirect&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;永久重定向&lt;/strong&gt;：HTTP 308 表示這個重定向是永久的。未來的請求應該使用新的 URL。&lt;br&gt;&lt;strong&gt;保持方法和正文&lt;/strong&gt;：308 與 301 Moved Permanently 類似，但明確要求客戶端在重定向時保持原始的 HTTP 方法和請求正文。例如，如果原始請求是 POST，重定向後仍然是 POST。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;400&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Bad Request&lt;/td&gt;
&lt;td&gt;服務器無法理解請求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;401&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Unauthorized&lt;/td&gt;
&lt;td&gt;未經身份驗證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;402&lt;/td&gt;
&lt;td&gt;Payment Required&lt;/td&gt;
&lt;td&gt;保留將來使用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;403&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Forbidden&lt;/td&gt;
&lt;td&gt;服務器拒絕請求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;404&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Not Found&lt;/td&gt;
&lt;td&gt;資源未找到&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;405&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Method Not Allowed&lt;/td&gt;
&lt;td&gt;請求方法不被允許&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;406&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Not Acceptable&lt;/td&gt;
&lt;td&gt;請求的資源的內容特性無法滿足請求頭中的條件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;407&lt;/td&gt;
&lt;td&gt;Proxy Authentication Required&lt;/td&gt;
&lt;td&gt;需要代理身份驗證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;408&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Request Timeout&lt;/td&gt;
&lt;td&gt;請求超時&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;409&lt;/td&gt;
&lt;td&gt;Conflict&lt;/td&gt;
&lt;td&gt;請求與資源的當前狀態發生衝突&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;410&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Gone&lt;/td&gt;
&lt;td&gt;資源已被永久刪除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;411&lt;/td&gt;
&lt;td&gt;Length Required&lt;/td&gt;
&lt;td&gt;需要有效的內容長度標頭&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;412&lt;/td&gt;
&lt;td&gt;Precondition Failed&lt;/td&gt;
&lt;td&gt;先決條件失敗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;413&lt;/td&gt;
&lt;td&gt;Payload Too Large&lt;/td&gt;
&lt;td&gt;請求負載過大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;414&lt;/td&gt;
&lt;td&gt;URI Too Long&lt;/td&gt;
&lt;td&gt;請求 URI 過長&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;415&lt;/td&gt;
&lt;td&gt;Unsupported Media Type&lt;/td&gt;
&lt;td&gt;不支持的媒體類型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;416&lt;/td&gt;
&lt;td&gt;Range Not Satisfiable&lt;/td&gt;
&lt;td&gt;請求範圍不符合可用範圍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;417&lt;/td&gt;
&lt;td&gt;Expectation Failed&lt;/td&gt;
&lt;td&gt;服務器未能滿足請求頭的期望值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;418&lt;/td&gt;
&lt;td&gt;I’m a teapot&lt;/td&gt;
&lt;td&gt;HTCPCP/1.0 錯誤代碼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;421&lt;/td&gt;
&lt;td&gt;Misdirected Request&lt;/td&gt;
&lt;td&gt;請求導向錯誤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;422&lt;/td&gt;
&lt;td&gt;Unprocessable Entity (WebDAV)&lt;/td&gt;
&lt;td&gt;語義錯誤，無法響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;423&lt;/td&gt;
&lt;td&gt;Locked (WebDAV)&lt;/td&gt;
&lt;td&gt;資源被鎖定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;424&lt;/td&gt;
&lt;td&gt;Failed Dependency (WebDAV)&lt;/td&gt;
&lt;td&gt;由於之前的請求失敗，當前請求失敗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;425&lt;/td&gt;
&lt;td&gt;Too Early&lt;/td&gt;
&lt;td&gt;服務器拒絕處理可能被重放的請求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;426&lt;/td&gt;
&lt;td&gt;Upgrade Required&lt;/td&gt;
&lt;td&gt;需要切換協議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;428&lt;/td&gt;
&lt;td&gt;Precondition Required&lt;/td&gt;
&lt;td&gt;要求請求附帶前置條件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429&lt;/td&gt;
&lt;td&gt;Too Many Requests&lt;/td&gt;
&lt;td&gt;請求過多&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;431&lt;/td&gt;
&lt;td&gt;Request Header Fields Too Large&lt;/td&gt;
&lt;td&gt;請求頭字段過大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;451&lt;/td&gt;
&lt;td&gt;Unavailable For Legal Reasons&lt;/td&gt;
&lt;td&gt;因法律原因不可用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;500&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Internal Server Error&lt;/td&gt;
&lt;td&gt;服務器內部錯誤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;501&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Not Implemented&lt;/td&gt;
&lt;td&gt;服務器不支持實現請求的方法&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;502&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Bad Gateway&lt;/td&gt;
&lt;td&gt;無效的響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;503&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Service Unavailable&lt;/td&gt;
&lt;td&gt;服務器不可用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;mark&gt;504&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;Gateway Timeout&lt;/td&gt;
&lt;td&gt;網關超時&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;505&lt;/td&gt;
&lt;td&gt;HTTP Version Not Supported&lt;/td&gt;
&lt;td&gt;不支持的 HTTP 版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;506&lt;/td&gt;
&lt;td&gt;Variant Also Negotiates&lt;/td&gt;
&lt;td&gt;內部配置錯誤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;507&lt;/td&gt;
&lt;td&gt;Insufficient Storage (WebDAV)&lt;/td&gt;
&lt;td&gt;存儲空間不足&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;508&lt;/td&gt;
&lt;td&gt;Loop Detected (WebDAV)&lt;/td&gt;
&lt;td&gt;檢測到循環&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;510&lt;/td&gt;
&lt;td&gt;Not Extended&lt;/td&gt;
&lt;td&gt;需要進行擴展&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;511&lt;/td&gt;
&lt;td&gt;Network Authentication Required&lt;/td&gt;
&lt;td&gt;需要網絡身份驗證&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;hr&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;狀態碼&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;重定向類型&lt;/th&gt;
&lt;th&gt;緩存行為&lt;/th&gt;
&lt;th&gt;請求方法&lt;/th&gt;
&lt;th&gt;使用場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;301&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moved Permanently&lt;/td&gt;
&lt;td&gt;永久重定向&lt;/td&gt;
&lt;td&gt;瀏覽器和搜索引擎會更新 URL 並緩存重定向&lt;/td&gt;
&lt;td&gt;可能改變方法為 GET（取決於瀏覽器）&lt;/td&gt;
&lt;td&gt;當資源永久移動到新位置，應用於 SEO 轉移權重的情況，例如網站遷移或永久更改資源 URL。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;302&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Found&lt;/td&gt;
&lt;td&gt;臨時重定向&lt;/td&gt;
&lt;td&gt;瀏覽器和搜索引擎通常不會緩存重定向&lt;/td&gt;
&lt;td&gt;可能改變方法為 GET（取決於瀏覽器）&lt;/td&gt;
&lt;td&gt;當資源臨時移動到新位置或需要臨時重定向，用於短期的資源變更或 A/B 測試。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;307&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporary Redirect&lt;/td&gt;
&lt;td&gt;臨時重定向&lt;/td&gt;
&lt;td&gt;瀏覽器和搜索引擎通常不會緩存重定向&lt;/td&gt;
&lt;td&gt;保持原請求方法&lt;/td&gt;
&lt;td&gt;當需要臨時重定向且必須保持請求方法（例如 POST），用於臨時服務器變更，或維護期間。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;308&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Permanent Redirect&lt;/td&gt;
&lt;td&gt;永久重定向&lt;/td&gt;
&lt;td&gt;瀏覽器和搜索引擎會更新 URL 並緩存重定向&lt;/td&gt;
&lt;td&gt;保持原請求方法&lt;/td&gt;
&lt;td&gt;當資源永久移動到新位置且必須保持請求方法，適用於 API 的永久變更，避免方法變更影響。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 id=&quot;總結：&quot;&gt;總結：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 301 或是 308 永久重定向，主要是讓搜尋引擎SEO更新資料、瀏覽器緩存；但是要注意 301 會造成 Request Method 變動&lt;/li&gt;
&lt;li&gt;使用 302 或是 307，則是臨時性的變動，例如伺服器維護期間，暫時重新導向，或是負載平衡。瀏覽器不會緩存，也不影響搜尋引擎的 SEO；但是要注意 302 也會造成 Request Method 變動&lt;/li&gt;
&lt;/ul&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/3913172695598771307/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/3913172695598771307' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/3913172695598771307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/3913172695598771307'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/06/http-status-code.html' title='HTTP Status Code'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-2612983208910879697</id><published>2024-06-25T18:38:00.002+08:00</published><updated>2024-07-18T19:35:25.829+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gitlab"/><category scheme="http://www.blogger.com/atom/ns#" term="Synology"/><title type='text'>Reset Synology Gitlab Root Password</title><content type='html'>&lt;h2 id=&quot;重設-synology-gitlab-root-管理者密碼&quot;&gt;重設 Synology Gitlab root 管理者密碼&lt;/h2&gt;
&lt;p&gt;從 群暉 Synology NAS 套件中心安裝的 Gitlab，與 &lt;a href=&quot;https://docs.gitlab.com/ee/security/reset_user_password.html&quot;&gt;Gitlab 官方文件&lt;/a&gt;不太一樣&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rake是一個工具程式，藉由讀取叫做Rakefile的檔案來執行任務腳本，而這些任務腳本就是所謂的task。&lt;br&gt;
bundle exec rake -T 可以查看 Task List&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;使用-rake&quot;&gt;使用 rake&lt;/h3&gt;
&lt;p&gt;&lt;mark&gt;gitlab-rake 改成 rake，而且必須透過 bundle exe 來執行&lt;/mark&gt;&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker &lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt; -it synology_gitlab &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
bundle &lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt; /home/git/gitlab/bin/rake &lt;span class=&quot;token string&quot;&gt;&quot;gitlab:password:reset&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;in /home/git/gitlab&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
Enter username: 請輸入使用者帳號
Enter password:
Confirm password:
Password successfully updated &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; user with username 使用者帳號.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;使用-rails&quot;&gt;使用 rails&lt;/h3&gt;
&lt;p&gt;&lt;mark&gt;gitlab-rails 改名為 rails&lt;/mark&gt;&lt;br&gt;
&lt;mark&gt;rails console -e production = rails console&lt;/mark&gt;&lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG0XcHUTJ89DqKfrKTJa0LPuZ2Z5KwInnUFHEnm5GEUJYkrcmtqsukpOY1pJY5oOq6zezcnyo3WFOwknRKR2ru62F3GEpboDJ6JUFbTbfQcDFylJ68WV2bn2lKfIOe5refTiIOfnMVliU/w1304-h271-s-no-gm/?authuser=0&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker &lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt; -it synology_gitlab &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt;
/home/git/gitlab/bin/rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.2p137 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;2020-10-01 revision 5445e04352&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x86_64-linux-gnu&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
 GitLab:       13.12.2 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;d98457affdf&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; FOSS
 GitLab Shell: 13.18.0
 PostgreSQL:   12.3
--------------------------------------------------------------------------------
Loading production environment &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Rails 6.0.3.6&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:001:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; User.where&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;id: 1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;.first
&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#&amp;lt;User id:1 @root&amp;gt;&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:002:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; User.find_by_username &lt;span class=&quot;token string&quot;&gt;&#39;root&#39;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#&amp;lt;User id:1 @root&amp;gt;&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:003:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; User.find&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#&amp;lt;User id:1 @root&amp;gt;&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:004:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; new_password &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;MyNewP@ssw0rd&#39;&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:005:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user.password &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; new_password
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:006:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user.password_confirmation &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; new_password
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:007:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user.password_automatically_set &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:008:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; user.save&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;
irb&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;main&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;:009:0&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;docker &lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt; -it synology_gitlab bin/rails console -e production
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;補充：查看所有使用者列表&quot;&gt;補充：查看所有使用者列表&lt;/h3&gt;
&lt;pre class=&quot; language-rails&quot;&gt;&lt;code class=&quot;prism  language-rails&quot;&gt;users = User.all
users.each do |user|
  puts &quot;ID: #{user.id}, Username: #{user.username}, Email: #{user.email}, Admin: #{user.admin?}&quot;
end
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;補充：查看所有管理者列表&quot;&gt;補充：查看所有管理者列表&lt;/h3&gt;
&lt;pre class=&quot; language-rails&quot;&gt;&lt;code class=&quot;prism  language-rails&quot;&gt;admins = User.where(admin: true)
admins.each do |admin|
  puts &quot;ID: #{admin.id}, Username: #{admin.username}, Email: #{admin.email}, Admin: #{user.admin?}&quot;
end
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;補充：查詢使用者&quot;&gt;補充：查詢使用者&lt;/h3&gt;
&lt;pre class=&quot; language-rails&quot;&gt;&lt;code class=&quot;prism  language-rails&quot;&gt;# 替換為實際的用戶 ID
user = User.find_by(id: 1)  
if user
	puts &quot;ID: #{user.id}, Username: #{user.username}, Email: #{user.email}, Admin: #{user.admin?}&quot;
else 
	puts &quot;User not found&quot;
end
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/2612983208910879697/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/2612983208910879697' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/2612983208910879697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/2612983208910879697'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/06/reset-synology-gitlab-root-password.html' title='Reset Synology Gitlab Root Password'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG0XcHUTJ89DqKfrKTJa0LPuZ2Z5KwInnUFHEnm5GEUJYkrcmtqsukpOY1pJY5oOq6zezcnyo3WFOwknRKR2ru62F3GEpboDJ6JUFbTbfQcDFylJ68WV2bn2lKfIOe5refTiIOfnMVliU/s72-w1304-h271-s-c-no-gm/?authuser=0" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-1175503927733014973</id><published>2024-04-02T20:40:00.005+08:00</published><updated>2024-07-18T19:55:37.918+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hyper-V"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>VMware Workstation 與 Hyper-V 混合環境</title><content type='html'>&lt;h2 id=&quot;vmware-workstation-與-hyper-v-共存於-windows-10-pro-x64-上的奇異狀況&quot;&gt;VMware Workstation 與 Hyper-V 共存於 Windows 10 Pro x64 上的奇異狀況&lt;/h2&gt;
&lt;p&gt;VMware Workstation 要與  Hyper-V 共存於 Windows 10 Pro x64 上需要一番設定&lt;/p&gt;
&lt;p&gt;但我今天不是要講這個設定，而是講網路的奇怪狀況&lt;/p&gt;
&lt;p&gt;我建立了一個 Ubuntu Desktop Guest，採用 Bridge 模式。&lt;br /&gt;
然後看到 Ubuntu Desktop 也取得了與 Win 10 Pro 同網段的 IP Address&lt;/p&gt;
&lt;p&gt;這台 Ubuntu Desktop 可以連接到網路上任何其他的電腦，唯獨無法連接到 Win 10 Host。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ubuntu Desktop Guest 與 Win10 Pro Host互 ping 不到&lt;/li&gt;
&lt;li&gt;Ubuntu Desktop ufw/iptables 都沒有設定啟用&lt;/li&gt;
&lt;li&gt;Win 10 Pro 防火牆的 ping 規則也有啟用&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;檢查 VMware Virtual Network Editor 的網路設定，看到 VMnet0 Type Bridge Bridged to 我的 Win 10 Pro 實體網卡名稱 Realtek PCIe GbE Family Controller 看起來也沒錯&lt;/p&gt;
&lt;p&gt;突然心血來潮，在命令提示字元下，執行 ipconfig /all&lt;br /&gt;
檢查 IP 設定，卻發現Win 10 Pro 取得 DHCP 的網卡是 Hyper-V Virtual Ethernet Adapter #4&lt;br /&gt;
而 Realtek PCIe GbE Family Controller 的 IP 卻是 169.254.199.175…&lt;/p&gt;
&lt;p&gt;然後我在 VMware Virtual Network Editor 調整 Bridged to Hyper-V Virtual Ethernet Adapter #4 之後，Ubuntu Desktop Guest 與 Win10 Pro x64 就可以正常互連了&lt;/p&gt;
&lt;p&gt;&lt;strike&gt;至於 Hyper-V Virtual Ethernet Adapter #4 虛擬網卡是如何喧賓奪主，搶走 Realtek PCIe GbE Family Controller 實體網卡的 IP，就不得而知了&lt;/strike&gt;&lt;/p&gt;&lt;p&gt;我發現以下狀況：&lt;/p&gt;&lt;p&gt;Hyper-V Virtual Ethernet Adapter #4 的 MAC Address ，居然跟 Realtek PCIe GbE Family Controller 的 MAC Address 一模一樣！難怪 DHCP Server的 IP 會被虛擬網卡搶走。&lt;/p&gt;&lt;p&gt;在 Hyper-V 管理員 的 &quot;虛擬交換器管理員&quot;，當我把虛擬交換器 Brideg 的外部網路取消掉，改為內部網路之後，Hyper-V Virtual Ethernet Adapter #4 就消失了，然後我的 Realtek PCIe GbE Family Controller 實體網卡就可以正常取得 IP了。&lt;br /&gt;但是這樣的缺點，就是區域網路的電腦，無法連線到我電腦上的 Hyper-V 虛擬機&lt;/p&gt;&lt;p&gt;如果我點選外部網路，並選取 Realtek PCIe GbE Family Controller，Hyper-V 就把我整台電腦的區域網路連線給斷了！除非我勾選 &quot;允許管理作業系統共用此網路介面卡(M)&quot; ！&lt;/p&gt;&lt;p&gt;&lt;b&gt;遇到這麼流氓的 Hyper-V，只好把它卸除了，雖然不能用沙箱，也不能用 WSL，也不能用 Docker Desktop....&lt;/b&gt;&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/1175503927733014973/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/1175503927733014973' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1175503927733014973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1175503927733014973'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/04/vmware-workstation-hyper-v.html' title='VMware Workstation 與 Hyper-V 混合環境'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-4415435425646732003</id><published>2024-04-02T17:17:00.002+08:00</published><updated>2024-07-18T19:56:15.233+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="rsync"/><title type='text'>rsync</title><content type='html'>&lt;h2 id=&quot;rsync-使用簡介&quot;&gt;&lt;a href=&quot;https://rsync.samba.org/&quot;&gt;rsync&lt;/a&gt; 使用簡介&lt;/h2&gt;
&lt;h3 id=&quot;功能簡介：&quot;&gt;功能簡介：&lt;/h3&gt;
&lt;p&gt;Linux中的rsync（remote sync）是一個用於在本地系統之間或本地系統和遠程系統之間同步文件和目錄的強大工具。它可以在局域網中高效地傳輸大量數據，並且具有許多功能，使得文件同步和備份變得非常方便。&lt;/p&gt;
&lt;h3 id=&quot;特點和用途：&quot;&gt;特點和用途：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;增量備份：rsync可以將文件和目錄從源同步到目標，僅傳輸已更改或新增的部分，這種增量備份方式大大節省了帶寬和時間。&lt;/li&gt;
&lt;li&gt;遠程同步：rsync支持通過SSH等協議在本地和遠程系統之間同步文件和目錄，這使得在不同主機之間進行文件同步變得非常方便。&lt;/li&gt;
&lt;li&gt;保留文件屬性：rsync可以保留文件的屬性，包括權限、時間戳和所有者等信息。&lt;/li&gt;
&lt;li&gt;多種選項：rsync具有多種選項，可以根據需要進行配置，例如遞歸同步、壓縮傳輸、忽略特定文件等。&lt;/li&gt;
&lt;li&gt;傳輸加密：通過使用SSH等加密協議，rsync可以確保在本地和遠程系統之間的安全傳輸。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;參數說明：&quot;&gt;參數說明：&lt;/h3&gt;
&lt;p&gt;-a：表示以遞歸方式同步目錄，保留所有檔案屬性。&lt;br&gt;
-v：表示輸出詳細信息，讓您可以看到正在複製的文件。&lt;br&gt;
-z：表示在傳輸過程中壓縮檔案，以節省頻寬。&lt;br&gt;
-h：表示以人類可讀的格式輸出信息。&lt;br&gt;
-e “ssh”：指定使用SSH加密協議。&lt;br&gt;
–ignore-existing：表示在目標目錄中忽略已經存在的文件，不再複製。&lt;br&gt;
–bwlimit：指定一個限制，以Bytes為單位，指定每秒允許的最大傳輸速率。&lt;br&gt;
–delete：刪除目的端不存在於原始路徑的檔案。&lt;br&gt;
–remove-source-files：在成功搬移檔案後，從原始路徑中刪除這些檔案。&lt;/p&gt;
&lt;h4 id=&quot;指令範例：&quot;&gt;指令範例：&lt;/h4&gt;
&lt;pre class=&quot; language-bash&quot;&gt;&lt;code class=&quot;prism  language-bash&quot;&gt;List&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;`ls -ld /volume1/Class/*&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;0-9&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; -F&lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{print &lt;span class=&quot;token variable&quot;&gt;$9&lt;/span&gt;}&#39;&lt;/span&gt;`
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; Path &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$List&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rsync&lt;/span&gt; -avzh --ignore-existing /path/to/source/directory/* user@linux_b_server:/path/to/destination/directory/&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/4415435425646732003/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/4415435425646732003' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/4415435425646732003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/4415435425646732003'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/04/rsync_87.html' title='rsync'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-1980801069038543999</id><published>2024-03-23T10:05:00.003+08:00</published><updated>2024-07-18T19:57:08.674+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 變數特性</title><content type='html'>&lt;h3 id=&quot;power-shell-是一個弱型別的-script-language&quot;&gt;Power Shell 是一個弱型別的 Script Language&lt;/h3&gt;
&lt;p&gt;不需要宣告，變數存甚麼，就是甚麼型態&lt;/p&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;prism language-pwsh&quot;&gt;$a=&quot;123&quot;
$a.GetType()

$a = 456
$a.GetType()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;prism language-pwsh&quot;&gt;IsPublic IsSerial Name    BaseType                              
-------- -------- ----    --------                              
True     True     String  System.Object                         
True     True     Int32   System.ValueType
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;要注意的是，變數初始值設定的方法&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt; = 1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 2 &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = 1      &lt;span class=&quot;token comment&quot;&gt;# 數值&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt; = 2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 3   &lt;span class=&quot;token comment&quot;&gt;# 是陣列&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;prism language-pwsh&quot;&gt;function abc{
    return 1,&quot;A&quot;,&quot;C&quot;
}

$a, $b = abc
$a.GetType()
$b.GetType()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;prism language-pwsh&quot;&gt;IsPublic IsSerial Name       BaseType                              
-------- -------- ----       --------                              
True     True     Int32      System.ValueType                      
True     True     Object[]   System.Array 
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;一個變數在沒有使用之前，變數等於-null&quot;&gt;一個變數在沒有使用之前，變數等於 $null&lt;/h3&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;prism language-pwsh&quot;&gt;Clear-Host
Remove-Variable * -ErrorAction SilentlyContinue

$var -eq $null
$var = 3
$var -eq $null
Clear-Variable var
$var -eq $null
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;prism language-pwsh&quot;&gt;True
False
True
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/1980801069038543999/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/1980801069038543999' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1980801069038543999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1980801069038543999'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell_23.html' title='Powershell 變數特性'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-1030654078634443456</id><published>2024-03-23T10:04:00.003+08:00</published><updated>2024-07-18T19:57:41.937+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 變數型態_String</title><content type='html'>&lt;h4 id=&quot;powershell-的字串，可以使用對稱的-雙引號，或是單引號&quot;&gt;Powershell 的字串，可以使用對稱的 雙引號，或是單引號&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;* 如果字串本身包含大括號 { 或 }，就要改成 {{ 或 }}
* 如果字串本身有雙引號，就要使用 Double 雙引號 &quot;&quot;
* 如果字串本身有單引號，就要使用 Double 單引號 &#39;&#39;
* 經過格式化字串之後，得到的資料型態為字串
* 如果字串本身有 $，請使用 Double $ 或是跳脫字元 `
* 如果字串本身有 `，請使用 Double `
* 如果字串中要輸出跳行，請使用 `r`n
* 如果字串中要輸出TAB，請使用 `t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;&quot;他的外號叫做&quot;&quot;豬頭&quot;&quot;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;他的外號叫做&quot;豬頭&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;格式化字串&quot;&gt;格式化字串&lt;/h2&gt;
&lt;h3 id=&quot;格式化字串的方法&quot;&gt;格式化字串的方法&lt;/h3&gt;
&lt;h4 id=&quot;第一種方式，字串中夾變數&quot;&gt;第一種方式，字串中夾變數&lt;/h4&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;$age = 52
&quot;我的年齡是 $age 歲&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;我的年齡是 52 歲
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;第二種方式&quot;&gt;第二種方式&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;格式字串&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 參數
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;第三種方法&quot;&gt;第三種方法&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;[string]&lt;/span&gt;::format&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;格式字串&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 參數&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;數值格式化字串&quot;&gt;數值格式化字串&lt;/h4&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;代號&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nm&lt;/td&gt;
&lt;td&gt;m 表示小數位數，不足會補零對齊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dm&lt;/td&gt;
&lt;td&gt;m 表示數值位數，不足的位數會補零&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;hr&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;{0:n2}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 123&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;5
&lt;span class=&quot;token string&quot;&gt;&quot;{0:n2}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;14
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;123.50
3.14
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;{0:d2}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 123
&lt;span class=&quot;token string&quot;&gt;&quot;{0:d2}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;123
01
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;{0:0##,###.#0}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 12345&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;5
&lt;span class=&quot;token string&quot;&gt;&quot;{0:0##,###.#0}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 123456&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;7
&lt;span class=&quot;token string&quot;&gt;&quot;{0:0##,###.#0}&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;f 1234567&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;579
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;整數位數，不足會補零&lt;/li&gt;
&lt;li&gt;小數位數，不足會補零&lt;/li&gt;
&lt;li&gt;小數位數超過的，會四捨五入&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;012,345.50
123,456.70
1,234,567.58
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;日期型態資料的格式化字串&quot;&gt;日期型態資料的格式化字串&lt;/h4&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;代號&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;y&lt;/td&gt;
&lt;td&gt;yyyy年MM月&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;yy&lt;/td&gt;
&lt;td&gt;yy 兩位數西元年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;yyyy&lt;/td&gt;
&lt;td&gt;yyyy 四位數西元年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M&lt;/td&gt;
&lt;td&gt;MM月dd日&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MM&lt;/td&gt;
&lt;td&gt;MM 兩位數月份，不足兩位數，前面會補0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;yyyy/MM/dd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dd&lt;/td&gt;
&lt;td&gt;dd 兩位數日期，不足兩位數，前面會補0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hh&lt;/td&gt;
&lt;td&gt;兩位數12小時制(不足兩位數，前面會補0)不會顯示 AM/PM 或上午/下午&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HH&lt;/td&gt;
&lt;td&gt;兩位數24小時制(不足兩位數，前面會補0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mm&lt;/td&gt;
&lt;td&gt;兩位數分鐘(不足兩位數，前面會補0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;yyyy-MM-ddTHH:mm:ss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ss&lt;/td&gt;
&lt;td&gt;兩位數秒(不足兩位數，前面會補0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f&lt;/td&gt;
&lt;td&gt;yyyy年M月dd日 上午/下午 hh:mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ff&lt;/td&gt;
&lt;td&gt;兩位數毫秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fff&lt;/td&gt;
&lt;td&gt;三位數毫秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ddd&lt;/td&gt;
&lt;td&gt;周一、周二、周三…&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dddd&lt;/td&gt;
&lt;td&gt;星期一、星期二、星期三…&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/1030654078634443456/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/1030654078634443456' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1030654078634443456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1030654078634443456'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell-string_23.html' title='Powershell 變數型態_String'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-7178925832382633795</id><published>2024-03-23T09:47:00.002+08:00</published><updated>2024-03-23T09:47:09.788+08:00</updated><title type='text'>小百岳</title><content type='html'>&lt;h1 id=&quot;小百岳列表&quot;&gt;小百岳列表&lt;/h1&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;編號&lt;/th&gt;
&lt;th&gt;山名&lt;/th&gt;
&lt;th&gt;縣市別&lt;/th&gt;
&lt;th&gt;鄉鎮市區別&lt;/th&gt;
&lt;th&gt;別名&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;難度&lt;/th&gt;
&lt;th&gt;座標&lt;/th&gt;
&lt;th align=&quot;right&quot;&gt;標高(m)&lt;/th&gt;
&lt;th&gt;備註&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td&gt;大屯山&lt;/td&gt;
&lt;td&gt;台北市、新北市&lt;/td&gt;
&lt;td&gt;北投區、淡水區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1092&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;七星山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;台北市&lt;/td&gt;
&lt;td&gt;北投區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1120&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;3&lt;/td&gt;
&lt;td&gt;大武崙山&lt;/td&gt;
&lt;td&gt;基隆市&lt;/td&gt;
&lt;td&gt;安樂區&lt;/td&gt;
&lt;td&gt;砲台山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;231&lt;/td&gt;
&lt;td&gt;近中山區界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;4&lt;/td&gt;
&lt;td&gt;槓子寮山&lt;/td&gt;
&lt;td&gt;基隆市&lt;/td&gt;
&lt;td&gt;中正區&lt;/td&gt;
&lt;td&gt;槓子寮砲台&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.1&lt;/td&gt;
&lt;td&gt;25.143730986822487, 121.7819003870428&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;163&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;5&lt;/td&gt;
&lt;td&gt;觀音山&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;八里區&lt;/td&gt;
&lt;td&gt;硬漢嶺&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5&lt;/td&gt;
&lt;td&gt;25.135933897405756, 121.42666847085579&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;616&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;2023/11/19已達成&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;6&lt;/td&gt;
&lt;td&gt;基隆山&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;瑞芳區&lt;/td&gt;
&lt;td&gt;大肚美人山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.9&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;588&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;7&lt;/td&gt;
&lt;td&gt;紅淡山&lt;/td&gt;
&lt;td&gt;基隆市&lt;/td&gt;
&lt;td&gt;仁愛區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;210&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;8&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;大崙頭山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;台北市&lt;/td&gt;
&lt;td&gt;士林區、內湖區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;478&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;9&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;劍潭山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;台北市&lt;/td&gt;
&lt;td&gt;士林區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;153&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;2024/01/27已達成&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;10&lt;/td&gt;
&lt;td&gt;五分山&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;瑞芳區、平溪區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;757&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;11&lt;/td&gt;
&lt;td&gt;姜子寮山&lt;/td&gt;
&lt;td&gt;基隆市&lt;/td&gt;
&lt;td&gt;七堵區&lt;/td&gt;
&lt;td&gt;三角架山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.9&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;729&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;12&lt;/td&gt;
&lt;td&gt;汐止大尖山&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;汐止區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;460&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;13&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;南港山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;台北市&lt;/td&gt;
&lt;td&gt;信義區、南港區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;375&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;2024/01/20已達成&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;14&lt;/td&gt;
&lt;td&gt;土庫岳&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;深坑區&lt;/td&gt;
&lt;td&gt;大坪山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;389&lt;/td&gt;
&lt;td&gt;近南港區界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;15&lt;/td&gt;
&lt;td&gt;大棟山&lt;/td&gt;
&lt;td&gt;新北市、桃園市&lt;/td&gt;
&lt;td&gt;樹林區、龜山區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.2(0)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;405&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;16&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;南勢角山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;中和區、新店區&lt;/td&gt;
&lt;td&gt;風爐塞山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;302&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;17&lt;/td&gt;
&lt;td&gt;二格山&lt;/td&gt;
&lt;td&gt;台北市、新北市&lt;/td&gt;
&lt;td&gt;文山區、石碇區&lt;/td&gt;
&lt;td&gt;石尖山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;678[1]&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;18&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;天上山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;土城區&lt;/td&gt;
&lt;td&gt;皇帝山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;429&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;19&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;福德坑山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;三峽區&lt;/td&gt;
&lt;td&gt;鳶山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;321&lt;/td&gt;
&lt;td&gt;並非標高300公尺之鳶山&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;20&lt;/td&gt;
&lt;td&gt;獅仔頭山&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;新店區、三峽區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;858&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;21&lt;/td&gt;
&lt;td&gt;金面山&lt;/td&gt;
&lt;td&gt;桃園市&lt;/td&gt;
&lt;td&gt;大溪區&lt;/td&gt;
&lt;td&gt;鳥嘴尖&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;667&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;22&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;東眼山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;新北市、桃園市&lt;/td&gt;
&lt;td&gt;三峽區、復興區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1212&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;2024/02/03已達成&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;23&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;溪洲山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;桃園市&lt;/td&gt;
&lt;td&gt;大溪區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;577&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;24&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;石門山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;桃園市&lt;/td&gt;
&lt;td&gt;龍潭區&lt;/td&gt;
&lt;td&gt;小竹坑山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;551&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;25&lt;/td&gt;
&lt;td&gt;石牛山&lt;/td&gt;
&lt;td&gt;桃園市、新竹縣&lt;/td&gt;
&lt;td&gt;復興區、關西鎮&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;671&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;26&lt;/td&gt;
&lt;td&gt;十八尖山&lt;/td&gt;
&lt;td&gt;新竹市&lt;/td&gt;
&lt;td&gt;東區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;130&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;27&lt;/td&gt;
&lt;td&gt;飛鳳山&lt;/td&gt;
&lt;td&gt;新竹縣&lt;/td&gt;
&lt;td&gt;芎林鄉&lt;/td&gt;
&lt;td&gt;中坑山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;462&lt;/td&gt;
&lt;td&gt;非423m的飛鳳山，而是二等三角點的中坑山&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;28&lt;/td&gt;
&lt;td&gt;李崠山&lt;/td&gt;
&lt;td&gt;桃園市、新竹縣&lt;/td&gt;
&lt;td&gt;復興區、尖石鄉&lt;/td&gt;
&lt;td&gt;李棟山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1914&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;29&lt;/td&gt;
&lt;td&gt;獅頭山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;三灣鄉、南庄鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;492&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;30&lt;/td&gt;
&lt;td&gt;五指山&lt;/td&gt;
&lt;td&gt;新竹縣&lt;/td&gt;
&lt;td&gt;竹東鎮、北埔鄉、五峰鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1062&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;31&lt;/td&gt;
&lt;td&gt;鵝公髻山&lt;/td&gt;
&lt;td&gt;新竹縣、苗栗縣&lt;/td&gt;
&lt;td&gt;五峰鄉、南庄鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1579&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;32&lt;/td&gt;
&lt;td&gt;向天湖山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;南庄鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.9&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1225&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;33&lt;/td&gt;
&lt;td&gt;仙山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;獅潭鄉&lt;/td&gt;
&lt;td&gt;紅毛館山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;967&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;34&lt;/td&gt;
&lt;td&gt;加里山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;南庄鄉、泰安鄉&lt;/td&gt;
&lt;td&gt;加里仙山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2210&lt;/td&gt;
&lt;td&gt;台灣富士山，注意可能有高山症&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;35&lt;/td&gt;
&lt;td&gt;火炎山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;苑裡鎮、三義鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;596&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;36&lt;/td&gt;
&lt;td&gt;關刀山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;三義鄉、大湖鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;889&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;37&lt;/td&gt;
&lt;td&gt;馬那邦山&lt;/td&gt;
&lt;td&gt;苗栗縣&lt;/td&gt;
&lt;td&gt;大湖鄉、泰安鄉&lt;/td&gt;
&lt;td&gt;馬拉邦山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1407&lt;/td&gt;
&lt;td&gt;近卓蘭鎮界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;38&lt;/td&gt;
&lt;td&gt;鐵砧山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;外埔區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;236&lt;/td&gt;
&lt;td&gt;跨大甲區境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;39&lt;/td&gt;
&lt;td&gt;稍來山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;和平區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2307&lt;/td&gt;
&lt;td&gt;注意可能有高山症&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;40&lt;/td&gt;
&lt;td&gt;聚興山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;潭子區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;500&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;41&lt;/td&gt;
&lt;td&gt;頭嵙山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;北屯區、新社區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;859&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;42&lt;/td&gt;
&lt;td&gt;南觀音山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;北屯區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;318&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;43&lt;/td&gt;
&lt;td&gt;三汀山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;太平區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;480&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;44&lt;/td&gt;
&lt;td&gt;暗影山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;太平區&lt;/td&gt;
&lt;td&gt;酒桶山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;997&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;45&lt;/td&gt;
&lt;td&gt;大橫屏山&lt;/td&gt;
&lt;td&gt;台中市、南投縣&lt;/td&gt;
&lt;td&gt;太平區、國姓鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1205&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;46&lt;/td&gt;
&lt;td&gt;阿罩霧山&lt;/td&gt;
&lt;td&gt;台中市&lt;/td&gt;
&lt;td&gt;霧峰區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;249&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;47&lt;/td&gt;
&lt;td&gt;九份二山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;中寮鄉、國姓鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1174&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;48&lt;/td&gt;
&lt;td&gt;橫山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;南投市、名間鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5(0.2)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;444&lt;/td&gt;
&lt;td&gt;近彰化縣社頭鄉界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;49&lt;/td&gt;
&lt;td&gt;貓囒山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;魚池鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1016&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;50&lt;/td&gt;
&lt;td&gt;集集大山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;集集鎮、中寮鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0(2.8)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1392&lt;/td&gt;
&lt;td&gt;近水里鄉界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;51&lt;/td&gt;
&lt;td&gt;松柏坑山&lt;/td&gt;
&lt;td&gt;彰化縣、南投縣&lt;/td&gt;
&lt;td&gt;二水鄉、名間鄉&lt;/td&gt;
&lt;td&gt;松柏嶺&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1(0)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;430&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;52&lt;/td&gt;
&lt;td&gt;後尖山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;魚池鄉、水里鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1008&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;53&lt;/td&gt;
&lt;td&gt;鳳凰山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;鹿谷鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1696&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;54&lt;/td&gt;
&lt;td&gt;金柑樹山&lt;/td&gt;
&lt;td&gt;南投縣&lt;/td&gt;
&lt;td&gt;竹山鎮、信義鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2091&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;55&lt;/td&gt;
&lt;td&gt;石壁山&lt;/td&gt;
&lt;td&gt;雲林縣、嘉義縣&lt;/td&gt;
&lt;td&gt;古坑鄉、阿里山鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1751&lt;/td&gt;
&lt;td&gt;近竹山鎮界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;56&lt;/td&gt;
&lt;td&gt;雲嘉大尖山&lt;/td&gt;
&lt;td&gt;雲林縣、嘉義縣&lt;/td&gt;
&lt;td&gt;古坑鄉、梅山鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1299&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;57&lt;/td&gt;
&lt;td&gt;梨子腳山&lt;/td&gt;
&lt;td&gt;嘉義縣&lt;/td&gt;
&lt;td&gt;梅山鄉&lt;/td&gt;
&lt;td&gt;掘尺嶺山、 祝壽山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1176&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;58&lt;/td&gt;
&lt;td&gt;獨立山&lt;/td&gt;
&lt;td&gt;嘉義縣&lt;/td&gt;
&lt;td&gt;竹崎鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;840&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;59&lt;/td&gt;
&lt;td&gt;大塔山&lt;/td&gt;
&lt;td&gt;嘉義縣、南投縣&lt;/td&gt;
&lt;td&gt;阿里山鄉、信義鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2663&lt;/td&gt;
&lt;td&gt;注意可能有高山症&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;60&lt;/td&gt;
&lt;td&gt;大凍山&lt;/td&gt;
&lt;td&gt;嘉義縣&lt;/td&gt;
&lt;td&gt;梅山鄉、阿里山鄉&lt;/td&gt;
&lt;td&gt;畚箕山、糞箕山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1967&lt;/td&gt;
&lt;td&gt;近竹崎鄉界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;61&lt;/td&gt;
&lt;td&gt;大湖尖山&lt;/td&gt;
&lt;td&gt;嘉義縣&lt;/td&gt;
&lt;td&gt;竹崎鄉、番路鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.9-2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1313&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;62&lt;/td&gt;
&lt;td&gt;紅毛埤山&lt;/td&gt;
&lt;td&gt;嘉義市&lt;/td&gt;
&lt;td&gt;東區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.5(0.1)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;150&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;63&lt;/td&gt;
&lt;td&gt;大凍山&lt;/td&gt;
&lt;td&gt;臺南市、嘉義縣&lt;/td&gt;
&lt;td&gt;白河區、大埔鄉&lt;/td&gt;
&lt;td&gt;凍頭山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1241&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;64&lt;/td&gt;
&lt;td&gt;崁頭山&lt;/td&gt;
&lt;td&gt;臺南市&lt;/td&gt;
&lt;td&gt;東山區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;844&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;65&lt;/td&gt;
&lt;td&gt;三腳南山&lt;/td&gt;
&lt;td&gt;嘉義縣、臺南市&lt;/td&gt;
&lt;td&gt;大埔鄉、南化區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1186&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;66&lt;/td&gt;
&lt;td&gt;西阿里關山&lt;/td&gt;
&lt;td&gt;臺南市、高雄市&lt;/td&gt;
&lt;td&gt;南化區、甲仙區&lt;/td&gt;
&lt;td&gt;小林山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;973&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;67&lt;/td&gt;
&lt;td&gt;竹子尖山&lt;/td&gt;
&lt;td&gt;臺南市&lt;/td&gt;
&lt;td&gt;楠西區、南化區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1090&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;68&lt;/td&gt;
&lt;td&gt;東藤枝山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;桃源區&lt;/td&gt;
&lt;td&gt;藤枝山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1565&lt;/td&gt;
&lt;td&gt;新入選&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;69&lt;/td&gt;
&lt;td&gt;白雲山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;甲仙區&lt;/td&gt;
&lt;td&gt;廓亭山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1044&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;70&lt;/td&gt;
&lt;td&gt;烏山嶺&lt;/td&gt;
&lt;td&gt;臺南市、高雄市&lt;/td&gt;
&lt;td&gt;南化區、杉林區&lt;/td&gt;
&lt;td&gt;刣牛湖山、烏山步道&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;730&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;71&lt;/td&gt;
&lt;td&gt;鳴海山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;茂林區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.9&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1411&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;72&lt;/td&gt;
&lt;td&gt;旗尾山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;旗山區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;318&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;73&lt;/td&gt;
&lt;td&gt;尾寮山&lt;/td&gt;
&lt;td&gt;屏東縣、高雄市&lt;/td&gt;
&lt;td&gt;茂林區、三地門鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1427&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;74&lt;/td&gt;
&lt;td&gt;大崗山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;岡山區、阿蓮區、田寮區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;312&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;75&lt;/td&gt;
&lt;td&gt;觀音山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;大社區、仁武區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;169&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;76&lt;/td&gt;
&lt;td&gt;笠頂山&lt;/td&gt;
&lt;td&gt;屏東縣&lt;/td&gt;
&lt;td&gt;瑪家鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;659&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;77&lt;/td&gt;
&lt;td&gt;壽山&lt;/td&gt;
&lt;td&gt;高雄市&lt;/td&gt;
&lt;td&gt;鼓山區&lt;/td&gt;
&lt;td&gt;柴山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;356&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;78&lt;/td&gt;
&lt;td&gt;棚集山&lt;/td&gt;
&lt;td&gt;屏東縣&lt;/td&gt;
&lt;td&gt;來義鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;899&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;79&lt;/td&gt;
&lt;td&gt;女仍山&lt;/td&gt;
&lt;td&gt;屏東縣&lt;/td&gt;
&lt;td&gt;獅子鄉、牡丹鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;804&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;80&lt;/td&gt;
&lt;td&gt;里龍山&lt;/td&gt;
&lt;td&gt;屏東縣&lt;/td&gt;
&lt;td&gt;獅子鄉、牡丹鄉&lt;/td&gt;
&lt;td&gt;里瀧山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1062&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;81&lt;/td&gt;
&lt;td&gt;大山母山&lt;/td&gt;
&lt;td&gt;屏東縣&lt;/td&gt;
&lt;td&gt;滿州鄉&lt;/td&gt;
&lt;td&gt;萬里得山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;#N/A&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;325&lt;/td&gt;
&lt;td&gt;新入選&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;82&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;灣坑頭山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;宜蘭縣&lt;/td&gt;
&lt;td&gt;頭城鎮&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;616&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;2024/02/10已達成&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;83&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;三角崙山&lt;/mark&gt;&lt;/td&gt;
&lt;td&gt;新北市&lt;/td&gt;
&lt;td&gt;坪林區&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1029&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;84&lt;/td&gt;
&lt;td&gt;鵲子山&lt;/td&gt;
&lt;td&gt;宜蘭縣&lt;/td&gt;
&lt;td&gt;礁溪鄉&lt;/td&gt;
&lt;td&gt;鴻子山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;679&lt;/td&gt;
&lt;td&gt;礁溪富士山&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;85&lt;/td&gt;
&lt;td&gt;三星山&lt;/td&gt;
&lt;td&gt;宜蘭縣&lt;/td&gt;
&lt;td&gt;大同鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.9&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2352&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;86&lt;/td&gt;
&lt;td&gt;卡拉寶山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;秀林鄉&lt;/td&gt;
&lt;td&gt;祖輪山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;#N/A&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2397&lt;/td&gt;
&lt;td&gt;注意可能有高山症&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;87&lt;/td&gt;
&lt;td&gt;立霧山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;秀林鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1274&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;88&lt;/td&gt;
&lt;td&gt;初音山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;吉安鄉、秀林鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.2(0.3)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;906&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;89&lt;/td&gt;
&lt;td&gt;鯉魚山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;壽豐鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;601&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;90&lt;/td&gt;
&lt;td&gt;月眉山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;壽豐鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;614&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;91&lt;/td&gt;
&lt;td&gt;八里灣山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;豐濱鄉、瑞穗鄉&lt;/td&gt;
&lt;td&gt;貓公富士山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2.8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;924&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;92&lt;/td&gt;
&lt;td&gt;萬人山&lt;/td&gt;
&lt;td&gt;花蓮縣&lt;/td&gt;
&lt;td&gt;富里鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;886&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;93&lt;/td&gt;
&lt;td&gt;都蘭山&lt;/td&gt;
&lt;td&gt;台東縣&lt;/td&gt;
&lt;td&gt;東河鄉、延平鄉&lt;/td&gt;
&lt;td&gt;都巒山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.9&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1190&lt;/td&gt;
&lt;td&gt;台東富士山&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;94&lt;/td&gt;
&lt;td&gt;太麻里山&lt;/td&gt;
&lt;td&gt;台東縣&lt;/td&gt;
&lt;td&gt;太麻里鄉&lt;/td&gt;
&lt;td&gt;金針山&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1340&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;95&lt;/td&gt;
&lt;td&gt;加奈美山&lt;/td&gt;
&lt;td&gt;台東縣&lt;/td&gt;
&lt;td&gt;大武鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;780&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;96&lt;/td&gt;
&lt;td&gt;巴塱衛山&lt;/td&gt;
&lt;td&gt;台東縣&lt;/td&gt;
&lt;td&gt;大武鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;324&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;97&lt;/td&gt;
&lt;td&gt;紅頭山&lt;/td&gt;
&lt;td&gt;台東縣&lt;/td&gt;
&lt;td&gt;蘭嶼鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;552&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;98&lt;/td&gt;
&lt;td&gt;雲台山&lt;/td&gt;
&lt;td&gt;連江縣&lt;/td&gt;
&lt;td&gt;南竿鄉&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;248&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;99&lt;/td&gt;
&lt;td&gt;太武山&lt;/td&gt;
&lt;td&gt;金門縣&lt;/td&gt;
&lt;td&gt;金湖鎮&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;253&lt;/td&gt;
&lt;td&gt;&lt;mark&gt;已達成&lt;/mark&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;100&lt;/td&gt;
&lt;td&gt;蛇頭山&lt;/td&gt;
&lt;td&gt;澎湖縣&lt;/td&gt;
&lt;td&gt;馬公市&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;hr&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/7178925832382633795/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/7178925832382633795' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7178925832382633795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7178925832382633795'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/blog-post_23.html' title='小百岳'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-1049285584330684288</id><published>2024-03-13T23:46:00.002+08:00</published><updated>2024-07-18T19:59:06.986+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 變數型態_Array</title><content type='html'>&lt;h1 id=&quot;array&quot;&gt;Array&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;同一陣列內，可以混合儲存各種形態資料&lt;/li&gt;
&lt;li&gt;陣列起始註標為 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;陣列的表示法&quot;&gt;陣列的表示法&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a1&lt;/span&gt; = 1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;3
&lt;span class=&quot;token variable&quot;&gt;$a2&lt;/span&gt; = 1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3
&lt;span class=&quot;token variable&quot;&gt;$a3&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a4&lt;/span&gt; = &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ABC&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;7&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;9&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; @&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;name&#39;&lt;/span&gt;=&lt;span class=&quot;token string&quot;&gt;&quot;tom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;age&quot;&lt;/span&gt;=51&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$a4[0] = 1, 2, 3
$a4[1] = &quot;ABC&quot;
$a4[2] = 7, 8, 9
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;宣告空陣列&quot;&gt;宣告空陣列&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a5&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Count &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; 0    &lt;span class=&quot;token comment&quot;&gt;# True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;只有一個變數值，要設定為陣列&quot;&gt;只有一個變數值，要設定為陣列&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a6&lt;/span&gt; = &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Hello&quot;&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a7&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 輸出 $a6 變數註標值為0的元素&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;0&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 輸出 $a7 變數註標值為0的元素&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;0&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Hello
Hello

IsPublic IsSerial Name     BaseType                  
-------- -------- ----     --------                  
True     True     Object[] System.Array              
True     True     Object[] System.Array
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;反向取得陣列值&quot;&gt;反向取得陣列值&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$array&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Kate&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Dylan&quot;&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;# 陣列最後一個值&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;# 陣列倒數第二個值&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;Dylan
Kate
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;計算陣列中符合條件值的數量篩選等於-100，再計算-count&quot;&gt;計算陣列中符合條件值的數量(篩選等於 100，再計算 Count)&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a8&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 59&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 95&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 60&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 100&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 88&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 76&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$a8&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; 100&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Count &lt;span class=&quot;token comment&quot;&gt;# 統計滿分人數&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;array-元素的增加&quot;&gt;Array 元素的增加&lt;/h3&gt;
&lt;p&gt;&lt;mark&gt;雖然 Array 有 Add Method，但是當你使用 Add() 時，會出現&quot;集合屬於固定大小&quot;的錯誤&lt;/mark&gt;&lt;br&gt;
所以當你要在 Array 增加元素時，&lt;strong&gt;請使用數學運算 +&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;=@&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; 1
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Add&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;5&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; 5
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;IsPublic IsSerial Name                                     BaseType                  
-------- -------- ----                                     --------                  
True     True     Object[]                                 System.Array              
以 &quot;1&quot; 引數呼叫 &quot;Add&quot; 時發生例外狀況: &quot;集合屬於固定大小。&quot;
位於 線路:4 字元:1
+ $a.Add(5)
+ ~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NotSupportedException
 
1
5
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;雖然空一格，但不占空間&quot;&gt;雖然空一格，但不占空間&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;5&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;count
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;4
1
2
3
5
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;array-元素的減少&quot;&gt;Array 元素的減少&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;4&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;5&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;6&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;7&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;8&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;9&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 用註標來選擇&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;5&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;2
4
6
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;移除陣列中的空字串&quot;&gt;移除陣列中的空字串&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 宣告一個陣列&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 4&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 以下三種方法都可以移除空字串&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Where&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Where-Object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;arrary-與-arraylist-型態互換&quot;&gt;Arrary 與 ArrayList 型態互換&lt;/h3&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = @&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 將 [System.Array] 轉換成 [System.Collections.ArrayList]&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[System.Collections.ArrayList]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# [System.Collections.ArrayList] 轉換成 [System.Array]&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[System.Array]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;IsPublic IsSerial Name       BaseType                  
&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;       &lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;                  
True     True     Object&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;   System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Array              
True     True     ArrayList  System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Object             
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_arrays?view=powershell-7.3&quot;&gt;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_arrays?view=powershell-7.3&lt;/a&gt;&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/1049285584330684288/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/1049285584330684288' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1049285584330684288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/1049285584330684288'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell-array.html' title='Powershell 變數型態_Array'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-6617545864708331445</id><published>2024-03-13T00:41:00.003+08:00</published><updated>2024-07-18T19:59:21.145+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 變數型態_Hashtable</title><content type='html'>&lt;h3 id=&quot;三種-hash-table-的表示方式&quot;&gt;三種 Hash Table 的表示方式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;為什麼要用 Hash Table 這種資料結構？
因為Powershell 可以很方便的將 Hash Table 陣列轉換換成 PSObject
而 PSObject可以很方便的轉換成各種格式，例如 .csv .html table .json .xml
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;$v1 = @{}
$v2 = New-Object -TypeName Hashtable
$v3= @{
	&quot;Key1&quot; = 3
	&quot;Key2&quot; = &quot;String&quot;
	&quot;Key3&quot; = @(&quot;array&quot;,5,&quot;string&quot;)
}

$v2.Add(&quot;Key1&quot;,5)
$v2.Add(&quot;Key2&quot;,&quot;string&quot;)

$v2 | Format-List
$v3 | Format-Table
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Hash Tables&lt;br&gt;
&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-5.1&quot;&gt;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-5.1&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/6617545864708331445/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/6617545864708331445' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/6617545864708331445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/6617545864708331445'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell-hashtable.html' title='Powershell 變數型態_Hashtable'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-377207626897543298</id><published>2024-03-12T23:18:00.003+08:00</published><updated>2024-07-18T19:59:31.427+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 系統內建變數</title><content type='html'>&lt;h1 id=&quot;automatic--variables-自動變數-系統內建變數&quot;&gt;Automatic  Variables 自動變數 (系統內建變數)&lt;/h1&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;變數&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$?&lt;/td&gt;
&lt;td&gt;查詢前一次指令的執行狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$^&lt;/td&gt;
&lt;td&gt;查詢前一次執行的指令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$_&lt;/td&gt;
&lt;td&gt;迴圈或是 Pipe 的暫存變數&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$args&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ConsoleFileName&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Error&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Event&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$EventSubscriber&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ExecutionContext&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$true&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$false&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$null&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$foreach&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$HOME&lt;/td&gt;
&lt;td&gt;使用者帳號家目錄路徑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Host&lt;/td&gt;
&lt;td&gt;用來判斷Powershell運行的環境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$input&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$inputScript&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$IsCoreCLR&lt;/td&gt;
&lt;td&gt;v7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$IsLinux&lt;/td&gt;
&lt;td&gt;v7 判斷作業系統是否為 Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$IsMacOS&lt;/td&gt;
&lt;td&gt;v7 判斷作業系統是否為 MacOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$IsWindows&lt;/td&gt;
&lt;td&gt;v7 判斷作業系統是否為 Microsoft Windows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LastExitCode&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Matches&lt;/td&gt;
&lt;td&gt;正規式比對的結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MyInvocation&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSScriptRoot&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSCommandPath&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$NestedPromptLevel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PID&lt;/td&gt;
&lt;td&gt;取得目前Powershell 或是 Powershell ISE 的 Process ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PROFILE&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSBoundParameters&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSCmdlet&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSCulture&lt;/td&gt;
&lt;td&gt;顯示系統的語系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSDebugCoNtext&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSEdition&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSHOME&lt;/td&gt;
&lt;td&gt;顯示系統預設的 Powershell Home Path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSItem&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSSenderInfo&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSUICulture&lt;/td&gt;
&lt;td&gt;顯示系統的語系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSVersionTable&lt;/td&gt;
&lt;td&gt;顯示Powershell的版本資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PWD&lt;/td&gt;
&lt;td&gt;取得目前路徑位置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Sender&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ShellId&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$StackTrace&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$switch&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$this&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ast&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$cursorColumn&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MaximumAliasCount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MaximumDriveCount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MaximumErrorCount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MaximumFunctionCount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MaximumVariableCount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$options&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$positionOfCursor&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$psISE&lt;/td&gt;
&lt;td&gt;在 Powershell Console，此系統變數為 &lt;strong&gt;$null&lt;/strong&gt;，可以用來判斷執行環境是 Powershell ISE 還是 Pwoershell Console&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$psUnsupportedConsoleApplications&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$tokens&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ConfirmPreference&lt;/td&gt;
&lt;td&gt;High, Medium, Low, None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$CurrentlyExecutingCommand&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$DebugPreference&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Break&lt;/strong&gt;: Enter the debugger, &lt;strong&gt;Continue&lt;/strong&gt;: 顯示偵錯訊息，並繼續執行, &lt;strong&gt;Ignore&lt;/strong&gt;: Ignore the evenet completely, &lt;strong&gt;SilentlyContinue&lt;/strong&gt;: 沒有作用。 偵錯訊息不會顯示，而且不會中斷執行, &lt;strong&gt;Stop&lt;/strong&gt;: 顯示偵錯訊息並停止執行。 將錯誤寫入主控台, &lt;strong&gt;Suspend&lt;/strong&gt;: Reserved for future use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ErrorActionPreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ErrorView&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$InformationPreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogCommandHealthEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogCommandLifecycleEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogEngineHealthEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogEngineLifecycleEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogProviderHealthEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogProviderLifecycleEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$LogSettingsEvent&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSLogUserData&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$MaximumHistoryCount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$NestedPromptLevel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$OFS&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$OutputEncoding&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$ProgressPreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSDebugContext&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSDefaultParameterValues&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSEmailServer&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSItem&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$PSModuleAutoLoadingPreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$VerboseHelpErrors&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$VerbosePreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$WarningPreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$WhatIfPreference&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Alias:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Cert:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Function:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$HKLM:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$HKCU:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Variable:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$WSMan:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Global:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Local:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Script:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Private:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:ALLUSERSPROFILE&lt;/td&gt;
&lt;td&gt;C:\ProgramData&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:APPDATA&lt;/td&gt;
&lt;td&gt;C:\Users\使用者帳號\AppData\Roaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:ChocolateyInstall&lt;/td&gt;
&lt;td&gt;C:\ProgramData\chocolatey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:ChocolateyLastPathUpdate&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:COMPUTERNAME&lt;/td&gt;
&lt;td&gt;電腦名稱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:ComSpec&lt;/td&gt;
&lt;td&gt;C:\WINDOWS\system32\cmd.exe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:DriverData&lt;/td&gt;
&lt;td&gt;C:\Windows\System32\Drivers\DriverData&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:HOMEDRIVE&lt;/td&gt;
&lt;td&gt;C:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:HOMEPATH&lt;/td&gt;
&lt;td&gt;\Users\使用者帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:LOCALAPPDATA&lt;/td&gt;
&lt;td&gt;C:\Users\使用者帳號\AppData\Local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:LOGONSERVER&lt;/td&gt;
&lt;td&gt;\電腦名稱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:NUMBER_OF_PROCESSORS&lt;/td&gt;
&lt;td&gt;電腦CPU核心數&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:OS&lt;/td&gt;
&lt;td&gt;Windows_NT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:Path&lt;/td&gt;
&lt;td&gt;Path環境變數&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:PATHEXT&lt;/td&gt;
&lt;td&gt;可執行的副檔名列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:POWERSHELL_DISTRIBUTION_CHANNEL&lt;/td&gt;
&lt;td&gt;MSI:Windows 10 Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:PROCESSOR_ARCHITECTURE&lt;/td&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:PROCESSOR_IDENTIFIER&lt;/td&gt;
&lt;td&gt;Intel64 Family 6 Model 158 Stepping 10, GenuineIntel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:PROCESSOR_LEVEL&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:PSModulePath&lt;/td&gt;
&lt;td&gt;Powershell Modules安裝的路徑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:SystemDrive&lt;/td&gt;
&lt;td&gt;C:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:SystemRoot&lt;/td&gt;
&lt;td&gt;C:\WINDOWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:TEMP&lt;/td&gt;
&lt;td&gt;C:\Users\使用者帳號\AppData\Local\Temp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:USERNAME&lt;/td&gt;
&lt;td&gt;使用者帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:USERPROFILE&lt;/td&gt;
&lt;td&gt;C:\Users\使用者帳號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:windir&lt;/td&gt;
&lt;td&gt;C:\WINDOWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:ProgramFiles&lt;/td&gt;
&lt;td&gt;C:\Program Files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;${env:ProgramFiles(x86)}&lt;/td&gt;
&lt;td&gt;C:\Program Files (x86)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$env:ProgramW6432&lt;/td&gt;
&lt;td&gt;C:\Program Files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/377207626897543298/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/377207626897543298' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/377207626897543298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/377207626897543298'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell_1.html' title='Powershell 系統內建變數'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-3313104073493344097</id><published>2024-03-12T23:15:00.005+08:00</published><updated>2024-07-18T19:59:54.310+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 命名規定</title><content type='html'>&lt;h1 id=&quot;命名基本規定&quot;&gt;命名基本規定&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Powershell 是&lt;strong&gt;不會區分大小寫&lt;/strong&gt;的&lt;/li&gt;
&lt;li&gt;系統有一些內建系統變數、環境變數、關鍵字，變數的命名上是不能使用的，不然變數值會被系統覆蓋掉。&lt;/li&gt;
&lt;li&gt;變數名稱中最好不要有特殊字元，例如：- (破折號)，會被當成運算元&lt;strong&gt;減號&lt;/strong&gt;，如果一定要用破折號，請將變數名稱用大括號括起，但這樣寫起來挺麻煩的，也容易出錯，還是不建議這樣搞！&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;$&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Saved&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Items&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;
$&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Saved&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Items&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Powershell Cmdlet/Function 命名有一定規矩，就是 Verb-Noun (動詞/動作-名詞)，而且有規範只能使用哪些動詞(雖然，使用規範以外的動詞，不會發生甚麼錯誤，但是在 Visual Studio Code 裡執行時，會一直出現警告)&lt;/li&gt;
&lt;li&gt;如果要知道Powershell 規範哪些動詞，可以執行&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;Get&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Verb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh25Nhx-H5czF1MQeBY8ulTDlkbwxe-H0-IaEFBkZSRHm2gC5l5brI9f9ZNPClUSDeGs60QadJjm39qVscJXHqg4G1Ni7SdNm1-w5J0oCBssKGdrcSOB4lGQtzrPvQgwbiLkgmXdoOHK0g/w365-h370-s-no/&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;如果要知道，有哪些命令可以使用，可以執行&lt;/p&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get-Command&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Noun restmethod&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;Get-Command&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Verb Split
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果要知道特定命令，有哪些組成、屬性、方法等，可以執行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Cmdlet | Get-Member
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get-Process&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Get-Member&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;MemberType Method &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Select-Object&lt;/span&gt; Name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Definition
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpN6BLUKdz4jCIAMVsF8Bc5Jq9Izi86SP4Y1clOxKquGJwrMO1NDnPxf4HLBBc5z0ILL4_qRyDzc8LuMpWCtCvZUQ7jIfZGOHXiTqywHtcwY-oYG6zKRs_3eNYXnrEyHa0RPatn7BxW8I/w993-h479-s-no/&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;查詢跟-csv-格式相關的-cmdlet&quot;&gt;查詢跟 CSV 格式相關的 Cmdlet&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get-Command&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Noun CSV
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;查詢跟-json-格式相關的-cmdlet&quot;&gt;查詢跟 JSON 格式相關的 Cmdlet&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get-Command&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Noun JSON
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;查詢跟-html-格式相關的-cmdlet&quot;&gt;查詢跟 HTML 格式相關的 Cmdlet&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get-Command&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Noun HTML
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;查詢轉換格式相關的-cmdlet&quot;&gt;查詢轉換格式相關的 Cmdlet&lt;/h4&gt;
&lt;pre class=&quot; language-powershell&quot;&gt;&lt;code class=&quot;prism  language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get-Command&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Verb Convert&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/3313104073493344097/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/3313104073493344097' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/3313104073493344097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/3313104073493344097'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell_12.html' title='Powershell 命名規定'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh25Nhx-H5czF1MQeBY8ulTDlkbwxe-H0-IaEFBkZSRHm2gC5l5brI9f9ZNPClUSDeGs60QadJjm39qVscJXHqg4G1Ni7SdNm1-w5J0oCBssKGdrcSOB4lGQtzrPvQgwbiLkgmXdoOHK0g/s72-w365-h370-s-c-no/" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-5798155524808933089</id><published>2024-03-12T23:14:00.005+08:00</published><updated>2024-07-18T20:00:21.344+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>PowerShell 簡介</title><content type='html'>&lt;h2 id=&quot;什麼是-powershell？&quot;&gt;什麼是 PowerShell？&lt;/h2&gt;
&lt;p&gt;Powershell 是一個微軟發展的跨平台的語言，可以在 Windows、Linux、MacOS 上運行。&lt;br&gt;
雖然號稱是跨平台，但是在不同的平台上，程式需要些許調整！&lt;br&gt;
就我個人的經驗，在 Linux 平台上，可以運行 Powershell 但是，我還是會建議盡量使用 bash shell script 或是其他程式語言&lt;/p&gt;
&lt;h2 id=&quot;powershell-能夠管理那些系統？&quot;&gt;PowerShell 能夠管理那些系統？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Azure&lt;/li&gt;
&lt;li&gt;Windows Server/Client&lt;/li&gt;
&lt;li&gt;Exchange Server&lt;/li&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;li&gt;Hyper-V&lt;/li&gt;
&lt;li&gt;VMware&lt;/li&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;VMware&lt;/li&gt;
&lt;li&gt;GCP&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;powershell-能做那些事？&quot;&gt;Powershell 能做那些事？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;呼叫 API 讀取網頁(無法讀取前端Javascript Render 的網頁資料)&lt;/li&gt;
&lt;li&gt;使用 Selenium 網頁爬蟲&lt;/li&gt;
&lt;li&gt;讀寫資料庫&lt;/li&gt;
&lt;li&gt;存取 FTP、SSH、SMTP、POP3 發送郵件(有些需要特過 Third Party)&lt;/li&gt;
&lt;li&gt;透過 Web Server GCI 執行 透過 HTTP Listener&lt;/li&gt;
&lt;li&gt;建立 Web Service (需要自己處理 MIME Type File)&lt;/li&gt;
&lt;li&gt;讀寫 CSV, JSON, XML, HTML&lt;/li&gt;
&lt;li&gt;壓縮/解壓縮 ZIP&lt;/li&gt;
&lt;li&gt;檔案管理&lt;/li&gt;
&lt;li&gt;註冊機碼管理&lt;/li&gt;
&lt;li&gt;連接/中斷網芳&lt;/li&gt;
&lt;li&gt;透過WinRM，管理遠端電腦&lt;/li&gt;
&lt;li&gt;載入 DLL，使用 Third Party Function&lt;/li&gt;
&lt;/ul&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/5798155524808933089/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/5798155524808933089' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/5798155524808933089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/5798155524808933089'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/powershell.html' title='PowerShell 簡介'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-5994593213129628457</id><published>2024-03-12T23:01:00.004+08:00</published><updated>2024-07-18T20:00:05.395+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 流程控制</title><content type='html'>&lt;h2 id=&quot;if&quot;&gt;If&lt;/h2&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&amp;lt;test1&amp;gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&amp;lt;statement list 1&amp;gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token namespace&quot;&gt;[elseif (&amp;lt;test2&amp;gt;)
    {&amp;lt;statement list 2&amp;gt;}]&lt;/span&gt;
&lt;span class=&quot;token namespace&quot;&gt;[else
    {&amp;lt;statement list 3&amp;gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;簡略寫法&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&amp;lt;condition&amp;gt; ? &amp;lt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;true&amp;gt; : &amp;lt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;false&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;switch&quot;&gt;Switch&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;基本語法&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;Switch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &amp;lt;test&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;expression&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
	&amp;lt;result1&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;to&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;be&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;matched&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&amp;lt;action&amp;gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 
	&amp;lt;result2&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;to&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;be&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;matched&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&amp;lt;action&amp;gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	Default &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&amp;lt;action&amp;gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# optional&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;特別參數及語法&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;Switch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;regex &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;wildcard &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;exact&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;casesensitive&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &amp;lt;test&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;expression&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;string1&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; number1 &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; variable1 &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;value&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock1&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;action&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;string2&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; number2 &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; variable2 &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;value&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock2&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;action&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    Default &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;action&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# optional&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;從檔案取得資料&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;Switch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;regex &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;wildcard &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;exact&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;casesensitive&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;file filename &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;string&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; number &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; variable &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;value&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;action&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    default &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &amp;lt;action&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;scriptblock&amp;gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# optional&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;說明：&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;參數&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-regex&lt;/td&gt;
&lt;td&gt;&amp;lt;test-expression&amp;gt; 的符合條件是正規式；如果 &amp;lt;test-expression&amp;gt; 變數型態不是字串，此參數會無效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-wildcard&lt;/td&gt;
&lt;td&gt;使用萬用字元去比對，這裡不分大小寫；如果 &amp;lt;test-expression&amp;gt; 變數型態不是字串，此參數會無效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-exact&lt;/td&gt;
&lt;td&gt;必須完全符合字串大小寫；如果 &amp;lt;test-expression&amp;gt; 變數型態不是字串，此參數會無效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-casesensitive&lt;/td&gt;
&lt;td&gt;區分大小寫；如果 &amp;lt;test-expression&amp;gt; 變數型態不是字串，此參數會無效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-file&lt;/td&gt;
&lt;td&gt;從文字型檔案讀取每一行來比較，這裡不分大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;範例1：使用 Script Blocks 來媒合，Switch 會執行所有吻合條件的部分&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = 1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3
&lt;span class=&quot;token variable&quot;&gt;$Variable&lt;/span&gt; = 2
&lt;span class=&quot;token keyword&quot;&gt;Switch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Variable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is in Array&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-match&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[0-9]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is matched regexp&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-lt&lt;/span&gt; 10 &lt;span class=&quot;token operator&quot;&gt;-and&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-gt&lt;/span&gt; 1 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is bigger than 1, and smaller than 10&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	Default &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Otherwise&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDqkHj6EpfNlc4oJfoCo5662HGIP9caOeNaAbGyN5cvNgYjYFM35AnlOd4rvaQ4MW7cv9NhxydFcS5921heWoWBlm67VXZfBGdWEn3jnUpBWee_1Jr4SucrWZ6B39XlOzAJCsCuFDxDmU/w590-h82-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;範例二：要中斷Switch繼續媒合所有 Script Block，要使用 &lt;strong&gt;Break&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = 1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;3
&lt;span class=&quot;token variable&quot;&gt;$Variable&lt;/span&gt; = 2
&lt;span class=&quot;token keyword&quot;&gt;Switch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Variable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is in Array&quot;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-match&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[0-9]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is matched regexp&quot;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-lt&lt;/span&gt; 10 &lt;span class=&quot;token operator&quot;&gt;-and&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-gt&lt;/span&gt; 1 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is bigger than 1, and smaller than 10&quot;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	Default &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Otherwise&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYgOlSG1Vc7mLyVDiy9grY37E0S2kQ33_ADkD8yGkyDkCH9naA-p-ZaJGt3PW_sg4rYXRxvKZr08-eDbbhyzCgI4cHoAl7IUuqAPMlveNlcSTpd5bGWSR0nhkKLwd7xPRkQniLAaGyQYo/w264-h36-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;範例三：&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$Variable&lt;/span&gt; = 42
&lt;span class=&quot;token keyword&quot;&gt;Switch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Variable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;20 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is between 0~20&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 21&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;40 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is between 21~40&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 41&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;60 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is between 41~60&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 61&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;80 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is between 61~80&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 81&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;100 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is between 81~100&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	Default&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;Variable is not in 0~100&quot;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6nucw0XcgWsKkQfYtrbywPA2YtAb8zEo3m8sGDSQU_5BBYYXAxkBPiWjAQ-8tFayykW3OJylgDgu1D59Uf6Y63xH0Qip6tiJb4J8N25j6YiqyAQHPW7ax1HkaWI6XBYiKyGYv0MLQ-SI/w322-h31-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;範例四：媒合條件為正規式&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$month&lt;/span&gt; = &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Get-Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Month
&lt;span class=&quot;token variable&quot;&gt;$month&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;regex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token namespace&quot;&gt;[string]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$month&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;token string&quot;&gt;&quot;^[1-3]$&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Q1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token string&quot;&gt;&quot;^[4-6]$&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Q2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token string&quot;&gt;&quot;^[7-9]$&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Q3&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token string&quot;&gt;&quot;^1[0-2]$&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Q4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTxrVciOIRgjkVAIRxbFu3gggwR-qjbXQm1Ctg6PPpa4bgvnNbFGprHE2xEyv3WFQNxLoDAP5ngpYJk7TdvnoUX3WRzso5IqXlyyyQfFHYvrAjQzPl7PgMRCXD8PRLC5iAHsLjca_sAc8/w577-h232-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;comparison-operators-比較運算說明&quot;&gt;Comparison Operators 比較運算說明&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比較&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-and&lt;/td&gt;
&lt;td&gt;進行邏輯運算 AND&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-or&lt;/td&gt;
&lt;td&gt;進行邏輯運算 OR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-not&lt;/td&gt;
&lt;td&gt;進行邏輯運算 NOT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-xor&lt;/td&gt;
&lt;td&gt;進行邏輯運算 XOR，而非 bit XOR運算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-is&lt;/td&gt;
&lt;td&gt;判斷變數型態是否與比對的型態相同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-isnot&lt;/td&gt;
&lt;td&gt;判斷變數型態是否與比對的型態不相同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-like&lt;/td&gt;
&lt;td&gt;字串匹配通配符模式，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ilike&lt;/td&gt;
&lt;td&gt;字串匹配通配符模式，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-clike&lt;/td&gt;
&lt;td&gt;字串匹配通配符模式，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-notlike&lt;/td&gt;
&lt;td&gt;字串與通配符模式不匹配，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-inotlike&lt;/td&gt;
&lt;td&gt;字串與通配符模式不匹配，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cnotlike&lt;/td&gt;
&lt;td&gt;字串與通配符模式不匹配，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-match&lt;/td&gt;
&lt;td&gt;字串與正規表示式模式匹配，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-imatch&lt;/td&gt;
&lt;td&gt;字串與正規表示式模式匹配，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cmatch&lt;/td&gt;
&lt;td&gt;字串與正規表示式模式匹配，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-notmatch&lt;/td&gt;
&lt;td&gt;字串與正規表示式模式不匹配，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-inotmatch&lt;/td&gt;
&lt;td&gt;字串與正規表示式模式不匹配，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cnotmatch&lt;/td&gt;
&lt;td&gt;字串與正規表示式模式不匹配，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-in&lt;/td&gt;
&lt;td&gt;變數值存在於集合之中，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-iin&lt;/td&gt;
&lt;td&gt;變數值存在於集合之中，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cin&lt;/td&gt;
&lt;td&gt;變數值存在於集合之中，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-notin&lt;/td&gt;
&lt;td&gt;變數值不存在於集合之中，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-inotin&lt;/td&gt;
&lt;td&gt;變數值不存在於集合之中，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cnotin&lt;/td&gt;
&lt;td&gt;變數值不存在於集合之中，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-contains&lt;/td&gt;
&lt;td&gt;集合中包含變數值，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-icontains&lt;/td&gt;
&lt;td&gt;集合中包含變數值，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ccontains&lt;/td&gt;
&lt;td&gt;集合中包含變數值，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-eq&lt;/td&gt;
&lt;td&gt;Equal 等於(忽略大小寫)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ieq&lt;/td&gt;
&lt;td&gt;Equal 等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ceq&lt;/td&gt;
&lt;td&gt;Equal 等於，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ne&lt;/td&gt;
&lt;td&gt;Not Equal 不等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ine&lt;/td&gt;
&lt;td&gt;Not Equal 不等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cne&lt;/td&gt;
&lt;td&gt;Not Equal 不等於，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-gt&lt;/td&gt;
&lt;td&gt;Great Than 大於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-igt&lt;/td&gt;
&lt;td&gt;Great Than 大於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cgt&lt;/td&gt;
&lt;td&gt;Great Than 大於，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ge&lt;/td&gt;
&lt;td&gt;Great Equal 大於等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ige&lt;/td&gt;
&lt;td&gt;Great Equal 大於等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cge&lt;/td&gt;
&lt;td&gt;Great Equal 大於等於，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-lt&lt;/td&gt;
&lt;td&gt;Less Than 小於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ilt&lt;/td&gt;
&lt;td&gt;Less Than 小於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-clt&lt;/td&gt;
&lt;td&gt;Less Than 小於，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-le&lt;/td&gt;
&lt;td&gt;Less Equal 小於等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-ile&lt;/td&gt;
&lt;td&gt;Less Equal 小於等於，忽略大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-cle&lt;/td&gt;
&lt;td&gt;Less Equal 小於等於，比較大小寫&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;仔細觀察可以發現，只要加上 i 就是不區分大小寫；加上 c 就是區分大小寫&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;從範例來理解 -in &amp;amp; -contains&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = 5

1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;3 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;10 &lt;span class=&quot;token operator&quot;&gt;-contains&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;

&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-in&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;3
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-in&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;10
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;從範例來了解 -is &amp;amp; -isnot&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = 5
&lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt; = &lt;span class=&quot;token string&quot;&gt;&quot;5&quot;&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-is&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;[int]&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-isnot&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDlYmY0d4VrJM3xShVtv2jlkt9KVN2-8jc5fn0omYfPcb5nsHS5zqxOYha58EOZGxF8EEJtEFxHCAQmNKdlA6yTywRj2sMXnVZw3wsqOgrGpwpgx2TArUdCYb3uqf51JVdJHxgVbzg2tg/w939-h144-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&quot;需要特別注意的特例&quot;&gt;需要特別注意的特例&lt;/h3&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = 1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 4&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 6
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GetType&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$null&lt;/span&gt;

&lt;span class=&quot;token variable&quot;&gt;$null&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPiGlcO2nTnmTjgwa7AorQZw9nvgus1pcdEhhW3FQMeICuagTjkuD-On3UiIXzvLF9UARx28a2aqzz22qKBomF-XVlqzxKOVfV5OlUMnU0KYMfxyW0ZyH4AZmKpcngCJ91xWjly2Q7Q-k/w895-h194-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;         &lt;span class=&quot;token comment&quot;&gt;# Output: True&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;def&quot;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# Output: False&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;def&quot;&lt;/span&gt;         &lt;span class=&quot;token comment&quot;&gt;# Output: True&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;         &lt;span class=&quot;token comment&quot;&gt;# Output: False&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;def&quot;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# Output: True&lt;/span&gt;

&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;def&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# Output: abc&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;def&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;abc&quot;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# Output: def&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhip_ZHKXKBob90CBFwvLYJnc51lxnCInCGDyFglFaekLhZBAkOaS83WHQ_AXhSXHQhQ1xUVQS9Yk7thSab55WwoQSJMD0phLH7ZMZzh-7rkUHeDPn1vb9w6dMaQ5Q65ND7XDeDqYQJqw4/w739-h350-s-no/?authuser=0&quot; /&gt;&lt;br /&gt;
說明：當集合在運算子左邊時，其結果會是過濾變數值&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;再來一個自訂類別的比較&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; MyFileInfoSet &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token namespace&quot;&gt;[String]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$File&lt;/span&gt;
    &lt;span class=&quot;token namespace&quot;&gt;[Int64]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Size&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[MyFileInfoSet]&lt;/span&gt;@&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;File = &lt;span class=&quot;token string&quot;&gt;&quot;C:\Windows\explorer.exe&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; Size = 4651032&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[MyFileInfoSet]&lt;/span&gt;@&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;File = &lt;span class=&quot;token string&quot;&gt;&quot;C:\Windows\explorer.exe&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; Size = 4651032&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面程式碼雖然透過自訂類別，設定了兩個變數，兩個變數的屬性值雖然都一樣，但這兩個變數是不同的物件， -eq 會認為這不是同一個物件。&lt;/p&gt;
&lt;p&gt;所以要讓 -eq 能判斷物件&quot;值&quot; 是否一致，要改用以下程式，讓程式知道使用 -eq 比較時，是要比較兩個變數的值&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; MyFileInfoSet : System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IEquatable&lt;span class=&quot;token namespace&quot;&gt;[Object]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
	&lt;span class=&quot;token namespace&quot;&gt;[String]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$File&lt;/span&gt; 
	&lt;span class=&quot;token namespace&quot;&gt;[Int64]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Size&lt;/span&gt; 
	&lt;span class=&quot;token namespace&quot;&gt;[bool]&lt;/span&gt; Equals&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token namespace&quot;&gt;[Object]&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;File &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;File&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Size &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$c&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[MyFileInfoSet]&lt;/span&gt;@&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;File = &lt;span class=&quot;token string&quot;&gt;&quot;C:\Windows\explorer.exe&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; Size = 4651032&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$d&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[MyFileInfoSet]&lt;/span&gt;@&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;File = &lt;span class=&quot;token string&quot;&gt;&quot;C:\Windows\explorer.exe&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; Size = 4651032&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$c&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我們再來看看兩個類別宣告出來的物件變數的方法有甚麼不同&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; MyFileInfoSet &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token namespace&quot;&gt;[String]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$File&lt;/span&gt;
    &lt;span class=&quot;token namespace&quot;&gt;[Int64]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Size&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[MyFileInfoSet]&lt;/span&gt;@&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;File = &lt;span class=&quot;token string&quot;&gt;&quot;C:\Windows\explorer.exe&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; Size = 4651032&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Get-Member&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; MyFileInfoSet2 : System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IEquatable&lt;span class=&quot;token namespace&quot;&gt;[Object]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
	&lt;span class=&quot;token namespace&quot;&gt;[String]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$File&lt;/span&gt; 
	&lt;span class=&quot;token namespace&quot;&gt;[Int64]&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$Size&lt;/span&gt; 
	&lt;span class=&quot;token namespace&quot;&gt;[bool]&lt;/span&gt; Equals&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token namespace&quot;&gt;[Object]&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;File &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;File&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Size &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt;  &lt;span class=&quot;token variable&quot;&gt;$obj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token variable&quot;&gt;$c&lt;/span&gt; = &lt;span class=&quot;token namespace&quot;&gt;[MyFileInfoSet2]&lt;/span&gt;@&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;File = &lt;span class=&quot;token string&quot;&gt;&quot;C:\Windows\explorer.exe&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; Size = 4651032&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;$c&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Get-Member&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$c&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Get-Member&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Where-Object&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Name &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Equals&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Select-Object&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;Property Definition
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYZ28pnR4YZGryoR7DT_veB0oGENNBAQTqtAo3L-25TLFMuwIqN1jvrm64Z-RtOi9KkukzGXUYpdL2DBtdAl1KlINi210inSBCe1TlzWbl_RjtkVFC0VZK42ahYtwWbdJitW7JLeCtjbA/w1280-h528-s-no/?authuser=0&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;break、continue、return、exit&quot;&gt;Break、Continue、Return、Exit&lt;/h2&gt;
&lt;p&gt;Break 中斷迴圈或是 Switch，或是 Trap&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;範例一：&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;=0
&lt;span class=&quot;token variable&quot;&gt;$varB&lt;/span&gt; = 10&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;20&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;30&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;40
&lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$val&lt;/span&gt; in &lt;span class=&quot;token variable&quot;&gt;$varB&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$val&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; 30&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;+&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;30 was found in array index &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;範例二：中斷指定的迴圈(這是很差的程式習慣，請盡量不要使用)&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Remove-Variable&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;ErrorAction SilentlyContinue
&lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt; = 3
:red &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;$true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  :yellow &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;$true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;$true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt; yellow&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$c&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt; red&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;中斷最內層迴圈&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;中斷 :yellow 迴圈&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;中斷 :red 迴圈&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果有定義 $a，就會中斷最內層迴圈&lt;br /&gt;
如果有定義 $b，就會中斷 :yellow 迴圈&lt;br /&gt;
如果有定義 $c，就會中斷 :red 迴圈&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;範例三：&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; test &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;trap&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;[DivideByZeroException]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;Write-Host&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;divide by zero trapped&#39;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt; = 3
  &lt;span class=&quot;token string&quot;&gt;&#39;Before loop&#39;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;$true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;token string&quot;&gt;&quot;1 / &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt; = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1 &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;-&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&#39;After loop&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
test
&lt;/code&gt;&lt;/pre&gt;
&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqhwVnh5c8QJxVmP6CsEhToYZPKA5ajTAqpUcu3lgFXIBtpGEY7Ijt9kYdD-j5qeP8FShQT-hRXBVOzhk-JuRYfZk8vs6FgRysAdX114abYlpI9VzZwTOBqeuxxRYVaIXf4VJhB9xQPGU/w1070-h258-s-no/?authuser=0&quot; /&gt;&lt;br /&gt;
當除數為0的例外被觸發時，印出 “divide by zero trapped”&lt;br /&gt;
然後就終止函式&lt;br /&gt;
如果沒有使用 Break，就會在發生錯誤之後，繼續執行印出 “After loop”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;請不要在迴圈不包含-foreach-object、switch、trap-之外使用-break！這會目前的-runspace-被終止！&quot;&gt;&lt;mark&gt;請不要在迴圈(不包含 ForEach-Object)、Switch、Trap 之外使用 Break！這會目前的 Runspace 被終止！&lt;/mark&gt;&lt;/h2&gt;
&lt;pre class=&quot;language-powerhshell&quot;&gt;&lt;code class=&quot;prism language-powerhshell&quot;&gt;function test {
 &quot;TEST&quot;
 break
}

test
&quot;After Test&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;當程式執行 test 函式時，輸出 “TEST” 之後，整個程式就被 break 終止了！所以 “After Test” 永遠不會被執行到。&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;10 &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ForEach-Object&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; 3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;Break&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token string&quot;&gt;&quot;迴圈之後，繼續執行&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 ForEach-Object 內使用 Break，也會導致整個程式被終止！&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code class=&quot;prism language-powershell&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;ForEach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$v&lt;/span&gt; in 1&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;10&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$v&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-eq&lt;/span&gt; 3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;Break&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$v&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token string&quot;&gt;&quot;迴圈之後，繼續執行&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是在 ForEach ($variable in &amp;lt;collection&amp;gt;){} 迴圈卻不會中斷整個程式&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_continue?view=powershell-7.3&quot;&gt;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_continue?view=powershell-7.3&lt;/a&gt;&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/5994593213129628457/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/5994593213129628457' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/5994593213129628457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/5994593213129628457'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/blog-post_94.html' title='Powershell 流程控制'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDqkHj6EpfNlc4oJfoCo5662HGIP9caOeNaAbGyN5cvNgYjYFM35AnlOd4rvaQ4MW7cv9NhxydFcS5921heWoWBlm67VXZfBGdWEn3jnUpBWee_1Jr4SucrWZ6B39XlOzAJCsCuFDxDmU/s72-w590-h82-s-c-no/?authuser=0" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7646996704860285904.post-7980872731976615946</id><published>2024-03-12T22:57:00.004+08:00</published><updated>2024-07-18T20:00:34.666+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Powershell 迴圈的額外說明</title><content type='html'>&lt;h2 id=&quot;powershell-迴圈的額外說明&quot;&gt;Powershell 迴圈的額外說明&lt;/h2&gt;
&lt;h4 id=&quot;以下三種-powershell-迴圈程式，先試著猜猜結果為何&quot;&gt;以下三種 Powershell 迴圈程式，先試著猜猜結果為何&lt;/h4&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;Function loop1{
    1..3 | ForEach-Object{
        If ($_ -eq 2){
            Return &quot;Y&quot;, $_
        }Else{
            Return &quot;N&quot;, $_
        }
    }
}

loop1
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;Function loop2{
    For($i=1; $i -le 3; $i++){
        If ($_ -eq 2){
            Return &quot;Y&quot;, $i
        }Else{
            Return &quot;N&quot;, $i
        }
    }
}

loop2
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot; language-pwsh&quot;&gt;&lt;code class=&quot;prism  language-pwsh&quot;&gt;Function loop3{
    ForEach($num in 1..3){
        If ($_ -eq 2){
            Return &quot;Y&quot;, $num
        }Else{
            Return &quot;N&quot;, $num
        }
    }
}

loop3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;當你分別執行上面的程式之後，會發現&lt;br&gt;
&lt;mark&gt;ForEach-Object{ }&lt;/mark&gt;&lt;br&gt;
會跑完每一個 Object，所以&lt;mark&gt;它會回傳三次！&lt;/mark&gt;&lt;br&gt;
而 For 或是 ForEach 迴圈，則是如同預期的，只會跑一次&lt;/p&gt;
&lt;h3 id=&quot;這個-foreach-object---的用法，就很像-python-的-yield&quot;&gt;這個 ForEach-Object { } 的用法，就很像 Python 的 yield&lt;/h3&gt;

</content><link rel='replies' type='application/atom+xml' href='http://tomliu888.blogspot.com/feeds/7980872731976615946/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7646996704860285904/7980872731976615946' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7980872731976615946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7646996704860285904/posts/default/7980872731976615946'/><link rel='alternate' type='text/html' href='http://tomliu888.blogspot.com/2024/03/blog-post_86.html' title='Powershell 迴圈的額外說明'/><author><name>Tom</name><uri>http://www.blogger.com/profile/12801472459074932275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>