tag:blogger.com,1999:blog-76469967048602859042024-03-23T18:14:37.055+08:00隨手記錄因為是隨手記錄,所以很懶得貼圖說明...^_^||
如果您有任何疑問,歡迎留言討論。Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.comBlogger223125tag:blogger.com,1999:blog-7646996704860285904.post-19808010690385439992024-03-23T10:05:00.002+08:002024-03-23T10:05:45.441+08:00Powershell 變數特性<h3 id="power-shell-是一個弱型別的-script-language">Power shell 是一個弱型別的 Script Language</h3>
<p>不需要宣告,變數存甚麼,就是甚麼型態</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">$a="123"
$a.GetType()
$a = 456
$a.GetType()
</code></pre>
<p>Result:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
True True Int32 System.ValueType
</code></pre>
<hr>
<p>要注意的是,變數初始值設定的方法</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span> = 1<span class="token punctuation">,</span> 2 <span class="token punctuation">,</span>3
</code></pre>
<p>Result:</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = 1 <span class="token comment"># 數值</span>
<span class="token variable">$b</span> = 2<span class="token punctuation">,</span> 3 <span class="token comment"># 是陣列</span>
</code></pre>
<hr>
<pre class=" language-pwsh"><code class="prism language-pwsh">function abc{
return 1,"A","C"
}
$a, $b = abc
$a.GetType()
$b.GetType()
</code></pre>
<p>Result:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
True True Object[] System.Array
</code></pre>
<hr>
<h3 id="一個變數在沒有使用之前,變數等於-null">一個變數在沒有使用之前,變數等於 $null</h3>
<pre class=" language-pwsh"><code class="prism language-pwsh">Clear-Host
Remove-Variable * -ErrorAction SilentlyContinue
$var -eq $null
$var = 3
$var -eq $null
Clear-Variable var
$var -eq $null
</code></pre>
<p>Result:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">True
False
True
</code></pre>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-10306540786344434562024-03-23T10:04:00.002+08:002024-03-23T10:04:07.526+08:00Powershell 變數型態_String<h4 id="powershell-的字串,可以使用對稱的-雙引號,或是單引號">Powershell 的字串,可以使用對稱的 雙引號,或是單引號</h4>
<pre><code>* 如果字串本身包含大括號 { 或 },就要改成 {{ 或 }}
* 如果字串本身有雙引號,就要使用 Double 雙引號 ""
* 如果字串本身有單引號,就要使用 Double 單引號 ''
* 經過格式化字串之後,得到的資料型態為字串
* 如果字串本身有 $,請使用 Double $ 或是跳脫字元 `
* 如果字串本身有 `,請使用 Double `
* 如果字串中要輸出跳行,請使用 `r`n
* 如果字串中要輸出TAB,請使用 `t
</code></pre>
<p>例如:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">"他的外號叫做""豬頭"""
</code></pre>
<p>Result:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">他的外號叫做"豬頭"
</code></pre>
<h2 id="格式化字串">格式化字串</h2>
<h3 id="格式化字串的方法">格式化字串的方法</h3>
<h4 id="第一種方式,字串中夾變數">第一種方式,字串中夾變數</h4>
<pre class=" language-pwsh"><code class="prism language-pwsh">$age = 52
"我的年齡是 $age 歲"
</code></pre>
<p>Result:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">我的年齡是 52 歲
</code></pre>
<hr>
<h4 id="第二種方式">第二種方式</h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token string">"格式字串"</span> <span class="token operator">-</span>f 參數
</code></pre>
<h4 id="第三種方法">第三種方法</h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token namespace">[string]</span>::format<span class="token punctuation">(</span><span class="token string">"格式字串"</span><span class="token punctuation">,</span> 參數<span class="token punctuation">)</span>
</code></pre>
<h4 id="數值格式化字串">數值格式化字串</h4>
<table>
<thead>
<tr>
<th>代號</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>#</td>
<td></td>
</tr>
<tr>
<td>nm</td>
<td>m 表示小數位數,不足會補零對齊</td>
</tr>
<tr>
<td>dm</td>
<td>m 表示數值位數,不足的位數會補零</td>
</tr>
</tbody>
</table><hr>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token string">"{0:n2}"</span> <span class="token operator">-</span>f 123<span class="token punctuation">.</span>5
<span class="token string">"{0:n2}"</span> <span class="token operator">-</span>f 3<span class="token punctuation">.</span>14
</code></pre>
<p>Result:</p>
<pre><code>123.50
3.14
</code></pre>
<hr>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token string">"{0:d2}"</span> <span class="token operator">-</span>f 123
<span class="token string">"{0:d2}"</span> <span class="token operator">-</span>f 1
</code></pre>
<p>Result:</p>
<pre><code>123
01
</code></pre>
<hr>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token string">"{0:0##,###.#0}"</span> <span class="token operator">-</span>f 12345<span class="token punctuation">.</span>5
<span class="token string">"{0:0##,###.#0}"</span> <span class="token operator">-</span>f 123456<span class="token punctuation">.</span>7
<span class="token string">"{0:0##,###.#0}"</span> <span class="token operator">-</span>f 1234567<span class="token punctuation">.</span>579
</code></pre>
<p>Result:</p>
<ul>
<li>整數位數,不足會補零</li>
<li>小數位數,不足會補零</li>
<li>小數位數超過的,會四捨五入</li>
</ul>
<pre><code>012,345.50
123,456.70
1,234,567.58
</code></pre>
<hr>
<h4 id="日期型態資料的格式化字串">日期型態資料的格式化字串</h4>
<table>
<thead>
<tr>
<th>代號</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>y</td>
<td>yyyy年MM月</td>
</tr>
<tr>
<td>yy</td>
<td>yy 兩位數西元年</td>
</tr>
<tr>
<td>yyyy</td>
<td>yyyy 四位數西元年</td>
</tr>
<tr>
<td>M</td>
<td>MM月dd日</td>
</tr>
<tr>
<td>MM</td>
<td>MM 兩位數月份,不足兩位數,前面會補0</td>
</tr>
<tr>
<td>d</td>
<td>yyyy/MM/dd</td>
</tr>
<tr>
<td>dd</td>
<td>dd 兩位數日期,不足兩位數,前面會補0</td>
</tr>
<tr>
<td>hh</td>
<td>兩位數12小時制(不足兩位數,前面會補0)不會顯示 AM/PM 或上午/下午</td>
</tr>
<tr>
<td>HH</td>
<td>兩位數24小時制(不足兩位數,前面會補0)</td>
</tr>
<tr>
<td>mm</td>
<td>兩位數分鐘(不足兩位數,前面會補0)</td>
</tr>
<tr>
<td>s</td>
<td>yyyy-MM-ddTHH:mm:ss</td>
</tr>
<tr>
<td>ss</td>
<td>兩位數秒(不足兩位數,前面會補0)</td>
</tr>
<tr>
<td>f</td>
<td>yyyy年M月dd日 上午/下午 hh:mm</td>
</tr>
<tr>
<td>ff</td>
<td>兩位數毫秒</td>
</tr>
<tr>
<td>fff</td>
<td>三位數毫秒</td>
</tr>
<tr>
<td>ddd</td>
<td>周一、周二、周三…</td>
</tr>
<tr>
<td>dddd</td>
<td>星期一、星期二、星期三…</td>
</tr>
</tbody>
</table>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-71789258323826337952024-03-23T09:47:00.002+08:002024-03-23T09:47:09.788+08:00小百岳<h1 id="小百岳列表">小百岳列表</h1>
<table>
<thead>
<tr>
<th align="center">編號</th>
<th>山名</th>
<th>縣市別</th>
<th>鄉鎮市區別</th>
<th>別名</th>
<th align="center">難度</th>
<th>座標</th>
<th align="right">標高(m)</th>
<th>備註</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">1</td>
<td>大屯山</td>
<td>台北市、新北市</td>
<td>北投區、淡水區</td>
<td></td>
<td align="center">1.3</td>
<td></td>
<td align="right">1092</td>
<td></td>
</tr>
<tr>
<td align="center">2</td>
<td><mark>七星山</mark></td>
<td>台北市</td>
<td>北投區</td>
<td></td>
<td align="center">1.4</td>
<td></td>
<td align="right">1120</td>
<td></td>
</tr>
<tr>
<td align="center">3</td>
<td>大武崙山</td>
<td>基隆市</td>
<td>安樂區</td>
<td>砲台山</td>
<td align="center">0.6</td>
<td></td>
<td align="right">231</td>
<td>近中山區界</td>
</tr>
<tr>
<td align="center">4</td>
<td>槓子寮山</td>
<td>基隆市</td>
<td>中正區</td>
<td>槓子寮砲台</td>
<td align="center">0.1</td>
<td>25.143730986822487, 121.7819003870428</td>
<td align="right">163</td>
<td></td>
</tr>
<tr>
<td align="center">5</td>
<td>觀音山</td>
<td>新北市</td>
<td>八里區</td>
<td>硬漢嶺</td>
<td align="center">1.5</td>
<td>25.135933897405756, 121.42666847085579</td>
<td align="right">616</td>
<td><mark>2023/11/19已達成</mark></td>
</tr>
<tr>
<td align="center">6</td>
<td>基隆山</td>
<td>新北市</td>
<td>瑞芳區</td>
<td>大肚美人山</td>
<td align="center">0.9</td>
<td></td>
<td align="right">588</td>
<td></td>
</tr>
<tr>
<td align="center">7</td>
<td>紅淡山</td>
<td>基隆市</td>
<td>仁愛區</td>
<td></td>
<td align="center">0.8</td>
<td></td>
<td align="right">210</td>
<td></td>
</tr>
<tr>
<td align="center">8</td>
<td><mark>大崙頭山</mark></td>
<td>台北市</td>
<td>士林區、內湖區</td>
<td></td>
<td align="center">0.3</td>
<td></td>
<td align="right">478</td>
<td></td>
</tr>
<tr>
<td align="center">9</td>
<td><mark>劍潭山</mark></td>
<td>台北市</td>
<td>士林區</td>
<td></td>
<td align="center">0.3</td>
<td></td>
<td align="right">153</td>
<td><mark>2024/01/27已達成</mark></td>
</tr>
<tr>
<td align="center">10</td>
<td>五分山</td>
<td>新北市</td>
<td>瑞芳區、平溪區</td>
<td></td>
<td align="center">0.1</td>
<td></td>
<td align="right">757</td>
<td></td>
</tr>
<tr>
<td align="center">11</td>
<td>姜子寮山</td>
<td>基隆市</td>
<td>七堵區</td>
<td>三角架山</td>
<td align="center">0.9</td>
<td></td>
<td align="right">729</td>
<td></td>
</tr>
<tr>
<td align="center">12</td>
<td>汐止大尖山</td>
<td>新北市</td>
<td>汐止區</td>
<td></td>
<td align="center">0.5</td>
<td></td>
<td align="right">460</td>
<td></td>
</tr>
<tr>
<td align="center">13</td>
<td><mark>南港山</mark></td>
<td>台北市</td>
<td>信義區、南港區</td>
<td></td>
<td align="center">0.8</td>
<td></td>
<td align="right">375</td>
<td><mark>2024/01/20已達成</mark></td>
</tr>
<tr>
<td align="center">14</td>
<td>土庫岳</td>
<td>新北市</td>
<td>深坑區</td>
<td>大坪山</td>
<td align="center">0.2</td>
<td></td>
<td align="right">389</td>
<td>近南港區界</td>
</tr>
<tr>
<td align="center">15</td>
<td>大棟山</td>
<td>新北市、桃園市</td>
<td>樹林區、龜山區</td>
<td></td>
<td align="center">1.2(0)</td>
<td></td>
<td align="right">405</td>
<td></td>
</tr>
<tr>
<td align="center">16</td>
<td><mark>南勢角山</mark></td>
<td>新北市</td>
<td>中和區、新店區</td>
<td>風爐塞山</td>
<td align="center">2.1</td>
<td></td>
<td align="right">302</td>
<td></td>
</tr>
<tr>
<td align="center">17</td>
<td>二格山</td>
<td>台北市、新北市</td>
<td>文山區、石碇區</td>
<td>石尖山</td>
<td align="center">2.4</td>
<td></td>
<td align="right">678[1]</td>
<td></td>
</tr>
<tr>
<td align="center">18</td>
<td><mark>天上山</mark></td>
<td>新北市</td>
<td>土城區</td>
<td>皇帝山</td>
<td align="center">0.4</td>
<td></td>
<td align="right">429</td>
<td></td>
</tr>
<tr>
<td align="center">19</td>
<td><mark>福德坑山</mark></td>
<td>新北市</td>
<td>三峽區</td>
<td>鳶山</td>
<td align="center">0.3</td>
<td></td>
<td align="right">321</td>
<td>並非標高300公尺之鳶山</td>
</tr>
<tr>
<td align="center">20</td>
<td>獅仔頭山</td>
<td>新北市</td>
<td>新店區、三峽區</td>
<td></td>
<td align="center">1.7</td>
<td></td>
<td align="right">858</td>
<td></td>
</tr>
<tr>
<td align="center">21</td>
<td>金面山</td>
<td>桃園市</td>
<td>大溪區</td>
<td>鳥嘴尖</td>
<td align="center">1.4</td>
<td></td>
<td align="right">667</td>
<td></td>
</tr>
<tr>
<td align="center">22</td>
<td><mark>東眼山</mark></td>
<td>新北市、桃園市</td>
<td>三峽區、復興區</td>
<td></td>
<td align="center">0.7</td>
<td></td>
<td align="right">1212</td>
<td><mark>2024/02/03已達成</mark></td>
</tr>
<tr>
<td align="center">23</td>
<td><mark>溪洲山</mark></td>
<td>桃園市</td>
<td>大溪區</td>
<td></td>
<td align="center">1.8</td>
<td></td>
<td align="right">577</td>
<td></td>
</tr>
<tr>
<td align="center">24</td>
<td><mark>石門山</mark></td>
<td>桃園市</td>
<td>龍潭區</td>
<td>小竹坑山</td>
<td align="center">1.6</td>
<td></td>
<td align="right">551</td>
<td></td>
</tr>
<tr>
<td align="center">25</td>
<td>石牛山</td>
<td>桃園市、新竹縣</td>
<td>復興區、關西鎮</td>
<td></td>
<td align="center">1.5</td>
<td></td>
<td align="right">671</td>
<td></td>
</tr>
<tr>
<td align="center">26</td>
<td>十八尖山</td>
<td>新竹市</td>
<td>東區</td>
<td></td>
<td align="center">0.1</td>
<td></td>
<td align="right">130</td>
<td></td>
</tr>
<tr>
<td align="center">27</td>
<td>飛鳳山</td>
<td>新竹縣</td>
<td>芎林鄉</td>
<td>中坑山</td>
<td align="center">1.7</td>
<td></td>
<td align="right">462</td>
<td>非423m的飛鳳山,而是二等三角點的中坑山</td>
</tr>
<tr>
<td align="center">28</td>
<td>李崠山</td>
<td>桃園市、新竹縣</td>
<td>復興區、尖石鄉</td>
<td>李棟山</td>
<td align="center">1.2</td>
<td></td>
<td align="right">1914</td>
<td></td>
</tr>
<tr>
<td align="center">29</td>
<td>獅頭山</td>
<td>苗栗縣</td>
<td>三灣鄉、南庄鄉</td>
<td></td>
<td align="center">0.3</td>
<td></td>
<td align="right">492</td>
<td></td>
</tr>
<tr>
<td align="center">30</td>
<td>五指山</td>
<td>新竹縣</td>
<td>竹東鎮、北埔鄉、五峰鄉</td>
<td></td>
<td align="center">1.8</td>
<td></td>
<td align="right">1062</td>
<td></td>
</tr>
<tr>
<td align="center">31</td>
<td>鵝公髻山</td>
<td>新竹縣、苗栗縣</td>
<td>五峰鄉、南庄鄉</td>
<td></td>
<td align="center">1.8</td>
<td></td>
<td align="right">1579</td>
<td></td>
</tr>
<tr>
<td align="center">32</td>
<td>向天湖山</td>
<td>苗栗縣</td>
<td>南庄鄉</td>
<td></td>
<td align="center">1.9</td>
<td></td>
<td align="right">1225</td>
<td></td>
</tr>
<tr>
<td align="center">33</td>
<td>仙山</td>
<td>苗栗縣</td>
<td>獅潭鄉</td>
<td>紅毛館山</td>
<td align="center">0.5</td>
<td></td>
<td align="right">967</td>
<td></td>
</tr>
<tr>
<td align="center">34</td>
<td>加里山</td>
<td>苗栗縣</td>
<td>南庄鄉、泰安鄉</td>
<td>加里仙山</td>
<td align="center">2.4</td>
<td></td>
<td align="right">2210</td>
<td>台灣富士山,注意可能有高山症</td>
</tr>
<tr>
<td align="center">35</td>
<td>火炎山</td>
<td>苗栗縣</td>
<td>苑裡鎮、三義鄉</td>
<td></td>
<td align="center">1.7</td>
<td></td>
<td align="right">596</td>
<td></td>
</tr>
<tr>
<td align="center">36</td>
<td>關刀山</td>
<td>苗栗縣</td>
<td>三義鄉、大湖鄉</td>
<td></td>
<td align="center">1</td>
<td></td>
<td align="right">889</td>
<td></td>
</tr>
<tr>
<td align="center">37</td>
<td>馬那邦山</td>
<td>苗栗縣</td>
<td>大湖鄉、泰安鄉</td>
<td>馬拉邦山</td>
<td align="center">2</td>
<td></td>
<td align="right">1407</td>
<td>近卓蘭鎮界</td>
</tr>
<tr>
<td align="center">38</td>
<td>鐵砧山</td>
<td>台中市</td>
<td>外埔區</td>
<td></td>
<td align="center">0.2</td>
<td></td>
<td align="right">236</td>
<td>跨大甲區境</td>
</tr>
<tr>
<td align="center">39</td>
<td>稍來山</td>
<td>台中市</td>
<td>和平區</td>
<td></td>
<td align="center">0.7</td>
<td></td>
<td align="right">2307</td>
<td>注意可能有高山症</td>
</tr>
<tr>
<td align="center">40</td>
<td>聚興山</td>
<td>台中市</td>
<td>潭子區</td>
<td></td>
<td align="center">0.8</td>
<td></td>
<td align="right">500</td>
<td></td>
</tr>
<tr>
<td align="center">41</td>
<td>頭嵙山</td>
<td>台中市</td>
<td>北屯區、新社區</td>
<td></td>
<td align="center">0.7</td>
<td></td>
<td align="right">859</td>
<td></td>
</tr>
<tr>
<td align="center">42</td>
<td>南觀音山</td>
<td>台中市</td>
<td>北屯區</td>
<td></td>
<td align="center">0.3</td>
<td></td>
<td align="right">318</td>
<td></td>
</tr>
<tr>
<td align="center">43</td>
<td>三汀山</td>
<td>台中市</td>
<td>太平區</td>
<td></td>
<td align="center">1.5</td>
<td></td>
<td align="right">480</td>
<td></td>
</tr>
<tr>
<td align="center">44</td>
<td>暗影山</td>
<td>台中市</td>
<td>太平區</td>
<td>酒桶山</td>
<td align="center">1</td>
<td></td>
<td align="right">997</td>
<td></td>
</tr>
<tr>
<td align="center">45</td>
<td>大橫屏山</td>
<td>台中市、南投縣</td>
<td>太平區、國姓鄉</td>
<td></td>
<td align="center">2.1</td>
<td></td>
<td align="right">1205</td>
<td></td>
</tr>
<tr>
<td align="center">46</td>
<td>阿罩霧山</td>
<td>台中市</td>
<td>霧峰區</td>
<td></td>
<td align="center">0.1</td>
<td></td>
<td align="right">249</td>
<td></td>
</tr>
<tr>
<td align="center">47</td>
<td>九份二山</td>
<td>南投縣</td>
<td>中寮鄉、國姓鄉</td>
<td></td>
<td align="center">0.6</td>
<td></td>
<td align="right">1174</td>
<td></td>
</tr>
<tr>
<td align="center">48</td>
<td>橫山</td>
<td>南投縣</td>
<td>南投市、名間鄉</td>
<td></td>
<td align="center">1.5(0.2)</td>
<td></td>
<td align="right">444</td>
<td>近彰化縣社頭鄉界</td>
</tr>
<tr>
<td align="center">49</td>
<td>貓囒山</td>
<td>南投縣</td>
<td>魚池鄉</td>
<td></td>
<td align="center">0.8</td>
<td></td>
<td align="right">1016</td>
<td></td>
</tr>
<tr>
<td align="center">50</td>
<td>集集大山</td>
<td>南投縣</td>
<td>集集鎮、中寮鄉</td>
<td></td>
<td align="center">0(2.8)</td>
<td></td>
<td align="right">1392</td>
<td>近水里鄉界</td>
</tr>
<tr>
<td align="center">51</td>
<td>松柏坑山</td>
<td>彰化縣、南投縣</td>
<td>二水鄉、名間鄉</td>
<td>松柏嶺</td>
<td align="center">1(0)</td>
<td></td>
<td align="right">430</td>
<td></td>
</tr>
<tr>
<td align="center">52</td>
<td>後尖山</td>
<td>南投縣</td>
<td>魚池鄉、水里鄉</td>
<td></td>
<td align="center">1</td>
<td></td>
<td align="right">1008</td>
<td></td>
</tr>
<tr>
<td align="center">53</td>
<td>鳳凰山</td>
<td>南投縣</td>
<td>鹿谷鄉</td>
<td></td>
<td align="center">2.1</td>
<td></td>
<td align="right">1696</td>
<td></td>
</tr>
<tr>
<td align="center">54</td>
<td>金柑樹山</td>
<td>南投縣</td>
<td>竹山鎮、信義鄉</td>
<td></td>
<td align="center">2.8</td>
<td></td>
<td align="right">2091</td>
<td></td>
</tr>
<tr>
<td align="center">55</td>
<td>石壁山</td>
<td>雲林縣、嘉義縣</td>
<td>古坑鄉、阿里山鄉</td>
<td></td>
<td align="center">1.5</td>
<td></td>
<td align="right">1751</td>
<td>近竹山鎮界</td>
</tr>
<tr>
<td align="center">56</td>
<td>雲嘉大尖山</td>
<td>雲林縣、嘉義縣</td>
<td>古坑鄉、梅山鄉</td>
<td></td>
<td align="center">1.5</td>
<td></td>
<td align="right">1299</td>
<td></td>
</tr>
<tr>
<td align="center">57</td>
<td>梨子腳山</td>
<td>嘉義縣</td>
<td>梅山鄉</td>
<td>掘尺嶺山、 祝壽山</td>
<td align="center">0.2</td>
<td></td>
<td align="right">1176</td>
<td></td>
</tr>
<tr>
<td align="center">58</td>
<td>獨立山</td>
<td>嘉義縣</td>
<td>竹崎鄉</td>
<td></td>
<td align="center">1</td>
<td></td>
<td align="right">840</td>
<td></td>
</tr>
<tr>
<td align="center">59</td>
<td>大塔山</td>
<td>嘉義縣、南投縣</td>
<td>阿里山鄉、信義鄉</td>
<td></td>
<td align="center">1.7</td>
<td></td>
<td align="right">2663</td>
<td>注意可能有高山症</td>
</tr>
<tr>
<td align="center">60</td>
<td>大凍山</td>
<td>嘉義縣</td>
<td>梅山鄉、阿里山鄉</td>
<td>畚箕山、糞箕山</td>
<td align="center">0.8</td>
<td></td>
<td align="right">1967</td>
<td>近竹崎鄉界</td>
</tr>
<tr>
<td align="center">61</td>
<td>大湖尖山</td>
<td>嘉義縣</td>
<td>竹崎鄉、番路鄉</td>
<td></td>
<td align="center">0.9-2</td>
<td></td>
<td align="right">1313</td>
<td></td>
</tr>
<tr>
<td align="center">62</td>
<td>紅毛埤山</td>
<td>嘉義市</td>
<td>東區</td>
<td></td>
<td align="center">0.5(0.1)</td>
<td></td>
<td align="right">150</td>
<td></td>
</tr>
<tr>
<td align="center">63</td>
<td>大凍山</td>
<td>臺南市、嘉義縣</td>
<td>白河區、大埔鄉</td>
<td>凍頭山</td>
<td align="center">1.5</td>
<td></td>
<td align="right">1241</td>
<td></td>
</tr>
<tr>
<td align="center">64</td>
<td>崁頭山</td>
<td>臺南市</td>
<td>東山區</td>
<td></td>
<td align="center">0.5</td>
<td></td>
<td align="right">844</td>
<td></td>
</tr>
<tr>
<td align="center">65</td>
<td>三腳南山</td>
<td>嘉義縣、臺南市</td>
<td>大埔鄉、南化區</td>
<td></td>
<td align="center">2.1</td>
<td></td>
<td align="right">1186</td>
<td></td>
</tr>
<tr>
<td align="center">66</td>
<td>西阿里關山</td>
<td>臺南市、高雄市</td>
<td>南化區、甲仙區</td>
<td>小林山</td>
<td align="center">0.5</td>
<td></td>
<td align="right">973</td>
<td></td>
</tr>
<tr>
<td align="center">67</td>
<td>竹子尖山</td>
<td>臺南市</td>
<td>楠西區、南化區</td>
<td></td>
<td align="center">1.1</td>
<td></td>
<td align="right">1090</td>
<td></td>
</tr>
<tr>
<td align="center">68</td>
<td>東藤枝山</td>
<td>高雄市</td>
<td>桃源區</td>
<td>藤枝山</td>
<td align="center">0.7</td>
<td></td>
<td align="right">1565</td>
<td>新入選</td>
</tr>
<tr>
<td align="center">69</td>
<td>白雲山</td>
<td>高雄市</td>
<td>甲仙區</td>
<td>廓亭山</td>
<td align="center">1.1</td>
<td></td>
<td align="right">1044</td>
<td></td>
</tr>
<tr>
<td align="center">70</td>
<td>烏山嶺</td>
<td>臺南市、高雄市</td>
<td>南化區、杉林區</td>
<td>刣牛湖山、烏山步道</td>
<td align="center">2.2</td>
<td></td>
<td align="right">730</td>
<td></td>
</tr>
<tr>
<td align="center">71</td>
<td>鳴海山</td>
<td>高雄市</td>
<td>茂林區</td>
<td></td>
<td align="center">2.9</td>
<td></td>
<td align="right">1411</td>
<td></td>
</tr>
<tr>
<td align="center">72</td>
<td>旗尾山</td>
<td>高雄市</td>
<td>旗山區</td>
<td></td>
<td align="center">0.3</td>
<td></td>
<td align="right">318</td>
<td></td>
</tr>
<tr>
<td align="center">73</td>
<td>尾寮山</td>
<td>屏東縣、高雄市</td>
<td>茂林區、三地門鄉</td>
<td></td>
<td align="center">2.5</td>
<td></td>
<td align="right">1427</td>
<td></td>
</tr>
<tr>
<td align="center">74</td>
<td>大崗山</td>
<td>高雄市</td>
<td>岡山區、阿蓮區、田寮區</td>
<td></td>
<td align="center">0.6</td>
<td></td>
<td align="right">312</td>
<td></td>
</tr>
<tr>
<td align="center">75</td>
<td>觀音山</td>
<td>高雄市</td>
<td>大社區、仁武區</td>
<td></td>
<td align="center">2</td>
<td></td>
<td align="right">169</td>
<td></td>
</tr>
<tr>
<td align="center">76</td>
<td>笠頂山</td>
<td>屏東縣</td>
<td>瑪家鄉</td>
<td></td>
<td align="center">1.4</td>
<td></td>
<td align="right">659</td>
<td></td>
</tr>
<tr>
<td align="center">77</td>
<td>壽山</td>
<td>高雄市</td>
<td>鼓山區</td>
<td>柴山</td>
<td align="center">0.5</td>
<td></td>
<td align="right">356</td>
<td></td>
</tr>
<tr>
<td align="center">78</td>
<td>棚集山</td>
<td>屏東縣</td>
<td>來義鄉</td>
<td></td>
<td align="center">1.8</td>
<td></td>
<td align="right">899</td>
<td></td>
</tr>
<tr>
<td align="center">79</td>
<td>女仍山</td>
<td>屏東縣</td>
<td>獅子鄉、牡丹鄉</td>
<td></td>
<td align="center">2.2</td>
<td></td>
<td align="right">804</td>
<td></td>
</tr>
<tr>
<td align="center">80</td>
<td>里龍山</td>
<td>屏東縣</td>
<td>獅子鄉、牡丹鄉</td>
<td>里瀧山</td>
<td align="center">1.4</td>
<td></td>
<td align="right">1062</td>
<td></td>
</tr>
<tr>
<td align="center">81</td>
<td>大山母山</td>
<td>屏東縣</td>
<td>滿州鄉</td>
<td>萬里得山</td>
<td align="center">#N/A</td>
<td></td>
<td align="right">325</td>
<td>新入選</td>
</tr>
<tr>
<td align="center">82</td>
<td><mark>灣坑頭山</mark></td>
<td>宜蘭縣</td>
<td>頭城鎮</td>
<td></td>
<td align="center">2.5</td>
<td></td>
<td align="right">616</td>
<td><mark>2024/02/10已達成</mark></td>
</tr>
<tr>
<td align="center">83</td>
<td><mark>三角崙山</mark></td>
<td>新北市</td>
<td>坪林區</td>
<td></td>
<td align="center">2.2</td>
<td></td>
<td align="right">1029</td>
<td></td>
</tr>
<tr>
<td align="center">84</td>
<td>鵲子山</td>
<td>宜蘭縣</td>
<td>礁溪鄉</td>
<td>鴻子山</td>
<td align="center">0.3</td>
<td></td>
<td align="right">679</td>
<td>礁溪富士山</td>
</tr>
<tr>
<td align="center">85</td>
<td>三星山</td>
<td>宜蘭縣</td>
<td>大同鄉</td>
<td></td>
<td align="center">0.9</td>
<td></td>
<td align="right">2352</td>
<td></td>
</tr>
<tr>
<td align="center">86</td>
<td>卡拉寶山</td>
<td>花蓮縣</td>
<td>秀林鄉</td>
<td>祖輪山</td>
<td align="center">#N/A</td>
<td></td>
<td align="right">2397</td>
<td>注意可能有高山症</td>
</tr>
<tr>
<td align="center">87</td>
<td>立霧山</td>
<td>花蓮縣</td>
<td>秀林鄉</td>
<td></td>
<td align="center">2.5</td>
<td></td>
<td align="right">1274</td>
<td></td>
</tr>
<tr>
<td align="center">88</td>
<td>初音山</td>
<td>花蓮縣</td>
<td>吉安鄉、秀林鄉</td>
<td></td>
<td align="center">0.2(0.3)</td>
<td></td>
<td align="right">906</td>
<td></td>
</tr>
<tr>
<td align="center">89</td>
<td>鯉魚山</td>
<td>花蓮縣</td>
<td>壽豐鄉</td>
<td></td>
<td align="center">1</td>
<td></td>
<td align="right">601</td>
<td></td>
</tr>
<tr>
<td align="center">90</td>
<td>月眉山</td>
<td>花蓮縣</td>
<td>壽豐鄉</td>
<td></td>
<td align="center">0.6</td>
<td></td>
<td align="right">614</td>
<td></td>
</tr>
<tr>
<td align="center">91</td>
<td>八里灣山</td>
<td>花蓮縣</td>
<td>豐濱鄉、瑞穗鄉</td>
<td>貓公富士山</td>
<td align="center">2.8</td>
<td></td>
<td align="right">924</td>
<td></td>
</tr>
<tr>
<td align="center">92</td>
<td>萬人山</td>
<td>花蓮縣</td>
<td>富里鄉</td>
<td></td>
<td align="center">0.1</td>
<td></td>
<td align="right">886</td>
<td></td>
</tr>
<tr>
<td align="center">93</td>
<td>都蘭山</td>
<td>台東縣</td>
<td>東河鄉、延平鄉</td>
<td>都巒山</td>
<td align="center">1.9</td>
<td></td>
<td align="right">1190</td>
<td>台東富士山</td>
</tr>
<tr>
<td align="center">94</td>
<td>太麻里山</td>
<td>台東縣</td>
<td>太麻里鄉</td>
<td>金針山</td>
<td align="center">0</td>
<td></td>
<td align="right">1340</td>
<td></td>
</tr>
<tr>
<td align="center">95</td>
<td>加奈美山</td>
<td>台東縣</td>
<td>大武鄉</td>
<td></td>
<td align="center">1.6</td>
<td></td>
<td align="right">780</td>
<td></td>
</tr>
<tr>
<td align="center">96</td>
<td>巴塱衛山</td>
<td>台東縣</td>
<td>大武鄉</td>
<td></td>
<td align="center">0</td>
<td></td>
<td align="right">324</td>
<td></td>
</tr>
<tr>
<td align="center">97</td>
<td>紅頭山</td>
<td>台東縣</td>
<td>蘭嶼鄉</td>
<td></td>
<td align="center">1.7</td>
<td></td>
<td align="right">552</td>
<td></td>
</tr>
<tr>
<td align="center">98</td>
<td>雲台山</td>
<td>連江縣</td>
<td>南竿鄉</td>
<td></td>
<td align="center">0</td>
<td></td>
<td align="right">248</td>
<td></td>
</tr>
<tr>
<td align="center">99</td>
<td>太武山</td>
<td>金門縣</td>
<td>金湖鎮</td>
<td></td>
<td align="center">0.6</td>
<td></td>
<td align="right">253</td>
<td><mark>已達成</mark></td>
</tr>
<tr>
<td align="center">100</td>
<td>蛇頭山</td>
<td>澎湖縣</td>
<td>馬公市</td>
<td></td>
<td align="center">0</td>
<td></td>
<td align="right">20</td>
<td></td>
</tr>
</tbody>
</table><hr>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-10492855843306842882024-03-13T23:46:00.001+08:002024-03-13T23:47:04.508+08:00Powershell 變數型態_Array<h1 id="array">Array</h1>
<ul>
<li>同一陣列內,可以混合儲存各種形態資料</li>
<li>陣列起始註標為 0</li>
</ul>
<h3 id="陣列的表示法">陣列的表示法</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a1</span> = 1<span class="token punctuation">.</span><span class="token punctuation">.</span>3
<span class="token variable">$a2</span> = 1<span class="token punctuation">,</span>2<span class="token punctuation">,</span>3
<span class="token variable">$a3</span> = @<span class="token punctuation">(</span>1<span class="token punctuation">,</span>2<span class="token punctuation">,</span>3<span class="token punctuation">)</span>
<span class="token variable">$a4</span> = <span class="token punctuation">(</span>1<span class="token punctuation">.</span><span class="token punctuation">.</span>3<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"ABC"</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>7<span class="token punctuation">.</span><span class="token punctuation">.</span>9<span class="token punctuation">)</span><span class="token punctuation">,</span> @<span class="token punctuation">{</span><span class="token string">'name'</span>=<span class="token string">"tom"</span><span class="token punctuation">;</span> <span class="token string">"age"</span>=51<span class="token punctuation">}</span>
</code></pre>
<p>Result</p>
<pre><code>$a4[0] = 1, 2, 3
$a4[1] = "ABC"
$a4[2] = 7, 8, 9
</code></pre>
<hr>
<h3 id="宣告空陣列">宣告空陣列</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a5</span> = @<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a5</span><span class="token punctuation">.</span>Count <span class="token operator">-eq</span> 0 <span class="token comment"># True</span>
</code></pre>
<hr>
<h3 id="只有一個變數值,要設定為陣列">只有一個變數值,要設定為陣列</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a6</span> = <span class="token punctuation">,</span> <span class="token string">"Hello"</span>
<span class="token variable">$a7</span> = @<span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">)</span>
<span class="token comment"># 輸出 $a6 變數註標值為0的元素</span>
<span class="token variable">$a6</span><span class="token punctuation">[</span>0<span class="token punctuation">]</span>
<span class="token comment"># 輸出 $a7 變數註標值為0的元素</span>
<span class="token variable">$a7</span><span class="token punctuation">[</span>0<span class="token punctuation">]</span>
<span class="token variable">$a6</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a7</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre>
<p>Result:</p>
<pre><code>Hello
Hello
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
True True Object[] System.Array
</code></pre>
<hr>
<h3 id="反向取得陣列值">反向取得陣列值</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$array</span> = <span class="token string">"Tom"</span><span class="token punctuation">,</span> <span class="token string">"Kate"</span><span class="token punctuation">,</span> <span class="token string">"Dylan"</span>
<span class="token variable">$array</span><span class="token punctuation">[</span><span class="token operator">-</span>1<span class="token punctuation">]</span> <span class="token comment"># 陣列最後一個值</span>
<span class="token variable">$array</span><span class="token punctuation">[</span><span class="token operator">-</span>2<span class="token punctuation">]</span> <span class="token comment"># 陣列倒數第二個值</span>
</code></pre>
<p>Result:</p>
<pre class=" language-pwsh"><code class="prism language-pwsh">Dylan
Kate
</code></pre>
<hr>
<h3 id="計算陣列中符合條件值的數量篩選等於-100,再計算-count">計算陣列中符合條件值的數量(篩選等於 100,再計算 Count)</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a8</span> = @<span class="token punctuation">(</span>100<span class="token punctuation">,</span> 59<span class="token punctuation">,</span> 95<span class="token punctuation">,</span> 60<span class="token punctuation">,</span> 100<span class="token punctuation">,</span> 88<span class="token punctuation">,</span> 76<span class="token punctuation">)</span>
<span class="token punctuation">(</span><span class="token variable">$a8</span> <span class="token operator">-eq</span> 100<span class="token punctuation">)</span><span class="token punctuation">.</span>Count <span class="token comment"># 統計滿分人數</span>
</code></pre>
<h3 id="array-元素的增加">Array 元素的增加</h3>
<p><mark>雖然 Array 有 Add Method,但是當你使用 Add() 時,會出現"集合屬於固定大小"的錯誤</mark><br>
所以當你要在 Array 增加元素時,<strong>請使用數學運算 +</strong></p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span>=@<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a</span> <span class="token operator">+=</span> 1
<span class="token variable">$a</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a</span><span class="token punctuation">.</span>Add<span class="token punctuation">(</span>5<span class="token punctuation">)</span>
<span class="token variable">$a</span> <span class="token operator">+=</span> 5
<span class="token variable">$a</span>
</code></pre>
<p>Result:</p>
<pre><code>IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
以 "1" 引數呼叫 "Add" 時發生例外狀況: "集合屬於固定大小。"
位於 線路:4 字元:1
+ $a.Add(5)
+ ~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NotSupportedException
1
5
</code></pre>
<hr>
<h3 id="雖然空一格,但不占空間">雖然空一格,但不占空間</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = @<span class="token punctuation">(</span>1<span class="token punctuation">,</span>2<span class="token punctuation">,</span>3<span class="token punctuation">,</span> <span class="token punctuation">,</span>5<span class="token punctuation">)</span>
<span class="token variable">$a</span><span class="token punctuation">.</span>count
<span class="token variable">$a</span>
</code></pre>
<p>Result</p>
<pre><code>4
1
2
3
5
</code></pre>
<hr>
<h3 id="array-元素的減少">Array 元素的減少</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = @<span class="token punctuation">(</span>1<span class="token punctuation">,</span>2<span class="token punctuation">,</span>3<span class="token punctuation">,</span>4<span class="token punctuation">,</span>5<span class="token punctuation">,</span>6<span class="token punctuation">,</span>7<span class="token punctuation">,</span>8<span class="token punctuation">,</span>9<span class="token punctuation">)</span>
<span class="token comment"># 用註標來選擇</span>
<span class="token variable">$a</span> = <span class="token variable">$a</span><span class="token punctuation">[</span>1<span class="token punctuation">,</span>3<span class="token punctuation">,</span>5<span class="token punctuation">]</span>
<span class="token variable">$a</span>
</code></pre>
<p>Result:</p>
<pre class=" language-powershell"><code class="prism language-powershell">2
4
6
</code></pre>
<hr>
<h3 id="移除陣列中的空字串">移除陣列中的空字串</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token comment"># 宣告一個陣列</span>
<span class="token variable">$a</span> = @<span class="token punctuation">(</span>1<span class="token punctuation">,</span> 2<span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> 4<span class="token punctuation">)</span>
<span class="token comment"># 以下三種方法都可以移除空字串</span>
<span class="token variable">$a</span> = <span class="token variable">$a</span><span class="token punctuation">.</span>Where<span class="token punctuation">(</span> <span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-ne</span> <span class="token string">""</span><span class="token punctuation">}</span> <span class="token punctuation">)</span>
<span class="token variable">$a</span> = <span class="token variable">$a</span> <span class="token punctuation">|</span> <span class="token function">Where-Object</span> <span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-ne</span> <span class="token string">""</span> <span class="token punctuation">}</span>
<span class="token variable">$a</span> = <span class="token variable">$a</span> <span class="token operator">-ne</span> <span class="token string">""</span>
</code></pre>
<hr>
<h3 id="arrary-與-arraylist-型態互換">Arrary 與 ArrayList 型態互換</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = @<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment"># 將 [System.Array] 轉換成 [System.Collections.ArrayList]</span>
<span class="token variable">$a</span> = <span class="token namespace">[System.Collections.ArrayList]</span><span class="token variable">$a</span>
<span class="token variable">$a</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment"># [System.Collections.ArrayList] 轉換成 [System.Array]</span>
<span class="token variable">$a</span> = <span class="token namespace">[System.Array]</span><span class="token variable">$a</span>
</code></pre>
<p>Result:</p>
<pre class=" language-powershell"><code class="prism language-powershell">IsPublic IsSerial Name BaseType
<span class="token operator">--</span>-<span class="token operator">--</span>-<span class="token operator">--</span> <span class="token operator">--</span>-<span class="token operator">--</span>-<span class="token operator">--</span> <span class="token operator">--</span>-<span class="token operator">-</span> <span class="token operator">--</span>-<span class="token operator">--</span>-<span class="token operator">--</span>
True True Object<span class="token punctuation">[</span><span class="token punctuation">]</span> System<span class="token punctuation">.</span>Array
True True ArrayList System<span class="token punctuation">.</span>Object
</code></pre>
<p><a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_arrays?view=powershell-7.3">https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_arrays?view=powershell-7.3</a></p>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-66175458647083314452024-03-13T00:41:00.002+08:002024-03-13T00:41:55.311+08:00Powershell 變數型態_Hashtable<h3 id="三種-hash-table-的表示方式">三種 Hash Table 的表示方式</h3>
<pre><code>為什麼要用 Hash Table 這種資料結構?
因為Powershell 可以很方便的將 Hash Table 陣列轉換換成 PSObject
而 PSObject可以很方便的轉換成各種格式,例如 .csv .html table .json .xml
</code></pre>
<pre class=" language-pwsh"><code class="prism language-pwsh">$v1 = @{}
$v2 = New-Object -TypeName Hashtable
$v3= @{
"Key1" = 3
"Key2" = "String"
"Key3" = @("array",5,"string")
}
$v2.Add("Key1",5)
$v2.Add("Key2","string")
$v2 | Format-List
$v3 | Format-Table
</code></pre>
<blockquote>
<p>Hash Tables<br>
<a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-5.1">https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-5.1</a></p>
</blockquote>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-3772076268975432982024-03-12T23:18:00.002+08:002024-03-12T23:18:08.361+08:00Powershell 系統內建變數<h1 id="automatic--variables-自動變數-系統內建變數">Automatic Variables 自動變數 (系統內建變數)</h1>
<table>
<thead>
<tr>
<th>變數</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>$$</td>
<td></td>
</tr>
<tr>
<td>$?</td>
<td>查詢前一次指令的執行狀態</td>
</tr>
<tr>
<td>$^</td>
<td>查詢前一次執行的指令</td>
</tr>
<tr>
<td>$_</td>
<td>迴圈或是 Pipe 的暫存變數</td>
</tr>
<tr>
<td>$args</td>
<td></td>
</tr>
<tr>
<td>$ConsoleFileName</td>
<td></td>
</tr>
<tr>
<td>$Error</td>
<td></td>
</tr>
<tr>
<td>$Event</td>
<td></td>
</tr>
<tr>
<td>$EventSubscriber</td>
<td></td>
</tr>
<tr>
<td>$ExecutionContext</td>
<td></td>
</tr>
<tr>
<td>$true</td>
<td></td>
</tr>
<tr>
<td>$false</td>
<td></td>
</tr>
<tr>
<td>$null</td>
<td></td>
</tr>
<tr>
<td>$foreach</td>
<td></td>
</tr>
<tr>
<td>$HOME</td>
<td>使用者帳號家目錄路徑</td>
</tr>
<tr>
<td>$Host</td>
<td>用來判斷Powershell運行的環境</td>
</tr>
<tr>
<td>$input</td>
<td></td>
</tr>
<tr>
<td>$inputScript</td>
<td></td>
</tr>
<tr>
<td>$IsCoreCLR</td>
<td>v7</td>
</tr>
<tr>
<td>$IsLinux</td>
<td>v7 判斷作業系統是否為 Linux</td>
</tr>
<tr>
<td>$IsMacOS</td>
<td>v7 判斷作業系統是否為 MacOS</td>
</tr>
<tr>
<td>$IsWindows</td>
<td>v7 判斷作業系統是否為 Microsoft Windows</td>
</tr>
<tr>
<td>$LastExitCode</td>
<td></td>
</tr>
<tr>
<td>$Matches</td>
<td>正規式比對的結果</td>
</tr>
<tr>
<td>$MyInvocation</td>
<td></td>
</tr>
<tr>
<td>$PSScriptRoot</td>
<td></td>
</tr>
<tr>
<td>$PSCommandPath</td>
<td></td>
</tr>
<tr>
<td>$NestedPromptLevel</td>
<td></td>
</tr>
<tr>
<td>$PID</td>
<td>取得目前Powershell 或是 Powershell ISE 的 Process ID</td>
</tr>
<tr>
<td>$PROFILE</td>
<td></td>
</tr>
<tr>
<td>$PSBoundParameters</td>
<td></td>
</tr>
<tr>
<td>$PSCmdlet</td>
<td></td>
</tr>
<tr>
<td>$PSCulture</td>
<td>顯示系統的語系</td>
</tr>
<tr>
<td>$PSDebugCoNtext</td>
<td></td>
</tr>
<tr>
<td>$PSEdition</td>
<td></td>
</tr>
<tr>
<td>$PSHOME</td>
<td>顯示系統預設的 Powershell Home Path</td>
</tr>
<tr>
<td>$PSItem</td>
<td></td>
</tr>
<tr>
<td>$PSSenderInfo</td>
<td></td>
</tr>
<tr>
<td>$PSUICulture</td>
<td>顯示系統的語系</td>
</tr>
<tr>
<td>$PSVersionTable</td>
<td>顯示Powershell的版本資訊</td>
</tr>
<tr>
<td>$PWD</td>
<td>取得目前路徑位置</td>
</tr>
<tr>
<td>$Sender</td>
<td></td>
</tr>
<tr>
<td>$ShellId</td>
<td></td>
</tr>
<tr>
<td>$StackTrace</td>
<td></td>
</tr>
<tr>
<td>$switch</td>
<td></td>
</tr>
<tr>
<td>$this</td>
<td></td>
</tr>
<tr>
<td>$ast</td>
<td></td>
</tr>
<tr>
<td>$cursorColumn</td>
<td></td>
</tr>
<tr>
<td>$MaximumAliasCount</td>
<td></td>
</tr>
<tr>
<td>$MaximumDriveCount</td>
<td></td>
</tr>
<tr>
<td>$MaximumErrorCount</td>
<td></td>
</tr>
<tr>
<td>$MaximumFunctionCount</td>
<td></td>
</tr>
<tr>
<td>$MaximumVariableCount</td>
<td></td>
</tr>
<tr>
<td>$options</td>
<td></td>
</tr>
<tr>
<td>$positionOfCursor</td>
<td></td>
</tr>
<tr>
<td>$psISE</td>
<td>在 Powershell Console,此系統變數為 <strong>$null</strong>,可以用來判斷執行環境是 Powershell ISE 還是 Pwoershell Console</td>
</tr>
<tr>
<td>$psUnsupportedConsoleApplications</td>
<td></td>
</tr>
<tr>
<td>$tokens</td>
<td></td>
</tr>
<tr>
<td>$ConfirmPreference</td>
<td>High, Medium, Low, None</td>
</tr>
<tr>
<td>$CurrentlyExecutingCommand</td>
<td></td>
</tr>
<tr>
<td>$DebugPreference</td>
<td><strong>Break</strong>: Enter the debugger, <strong>Continue</strong>: 顯示偵錯訊息,並繼續執行, <strong>Ignore</strong>: Ignore the evenet completely, <strong>SilentlyContinue</strong>: 沒有作用。 偵錯訊息不會顯示,而且不會中斷執行, <strong>Stop</strong>: 顯示偵錯訊息並停止執行。 將錯誤寫入主控台, <strong>Suspend</strong>: Reserved for future use.</td>
</tr>
<tr>
<td>$ErrorActionPreference</td>
<td></td>
</tr>
<tr>
<td>$ErrorView</td>
<td></td>
</tr>
<tr>
<td>$InformationPreference</td>
<td></td>
</tr>
<tr>
<td>$LogCommandHealthEvent</td>
<td></td>
</tr>
<tr>
<td>$LogCommandLifecycleEvent</td>
<td></td>
</tr>
<tr>
<td>$LogEngineHealthEvent</td>
<td></td>
</tr>
<tr>
<td>$LogEngineLifecycleEvent</td>
<td></td>
</tr>
<tr>
<td>$LogProviderHealthEvent</td>
<td></td>
</tr>
<tr>
<td>$LogProviderLifecycleEvent</td>
<td></td>
</tr>
<tr>
<td>$LogSettingsEvent</td>
<td></td>
</tr>
<tr>
<td>$PSLogUserData</td>
<td></td>
</tr>
<tr>
<td>$MaximumHistoryCount</td>
<td></td>
</tr>
<tr>
<td>$NestedPromptLevel</td>
<td></td>
</tr>
<tr>
<td>$OFS</td>
<td></td>
</tr>
<tr>
<td>$OutputEncoding</td>
<td></td>
</tr>
<tr>
<td>$ProgressPreference</td>
<td></td>
</tr>
<tr>
<td>$PSDebugContext</td>
<td></td>
</tr>
<tr>
<td>$PSDefaultParameterValues</td>
<td></td>
</tr>
<tr>
<td>$PSEmailServer</td>
<td></td>
</tr>
<tr>
<td>$PSItem</td>
<td></td>
</tr>
<tr>
<td>$PSModuleAutoLoadingPreference</td>
<td></td>
</tr>
<tr>
<td>$VerboseHelpErrors</td>
<td></td>
</tr>
<tr>
<td>$VerbosePreference</td>
<td></td>
</tr>
<tr>
<td>$WarningPreference</td>
<td></td>
</tr>
<tr>
<td>$WhatIfPreference</td>
<td></td>
</tr>
<tr>
<td>$Alias:</td>
<td></td>
</tr>
<tr>
<td>$Cert:</td>
<td></td>
</tr>
<tr>
<td>$Function:</td>
<td></td>
</tr>
<tr>
<td>$HKLM:</td>
<td></td>
</tr>
<tr>
<td>$HKCU:</td>
<td></td>
</tr>
<tr>
<td>$Variable:</td>
<td></td>
</tr>
<tr>
<td>$WSMan:</td>
<td></td>
</tr>
<tr>
<td>$Global:</td>
<td></td>
</tr>
<tr>
<td>$Local:</td>
<td></td>
</tr>
<tr>
<td>$Script:</td>
<td></td>
</tr>
<tr>
<td>$Private:</td>
<td></td>
</tr>
<tr>
<td>$env:ALLUSERSPROFILE</td>
<td>C:\ProgramData</td>
</tr>
<tr>
<td>$env:APPDATA</td>
<td>C:\Users\使用者帳號\AppData\Roaming</td>
</tr>
<tr>
<td>$env:ChocolateyInstall</td>
<td>C:\ProgramData\chocolatey</td>
</tr>
<tr>
<td>$env:ChocolateyLastPathUpdate</td>
<td></td>
</tr>
<tr>
<td>$env:COMPUTERNAME</td>
<td>電腦名稱</td>
</tr>
<tr>
<td>$env:ComSpec</td>
<td>C:\WINDOWS\system32\cmd.exe</td>
</tr>
<tr>
<td>$env:DriverData</td>
<td>C:\Windows\System32\Drivers\DriverData</td>
</tr>
<tr>
<td>$env:HOMEDRIVE</td>
<td>C:</td>
</tr>
<tr>
<td>$env:HOMEPATH</td>
<td>\Users\使用者帳號</td>
</tr>
<tr>
<td>$env:LOCALAPPDATA</td>
<td>C:\Users\使用者帳號\AppData\Local</td>
</tr>
<tr>
<td>$env:LOGONSERVER</td>
<td>\電腦名稱</td>
</tr>
<tr>
<td>$env:NUMBER_OF_PROCESSORS</td>
<td>電腦CPU核心數</td>
</tr>
<tr>
<td>$env:OS</td>
<td>Windows_NT</td>
</tr>
<tr>
<td>$env:Path</td>
<td>Path環境變數</td>
</tr>
<tr>
<td>$env:PATHEXT</td>
<td>可執行的副檔名列表</td>
</tr>
<tr>
<td>$env:POWERSHELL_DISTRIBUTION_CHANNEL</td>
<td>MSI:Windows 10 Pro</td>
</tr>
<tr>
<td>$env:PROCESSOR_ARCHITECTURE</td>
<td>AMD</td>
</tr>
<tr>
<td>$env:PROCESSOR_IDENTIFIER</td>
<td>Intel64 Family 6 Model 158 Stepping 10, GenuineIntel</td>
</tr>
<tr>
<td>$env:PROCESSOR_LEVEL</td>
<td>6</td>
</tr>
<tr>
<td>$env:PSModulePath</td>
<td>Powershell Modules安裝的路徑</td>
</tr>
<tr>
<td>$env:SystemDrive</td>
<td>C:</td>
</tr>
<tr>
<td>$env:SystemRoot</td>
<td>C:\WINDOWS</td>
</tr>
<tr>
<td>$env:TEMP</td>
<td>C:\Users\使用者帳號\AppData\Local\Temp</td>
</tr>
<tr>
<td>$env:USERNAME</td>
<td>使用者帳號</td>
</tr>
<tr>
<td>$env:USERPROFILE</td>
<td>C:\Users\使用者帳號</td>
</tr>
<tr>
<td>$env:windir</td>
<td>C:\WINDOWS</td>
</tr>
<tr>
<td>$env:ProgramFiles</td>
<td>C:\Program Files</td>
</tr>
<tr>
<td>${env:ProgramFiles(x86)}</td>
<td>C:\Program Files (x86)</td>
</tr>
<tr>
<td>$env:ProgramW6432</td>
<td>C:\Program Files</td>
</tr>
</tbody>
</table>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-33131040734933440972024-03-12T23:15:00.003+08:002024-03-12T23:16:26.129+08:00Powershell 命名規定<h1 id="命名基本規定">命名基本規定</h1>
<ul>
<li>Powershell 是<strong>不會區分大小寫</strong>的</li>
<li>系統有一些內建系統變數、環境變數、關鍵字,變數的命名上是不能使用的,不然變數值會被系統覆蓋掉。</li>
<li>變數名稱中最好不要有特殊字元,例如:- (破折號),會被當成運算元<strong>減號</strong>,如果一定要用破折號,請將變數名稱用大括號括起,但這樣寫起來挺麻煩的,也容易出錯,還是不建議這樣搞!</li>
</ul>
<pre class=" language-powershell"><code class="prism language-powershell">$<span class="token punctuation">{</span>Saved<span class="token operator">-</span>Items<span class="token punctuation">}</span> = <span class="token string">"a"</span><span class="token punctuation">,</span><span class="token string">"b"</span><span class="token punctuation">,</span><span class="token string">"c"</span>
$<span class="token punctuation">{</span>Saved<span class="token operator">-</span>Items<span class="token punctuation">}</span>
</code></pre>
<ul>
<li>Powershell Cmdlet/Function 命名有一定規矩,就是 Verb-Noun (動詞/動作-名詞),而且有規範只能使用哪些動詞(雖然,使用規範以外的動詞,不會發生甚麼錯誤,但是在 Visual Studio Code 裡執行時,會一直出現警告)</li>
<li>如果要知道Powershell 規範哪些動詞,可以執行</li>
</ul>
<pre class=" language-powershell"><code class="prism language-powershell">Get<span class="token operator">-</span>Verb
</code></pre>
<p><img src="https://lh3.googleusercontent.com/pw/ADCreHf2zTS-2fkeMMudfNul5TPb2qa8jTPtm2O_m73DOMGQTW77gVY6I0d9bdwPPCO_iRApCOFhK8s5zRB4pGue8HhdrFDx9JmJdnnCsUy049Io925AMl0KzcIgb72oHRd0rrMtgLVc6I9l0vS-KQDJwJRKSg=w365-h370-s-no" alt=""></p>
<p>如果要知道,有哪些命令可以使用,可以執行</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Command</span> <span class="token operator">-</span>Noun restmethod<span class="token operator">*</span>
<span class="token function">Get-Command</span> <span class="token operator">-</span>Verb Split
</code></pre>
<p>如果要知道特定命令,有哪些組成、屬性、方法等,可以執行</p>
<pre><code>Cmdlet | Get-Member
</code></pre>
<p>例如:</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Process</span> <span class="token punctuation">|</span> <span class="token function">Get-Member</span> <span class="token operator">-</span>MemberType Method <span class="token punctuation">|</span> <span class="token function">Select-Object</span> Name<span class="token punctuation">,</span> Definition
</code></pre>
<p><img src="https://lh3.googleusercontent.com/pw/ADCreHeG8dsdGfxlY96GAGaKhN1uTuiXQYl6LB1fzEYPQzdyuhRbYGEpCPU9eW9zTKdxPjmK0SBnZaVuQdxcwjC-Z68jKHzCDD_k-wb6iGdfvJNpl1wSgnnEAO7NjJyIN3Lpgo3YnGppFNqRYSUa1UNPckwomA=w993-h479-s-no" alt="enter image description here"></p>
<h4 id="查詢跟-csv-格式相關的-cmdlet">查詢跟 CSV 格式相關的 Cmdlet</h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Command</span> <span class="token operator">-</span>Noun CSV
</code></pre>
<h4 id="查詢跟-json-格式相關的-cmdlet">查詢跟 JSON 格式相關的 Cmdlet</h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Command</span> <span class="token operator">-</span>Noun JSON
</code></pre>
<h4 id="查詢跟-html-格式相關的-cmdlet">查詢跟 HTML 格式相關的 Cmdlet</h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Command</span> <span class="token operator">-</span>Noun HTML
</code></pre>
<h4 id="查詢轉換格式相關的-cmdlet">查詢轉換格式相關的 Cmdlet</h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Command</span> <span class="token operator">-</span>Verb Convert<span class="token operator">*</span>
</code></pre>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-57981555248089330892024-03-12T23:14:00.004+08:002024-03-12T23:16:03.368+08:00PowerShell 簡介<h2 id="什麼是-powershell?">什麼是 PowerShell?</h2>
<p>Powershell 是一個微軟發展的跨平台的語言,可以在 Windows、Linux、MacOS 上運行。<br>
雖然號稱是跨平台,但是在不同的平台上,程式需要些許調整!<br>
就我個人的經驗,在 Linux 平台上,可以運行 Powershell 但是,我還是會建議盡量使用 bash shell script 或是其他程式語言</p>
<h2 id="powershell-能夠管理那些系統?">PowerShell 能夠管理那些系統?</h2>
<ul>
<li>Microsoft Azure</li>
<li>Windows Server/Client</li>
<li>Exchange Server</li>
<li>SQL Server</li>
<li>Hyper-V</li>
<li>VMware</li>
<li>AWS</li>
<li>VMware</li>
<li>GCP</li>
</ul>
<h2 id="powershell-能做那些事?">Powershell 能做那些事?</h2>
<ul>
<li>呼叫 API 讀取網頁(無法讀取前端Javascript Render 的網頁資料)</li>
<li>使用 Selenium 網頁爬蟲</li>
<li>讀寫資料庫</li>
<li>存取 FTP、SSH、SMTP、POP3 發送郵件(有些需要特過 Third Party)</li>
<li>透過 Web Server GCI 執行 透過 HTTP Listener</li>
<li>建立 Web Service (需要自己處理 MIME Type File)</li>
<li>讀寫 CSV, JSON, XML, HTML</li>
<li>壓縮/解壓縮 ZIP</li>
<li>檔案管理</li>
<li>註冊機碼管理</li>
<li>連接/中斷網芳</li>
<li>透過WinRM,管理遠端電腦</li>
<li>載入 DLL,使用 Third Party Function</li>
</ul>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-59945932131296284572024-03-12T23:01:00.003+08:002024-03-12T23:04:00.647+08:00Powershell 流程控制<h2 id="if">If</h2>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">If</span> <span class="token punctuation">(</span><test1><span class="token punctuation">)</span>
<span class="token punctuation">{</span><statement list 1><span class="token punctuation">}</span>
<span class="token namespace">[elseif (<test2>)
{<statement list 2>}]</span>
<span class="token namespace">[else
{<statement list 3>}]</span>
</code></pre>
<p>簡略寫法</p>
<pre class="language-powershell"><code class="prism language-powershell"><condition> ? <<span class="token keyword">if</span><span class="token operator">-</span>true> : <<span class="token keyword">if</span><span class="token operator">-</span>false>
</code></pre>
<h2 id="switch">Switch</h2>
<p><strong>基本語法</strong></p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">Switch</span> <span class="token punctuation">(</span> <test<span class="token operator">-</span>expression> <span class="token punctuation">)</span><span class="token punctuation">{</span>
<result1<span class="token operator">-</span>to<span class="token operator">-</span>be<span class="token operator">-</span>matched> <span class="token punctuation">{</span><action><span class="token punctuation">}</span>
<result2<span class="token operator">-</span>to<span class="token operator">-</span>be<span class="token operator">-</span>matched> <span class="token punctuation">{</span><action><span class="token punctuation">}</span>
Default <span class="token punctuation">{</span><action><span class="token punctuation">}</span> <span class="token comment"># optional</span>
<span class="token punctuation">}</span>
</code></pre>
<p><strong>特別參數及語法</strong></p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">Switch</span> <span class="token punctuation">[</span><span class="token operator">-</span>regex <span class="token punctuation">|</span> <span class="token operator">-</span>wildcard <span class="token punctuation">|</span> <span class="token operator">-</span>exact<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">-</span>casesensitive<span class="token punctuation">]</span> <span class="token punctuation">(</span> <test<span class="token operator">-</span>expression> <span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token string">"string1"</span> <span class="token punctuation">|</span> number1 <span class="token punctuation">|</span> variable1 <span class="token punctuation">|</span> <span class="token punctuation">{</span> <value<span class="token operator">-</span>scriptblock1> <span class="token punctuation">}</span> <span class="token punctuation">{</span> <action<span class="token operator">-</span>scriptblock> <span class="token punctuation">}</span>
<span class="token string">"string2"</span> <span class="token punctuation">|</span> number2 <span class="token punctuation">|</span> variable2 <span class="token punctuation">|</span> <span class="token punctuation">{</span> <value<span class="token operator">-</span>scriptblock2> <span class="token punctuation">}</span> <span class="token punctuation">{</span> <action<span class="token operator">-</span>scriptblock> <span class="token punctuation">}</span>
Default <span class="token punctuation">{</span> <action<span class="token operator">-</span>scriptblock> <span class="token punctuation">}</span> <span class="token comment"># optional</span>
<span class="token punctuation">}</span>
</code></pre>
<p><strong>從檔案取得資料</strong></p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">Switch</span> <span class="token punctuation">[</span><span class="token operator">-</span>regex <span class="token punctuation">|</span> <span class="token operator">-</span>wildcard <span class="token punctuation">|</span> <span class="token operator">-</span>exact<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">-</span>casesensitive<span class="token punctuation">]</span> <span class="token operator">-</span>file filename <span class="token punctuation">{</span>
<span class="token string">"string"</span> <span class="token punctuation">|</span> number <span class="token punctuation">|</span> variable <span class="token punctuation">|</span> <span class="token punctuation">{</span> <value<span class="token operator">-</span>scriptblock> <span class="token punctuation">}</span> <span class="token punctuation">{</span> <action<span class="token operator">-</span>scriptblock> <span class="token punctuation">}</span>
default <span class="token punctuation">{</span> <action<span class="token operator">-</span>scriptblock> <span class="token punctuation">}</span> <span class="token comment"># optional</span>
<span class="token punctuation">}</span>
</code></pre>
<p>說明:</p>
<table>
<thead>
<tr>
<th>參數</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>-regex</td>
<td><test-expression> 的符合條件是正規式;如果 <test-expression> 變數型態不是字串,此參數會無效</td>
</tr>
<tr>
<td>-wildcard</td>
<td>使用萬用字元去比對,這裡不分大小寫;如果 <test-expression> 變數型態不是字串,此參數會無效</td>
</tr>
<tr>
<td>-exact</td>
<td>必須完全符合字串大小寫;如果 <test-expression> 變數型態不是字串,此參數會無效</td>
</tr>
<tr>
<td>-casesensitive</td>
<td>區分大小寫;如果 <test-expression> 變數型態不是字串,此參數會無效</td>
</tr>
<tr>
<td>-file</td>
<td>從文字型檔案讀取每一行來比較,這裡不分大小寫</td>
</tr>
</tbody>
</table><ul>
<li>
<p>範例1:使用 Script Blocks 來媒合,Switch 會執行所有吻合條件的部分</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = 1<span class="token punctuation">,</span>2<span class="token punctuation">,</span>3
<span class="token variable">$Variable</span> = 2
<span class="token keyword">Switch</span><span class="token punctuation">(</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-in</span> <span class="token variable">$a</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is in Array"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-match</span> <span class="token string">"[0-9]"</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is matched regexp"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-lt</span> 10 <span class="token operator">-and</span> <span class="token variable">$_</span> <span class="token operator">-gt</span> 1 <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is bigger than 1, and smaller than 10"</span>
<span class="token punctuation">}</span>
Default <span class="token punctuation">{</span>
<span class="token string">"Otherwise"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHdUpVPmhWfumQJO0boqOroOyNuZvFqAhJg3bMzVjNkjq_Fg8rzLvpD4WYRaDxQqMpuEPBZFa00LwIh_6hkpwPBhnhgllfrU46ky0xXkzEV1hYiVBIODRuc8-FEWP49PwxUzC69MfZ-mwMdgbwODaTSuQg=w590-h82-s-no?authuser=0" /></p>
</li>
<li>
<p>範例二:要中斷Switch繼續媒合所有 Script Block,要使用 <strong>Break</strong></p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = 1<span class="token punctuation">,</span>2<span class="token punctuation">,</span>3
<span class="token variable">$Variable</span> = 2
<span class="token keyword">Switch</span><span class="token punctuation">(</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-in</span> <span class="token variable">$a</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is in Array"</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-match</span> <span class="token string">"[0-9]"</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is matched regexp"</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> <span class="token variable">$_</span> <span class="token operator">-lt</span> 10 <span class="token operator">-and</span> <span class="token variable">$_</span> <span class="token operator">-gt</span> 1 <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is bigger than 1, and smaller than 10"</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
Default <span class="token punctuation">{</span>
<span class="token string">"Otherwise"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHfte83j8-tHOD1DGI1pCGWubeo2rPqOhqMVSGYaeW5KvYrmr6-ilZbNnt9-bLee-jVxxACKETeDQOnpeNxuxLnNfEMACj9B4jVcxDaZpfaH_Q_BSKFZs6VLfeQ6X0Qgc7dqPTxnkWj_l4QoZ3OY0-CTpg=w264-h36-s-no?authuser=0" /></p>
</li>
<li>
<p>範例三:</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$Variable</span> = 42
<span class="token keyword">Switch</span><span class="token punctuation">(</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token punctuation">{</span> 0<span class="token punctuation">.</span><span class="token punctuation">.</span>20 <span class="token operator">-contains</span> <span class="token variable">$_</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is between 0~20"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> 21<span class="token punctuation">.</span><span class="token punctuation">.</span>40 <span class="token operator">-contains</span> <span class="token variable">$_</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is between 21~40"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> 41<span class="token punctuation">.</span><span class="token punctuation">.</span>60 <span class="token operator">-contains</span> <span class="token variable">$_</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is between 41~60"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> 61<span class="token punctuation">.</span><span class="token punctuation">.</span>80 <span class="token operator">-contains</span> <span class="token variable">$_</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is between 61~80"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">{</span> 81<span class="token punctuation">.</span><span class="token punctuation">.</span>100 <span class="token operator">-contains</span> <span class="token variable">$_</span> <span class="token punctuation">}</span><span class="token punctuation">{</span>
<span class="token string">"Variable is between 81~100"</span>
<span class="token punctuation">}</span>
Default<span class="token punctuation">{</span>
<span class="token string">"Variable is not in 0~100"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHfz27dd-9oEiXFcsuB2_qkNZm-Q0JyG3z1tuPHRkH-LaZ37xOWLPqD153NIDT2Pz8l4TSyfXjKH6eKECXr-uCU0by8GQ2_1kGoixpDtRcZ3cWGw8eg81mIjU0BLawS054qY-13rIdN2dBhsTMXl1YhJKw=w322-h31-s-no?authuser=0" /></p>
</li>
<li>
<p>範例四:媒合條件為正規式</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$month</span> = <span class="token punctuation">(</span><span class="token function">Get-Date</span><span class="token punctuation">)</span><span class="token punctuation">.</span>Month
<span class="token variable">$month</span>
<span class="token keyword">switch</span> <span class="token operator">-</span>regex <span class="token punctuation">(</span><span class="token namespace">[string]</span><span class="token variable">$month</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token string">"^[1-3]$"</span> <span class="token punctuation">{</span><span class="token string">"Q1"</span><span class="token punctuation">}</span>
<span class="token string">"^[4-6]$"</span> <span class="token punctuation">{</span><span class="token string">"Q2"</span><span class="token punctuation">}</span>
<span class="token string">"^[7-9]$"</span> <span class="token punctuation">{</span><span class="token string">"Q3"</span><span class="token punctuation">}</span>
<span class="token string">"^1[0-2]$"</span> <span class="token punctuation">{</span><span class="token string">"Q4"</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHf5Vxmnu2IzlRWz4hFvZ0cs9Bfcn4uSWVlafRUuUY4QgRe0IILcluz0fxIcP54lNvPvHzzvWT9qsj4f4fujQnAwIA9Kqh3WsqeGsGxTHhjKLBZ2LTL84Wxpt_eipLMEE91LBM_1udlbM13Oymfi2xmZ2A=w577-h232-s-no?authuser=0" /></p>
</li>
</ul>
<h2 id="comparison-operators-比較運算說明">Comparison Operators 比較運算說明</h2>
<table>
<thead>
<tr>
<th>比較</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>-and</td>
<td>進行邏輯運算 AND</td>
</tr>
<tr>
<td>-or</td>
<td>進行邏輯運算 OR</td>
</tr>
<tr>
<td>-not</td>
<td>進行邏輯運算 NOT</td>
</tr>
<tr>
<td>-xor</td>
<td>進行邏輯運算 XOR,而非 bit XOR運算</td>
</tr>
<tr>
<td>-is</td>
<td>判斷變數型態是否與比對的型態相同</td>
</tr>
<tr>
<td>-isnot</td>
<td>判斷變數型態是否與比對的型態不相同</td>
</tr>
<tr>
<td>-like</td>
<td>字串匹配通配符模式,忽略大小寫</td>
</tr>
<tr>
<td>-ilike</td>
<td>字串匹配通配符模式,忽略大小寫</td>
</tr>
<tr>
<td>-clike</td>
<td>字串匹配通配符模式,比較大小寫</td>
</tr>
<tr>
<td>-notlike</td>
<td>字串與通配符模式不匹配,忽略大小寫</td>
</tr>
<tr>
<td>-inotlike</td>
<td>字串與通配符模式不匹配,忽略大小寫</td>
</tr>
<tr>
<td>-cnotlike</td>
<td>字串與通配符模式不匹配,比較大小寫</td>
</tr>
<tr>
<td>-match</td>
<td>字串與正規表示式模式匹配,忽略大小寫</td>
</tr>
<tr>
<td>-imatch</td>
<td>字串與正規表示式模式匹配,忽略大小寫</td>
</tr>
<tr>
<td>-cmatch</td>
<td>字串與正規表示式模式匹配,比較大小寫</td>
</tr>
<tr>
<td>-notmatch</td>
<td>字串與正規表示式模式不匹配,忽略大小寫</td>
</tr>
<tr>
<td>-inotmatch</td>
<td>字串與正規表示式模式不匹配,忽略大小寫</td>
</tr>
<tr>
<td>-cnotmatch</td>
<td>字串與正規表示式模式不匹配,比較大小寫</td>
</tr>
<tr>
<td>-in</td>
<td>變數值存在於集合之中,忽略大小寫</td>
</tr>
<tr>
<td>-iin</td>
<td>變數值存在於集合之中,忽略大小寫</td>
</tr>
<tr>
<td>-cin</td>
<td>變數值存在於集合之中,比較大小寫</td>
</tr>
<tr>
<td>-notin</td>
<td>變數值不存在於集合之中,忽略大小寫</td>
</tr>
<tr>
<td>-inotin</td>
<td>變數值不存在於集合之中,忽略大小寫</td>
</tr>
<tr>
<td>-cnotin</td>
<td>變數值不存在於集合之中,比較大小寫</td>
</tr>
<tr>
<td>-contains</td>
<td>集合中包含變數值,忽略大小寫</td>
</tr>
<tr>
<td>-icontains</td>
<td>集合中包含變數值,忽略大小寫</td>
</tr>
<tr>
<td>-ccontains</td>
<td>集合中包含變數值,比較大小寫</td>
</tr>
<tr>
<td>-eq</td>
<td>Equal 等於(忽略大小寫)</td>
</tr>
<tr>
<td>-ieq</td>
<td>Equal 等於,忽略大小寫</td>
</tr>
<tr>
<td>-ceq</td>
<td>Equal 等於,比較大小寫</td>
</tr>
<tr>
<td>-ne</td>
<td>Not Equal 不等於,忽略大小寫</td>
</tr>
<tr>
<td>-ine</td>
<td>Not Equal 不等於,忽略大小寫</td>
</tr>
<tr>
<td>-cne</td>
<td>Not Equal 不等於,比較大小寫</td>
</tr>
<tr>
<td>-gt</td>
<td>Great Than 大於,忽略大小寫</td>
</tr>
<tr>
<td>-igt</td>
<td>Great Than 大於,忽略大小寫</td>
</tr>
<tr>
<td>-cgt</td>
<td>Great Than 大於,比較大小寫</td>
</tr>
<tr>
<td>-ge</td>
<td>Great Equal 大於等於,忽略大小寫</td>
</tr>
<tr>
<td>-ige</td>
<td>Great Equal 大於等於,忽略大小寫</td>
</tr>
<tr>
<td>-cge</td>
<td>Great Equal 大於等於,比較大小寫</td>
</tr>
<tr>
<td>-lt</td>
<td>Less Than 小於,忽略大小寫</td>
</tr>
<tr>
<td>-ilt</td>
<td>Less Than 小於,忽略大小寫</td>
</tr>
<tr>
<td>-clt</td>
<td>Less Than 小於,比較大小寫</td>
</tr>
<tr>
<td>-le</td>
<td>Less Equal 小於等於,忽略大小寫</td>
</tr>
<tr>
<td>-ile</td>
<td>Less Equal 小於等於,忽略大小寫</td>
</tr>
<tr>
<td>-cle</td>
<td>Less Equal 小於等於,比較大小寫</td>
</tr>
</tbody>
</table><ul>
<li>
<p>仔細觀察可以發現,只要加上 i 就是不區分大小寫;加上 c 就是區分大小寫</p>
</li>
<li>
<p>從範例來理解 -in & -contains</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = 5
1<span class="token punctuation">.</span><span class="token punctuation">.</span>3 <span class="token operator">-contains</span> <span class="token variable">$a</span>
1<span class="token punctuation">.</span><span class="token punctuation">.</span>10 <span class="token operator">-contains</span> <span class="token variable">$a</span>
<span class="token variable">$a</span> <span class="token operator">-in</span> 1<span class="token punctuation">.</span><span class="token punctuation">.</span>3
<span class="token variable">$a</span> <span class="token operator">-in</span> 1<span class="token punctuation">.</span><span class="token punctuation">.</span>10
</code></pre>
</li>
<li>
<p>從範例來了解 -is & -isnot</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = 5
<span class="token variable">$b</span> = <span class="token string">"5"</span>
<span class="token variable">$a</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$b</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a</span> <span class="token operator">-is</span> <span class="token namespace">[int]</span>
<span class="token variable">$a</span> <span class="token operator">-isnot</span> <span class="token variable">$b</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHdfoJOWoJ_7pEp9AR8HBCOYx4PSV1u_-Bx_GgePN06iGEe8xNleqo1zIVdHBH9PrhnmiWgbn5wAEQFrv3nmIca3H0e3gHFKWyoEi4Ya8H1PRAY72NSTlKOMZZgSa_C7CXeSTZ0T3phLbU3qUiemheGbMw=w939-h144-s-no?authuser=0" /></p>
</li>
<li>
<h3 id="需要特別注意的特例">需要特別注意的特例</h3>
</li>
</ul>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$a</span> = 1<span class="token punctuation">,</span> 2<span class="token punctuation">,</span> <span class="token variable">$null</span><span class="token punctuation">,</span> 4<span class="token punctuation">,</span> <span class="token variable">$null</span><span class="token punctuation">,</span> 6
<span class="token variable">$a</span><span class="token punctuation">.</span>GetType<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token variable">$a</span> <span class="token operator">-ne</span> <span class="token variable">$null</span>
<span class="token variable">$null</span> <span class="token operator">-ne</span> <span class="token variable">$a</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHfMH69b4SVp75vIKsifcuk1RukzIvZDSm0zGfMZnltT8fkIh8NhKSsm1sMTM3io9hDGcRMtVbFiu7hHDEI5PgQBOy56VH0AIReNqUVfH2BC8J3CJz9D4BVp_xMpuvGrs-1xzeJ7zPKib_BrFXcAJWN1-g=w895-h194-s-no?authuser=0" /></p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token string">"abc"</span> <span class="token operator">-eq</span> <span class="token string">"abc"</span> <span class="token comment"># Output: True</span>
<span class="token string">"abc"</span> <span class="token operator">-eq</span> <span class="token string">"abc"</span><span class="token punctuation">,</span> <span class="token string">"def"</span> <span class="token comment"># Output: False</span>
<span class="token string">"abc"</span> <span class="token operator">-ne</span> <span class="token string">"def"</span> <span class="token comment"># Output: True</span>
<span class="token string">"abc"</span> <span class="token operator">-ne</span> <span class="token string">"abc"</span> <span class="token comment"># Output: False</span>
<span class="token string">"abc"</span> <span class="token operator">-ne</span> <span class="token string">"abc"</span><span class="token punctuation">,</span> <span class="token string">"def"</span> <span class="token comment"># Output: True</span>
<span class="token string">"abc"</span><span class="token punctuation">,</span> <span class="token string">"def"</span> <span class="token operator">-eq</span> <span class="token string">"abc"</span> <span class="token comment"># Output: abc</span>
<span class="token string">"abc"</span><span class="token punctuation">,</span> <span class="token string">"def"</span> <span class="token operator">-ne</span> <span class="token string">"abc"</span> <span class="token comment"># Output: def</span>
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHe96_T5eUwUkPWD0aVTGdk-v53NvpX2XnUkM7IlwBfcIND7JU6n2-PhxgNaUpYIAAbAC5zuSp6wGEVPd5UitjGDJUfwSaBxwAQP2I7rzD1Tal0entW-JG4hTAFgnYbXHRmdqG1Lok7zB0bqPkMB8Mfe1A=w739-h350-s-no?authuser=0" /><br />
說明:當集合在運算子左邊時,其結果會是過濾變數值</p>
<ul>
<li>再來一個自訂類別的比較</li>
</ul>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">class</span> MyFileInfoSet <span class="token punctuation">{</span>
<span class="token namespace">[String]</span><span class="token variable">$File</span>
<span class="token namespace">[Int64]</span><span class="token variable">$Size</span>
<span class="token punctuation">}</span>
<span class="token variable">$a</span> = <span class="token namespace">[MyFileInfoSet]</span>@<span class="token punctuation">{</span>File = <span class="token string">"C:\Windows\explorer.exe"</span><span class="token punctuation">;</span> Size = 4651032<span class="token punctuation">}</span>
<span class="token variable">$b</span> = <span class="token namespace">[MyFileInfoSet]</span>@<span class="token punctuation">{</span>File = <span class="token string">"C:\Windows\explorer.exe"</span><span class="token punctuation">;</span> Size = 4651032<span class="token punctuation">}</span>
<span class="token variable">$a</span> <span class="token operator">-eq</span> <span class="token variable">$b</span>
</code></pre>
<p>上面程式碼雖然透過自訂類別,設定了兩個變數,兩個變數的屬性值雖然都一樣,但這兩個變數是不同的物件, -eq 會認為這不是同一個物件。</p>
<p>所以要讓 -eq 能判斷物件"值" 是否一致,要改用以下程式,讓程式知道使用 -eq 比較時,是要比較兩個變數的值</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">class</span> MyFileInfoSet : System<span class="token punctuation">.</span>IEquatable<span class="token namespace">[Object]</span><span class="token punctuation">{</span>
<span class="token namespace">[String]</span><span class="token variable">$File</span>
<span class="token namespace">[Int64]</span><span class="token variable">$Size</span>
<span class="token namespace">[bool]</span> Equals<span class="token punctuation">(</span><span class="token namespace">[Object]</span> <span class="token variable">$obj</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">$this</span><span class="token punctuation">.</span>File <span class="token operator">-eq</span> <span class="token variable">$obj</span><span class="token punctuation">.</span>File<span class="token punctuation">)</span> <span class="token operator">-and</span> <span class="token punctuation">(</span><span class="token variable">$this</span><span class="token punctuation">.</span>Size <span class="token operator">-eq</span> <span class="token variable">$obj</span><span class="token punctuation">.</span>Size<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token variable">$c</span> = <span class="token namespace">[MyFileInfoSet]</span>@<span class="token punctuation">{</span>File = <span class="token string">"C:\Windows\explorer.exe"</span><span class="token punctuation">;</span> Size = 4651032<span class="token punctuation">}</span>
<span class="token variable">$d</span> = <span class="token namespace">[MyFileInfoSet]</span>@<span class="token punctuation">{</span>File = <span class="token string">"C:\Windows\explorer.exe"</span><span class="token punctuation">;</span> Size = 4651032<span class="token punctuation">}</span>
<span class="token variable">$c</span> <span class="token operator">-eq</span> <span class="token variable">$d</span>
</code></pre>
<p>我們再來看看兩個類別宣告出來的物件變數的方法有甚麼不同</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">class</span> MyFileInfoSet <span class="token punctuation">{</span>
<span class="token namespace">[String]</span><span class="token variable">$File</span>
<span class="token namespace">[Int64]</span><span class="token variable">$Size</span>
<span class="token punctuation">}</span>
<span class="token variable">$a</span> = <span class="token namespace">[MyFileInfoSet]</span>@<span class="token punctuation">{</span>File = <span class="token string">"C:\Windows\explorer.exe"</span><span class="token punctuation">;</span> Size = 4651032<span class="token punctuation">}</span>
<span class="token variable">$a</span> <span class="token punctuation">|</span> <span class="token function">Get-Member</span>
<span class="token keyword">class</span> MyFileInfoSet2 : System<span class="token punctuation">.</span>IEquatable<span class="token namespace">[Object]</span><span class="token punctuation">{</span>
<span class="token namespace">[String]</span><span class="token variable">$File</span>
<span class="token namespace">[Int64]</span><span class="token variable">$Size</span>
<span class="token namespace">[bool]</span> Equals<span class="token punctuation">(</span><span class="token namespace">[Object]</span> <span class="token variable">$obj</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">$this</span><span class="token punctuation">.</span>File <span class="token operator">-eq</span> <span class="token variable">$obj</span><span class="token punctuation">.</span>File<span class="token punctuation">)</span> <span class="token operator">-and</span> <span class="token punctuation">(</span><span class="token variable">$this</span><span class="token punctuation">.</span>Size <span class="token operator">-eq</span> <span class="token variable">$obj</span><span class="token punctuation">.</span>Size<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token variable">$c</span> = <span class="token namespace">[MyFileInfoSet2]</span>@<span class="token punctuation">{</span>File = <span class="token string">"C:\Windows\explorer.exe"</span><span class="token punctuation">;</span> Size = 4651032<span class="token punctuation">}</span>
<span class="token variable">$c</span> <span class="token punctuation">|</span> <span class="token function">Get-Member</span>
<span class="token punctuation">(</span><span class="token variable">$c</span> <span class="token punctuation">|</span> <span class="token function">Get-Member</span><span class="token punctuation">)</span> <span class="token punctuation">|</span> <span class="token function">Where-Object</span> <span class="token punctuation">{</span> <span class="token variable">$_</span><span class="token punctuation">.</span>Name <span class="token operator">-eq</span> <span class="token string">"Equals"</span> <span class="token punctuation">}</span> <span class="token punctuation">|</span> <span class="token function">Select-Object</span> <span class="token operator">-</span>Property Definition
</code></pre>
<p><img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHfwX5zOouof_QueE2T3MAzMGc3dnO78ngrDN_GdTmIHJZPACv_4mB3OP8INEzUTK4umW-p8Rw7VSSRFINPuikqXu3H8z2QIBUL3pGQnJe8U_L2hWz-pEqGfqlD_v29_fP5hLARspYP0iXzKZVfjoPbwOw=w1280-h528-s-no?authuser=0" /></p>
<h2 id="break、continue、return、exit">Break、Continue、Return、Exit</h2>
<p>Break 中斷迴圈或是 Switch,或是 Trap</p>
<ul>
<li>
<p>範例一:</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token variable">$i</span>=0
<span class="token variable">$varB</span> = 10<span class="token punctuation">,</span>20<span class="token punctuation">,</span>30<span class="token punctuation">,</span>40
<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$val</span> in <span class="token variable">$varB</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$val</span> <span class="token operator">-eq</span> 30<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
<span class="token variable">$i</span>+<span class="token operator">+</span>
<span class="token punctuation">}</span>
<span class="token function">Write-Host</span> <span class="token string">"30 was found in array index <span class="token variable">$i</span>"</span>
</code></pre>
</li>
<li>
<p>範例二:中斷指定的迴圈(這是很差的程式習慣,請盡量不要使用)</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token function">Remove-Variable</span> <span class="token operator">*</span> <span class="token operator">-</span>ErrorAction SilentlyContinue
<span class="token variable">$b</span> = 3
:red <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">$true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
:yellow <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">$true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">$true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">break</span><span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$b</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">break</span> yellow<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$c</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">break</span> red<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token function">Write-Host</span> <span class="token string">"中斷最內層迴圈"</span>
<span class="token punctuation">}</span>
<span class="token function">Write-Host</span> <span class="token string">"中斷 :yellow 迴圈"</span>
<span class="token punctuation">}</span>
<span class="token function">Write-Host</span> <span class="token string">"中斷 :red 迴圈"</span>
</code></pre>
</li>
</ul>
<p>如果有定義 $a,就會中斷最內層迴圈<br />
如果有定義 $b,就會中斷 :yellow 迴圈<br />
如果有定義 $c,就會中斷 :red 迴圈</p>
<ul>
<li>範例三:<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">function</span> test <span class="token punctuation">{</span>
<span class="token keyword">trap</span> <span class="token namespace">[DivideByZeroException]</span> <span class="token punctuation">{</span>
<span class="token function">Write-Host</span> <span class="token string">'divide by zero trapped'</span>
<span class="token keyword">break</span>
<span class="token punctuation">}</span>
<span class="token variable">$i</span> = 3
<span class="token string">'Before loop'</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">$true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token string">"1 / <span class="token variable">$i</span> = "</span> <span class="token operator">+</span> <span class="token punctuation">(</span>1 <span class="token operator">/</span> <span class="token variable">$i</span>-<span class="token operator">-</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token string">'After loop'</span>
<span class="token punctuation">}</span>
test
</code></pre>
<img alt="enter image description here" src="https://lh3.googleusercontent.com/pw/ADCreHfWSGmJiVt02nWLnNixBZyZ7peHNJa4W35MWdGxroMOZd9GvnDLlpruxd1KaPTWjU7f7WxaFMqBMmlGYbn7pREN69WKtTiv4ZY2b2zCsqHGImOGuHjvWpzfwpNuwIIyhQhiOQuAMtqlQoDVO1CsCvcqYA=w1070-h258-s-no?authuser=0" /><br />
當除數為0的例外被觸發時,印出 “divide by zero trapped”<br />
然後就終止函式<br />
如果沒有使用 Break,就會在發生錯誤之後,繼續執行印出 “After loop”</li>
</ul>
<h2 id="請不要在迴圈不包含-foreach-object、switch、trap-之外使用-break!這會目前的-runspace-被終止!"><mark>請不要在迴圈(不包含 ForEach-Object)、Switch、Trap 之外使用 Break!這會目前的 Runspace 被終止!</mark></h2>
<pre class="language-powerhshell"><code class="prism language-powerhshell">function test {
"TEST"
break
}
test
"After Test"
</code></pre>
<p>當程式執行 test 函式時,輸出 “TEST” 之後,整個程式就被 break 終止了!所以 “After Test” 永遠不會被執行到。</p>
<pre class="language-powershell"><code class="prism language-powershell">1<span class="token punctuation">.</span><span class="token punctuation">.</span>10 <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span><span class="token punctuation">{</span>
<span class="token keyword">If</span> <span class="token punctuation">(</span><span class="token variable">$_</span> <span class="token operator">-eq</span> 3<span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">Break</span>
<span class="token punctuation">}</span>
<span class="token variable">$_</span>
<span class="token punctuation">}</span>
<span class="token string">"迴圈之後,繼續執行"</span>
</code></pre>
<p>在 ForEach-Object 內使用 Break,也會導致整個程式被終止!</p>
<pre class="language-powershell"><code class="prism language-powershell"><span class="token keyword">ForEach</span> <span class="token punctuation">(</span><span class="token variable">$v</span> in 1<span class="token punctuation">.</span><span class="token punctuation">.</span>10<span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">If</span> <span class="token punctuation">(</span><span class="token variable">$v</span> <span class="token operator">-eq</span> 3<span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">Break</span>
<span class="token punctuation">}</span>
<span class="token variable">$v</span>
<span class="token punctuation">}</span>
<span class="token string">"迴圈之後,繼續執行"</span>
</code></pre>
<p>但是在 ForEach ($variable in <collection>){} 迴圈卻不會中斷整個程式</p>
<p><a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_continue?view=powershell-7.3">https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_continue?view=powershell-7.3</a></p>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-79808727319766159462024-03-12T22:57:00.003+08:002024-03-12T22:58:08.892+08:00Powershell 迴圈的額外說明<h2 id="powershell-迴圈的額外說明">Powershell 迴圈的額外說明</h2>
<h4 id="以下三種-powershell-迴圈程式,先試著猜猜結果為何">以下三種 Powershell 迴圈程式,先試著猜猜結果為何</h4>
<pre class=" language-pwsh"><code class="prism language-pwsh">Function loop1{
1..3 | ForEach-Object{
If ($_ -eq 2){
Return "Y", $_
}Else{
Return "N", $_
}
}
}
loop1
</code></pre>
<pre class=" language-pwsh"><code class="prism language-pwsh">Function loop2{
For($i=1; $i -le 3; $i++){
If ($_ -eq 2){
Return "Y", $i
}Else{
Return "N", $i
}
}
}
loop2
</code></pre>
<pre class=" language-pwsh"><code class="prism language-pwsh">Function loop3{
ForEach($num in 1..3){
If ($_ -eq 2){
Return "Y", $num
}Else{
Return "N", $num
}
}
}
loop3
</code></pre>
<p>當你分別執行上面的程式之後,會發現<br>
<mark>ForEach-Object{ }</mark><br>
會跑完每一個 Object,所以<mark>它會回傳三次!</mark><br>
而 For 或是 ForEach 迴圈,則是如同預期的,只會跑一次</p>
<h3 id="這個-foreach-object---的用法,就很像-python-的-yield">這個 ForEach-Object { } 的用法,就很像 Python 的 yield</h3>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-32653393716792471682024-03-12T22:52:00.008+08:002024-03-12T22:54:14.762+08:00Powershell 迴圈<h2 id="powershell-迴圈">Powershell 迴圈</h2>
<h3 id="第一種迴圈">第一種迴圈</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token keyword">For</span> <span class="token punctuation">(</span><Init 變數初始值><span class="token punctuation">;</span> <Condition 迴圈繼續執行條件><span class="token punctuation">;</span> <Repeat<span class="token operator">/</span>Step 變數增減運算式><span class="token punctuation">)</span><span class="token punctuation">{</span>
<Statement list>
<span class="token punctuation">}</span>
</code></pre>
<p>例如:<br>
<em>設定變數 $v = 1,$a = 10<br>
當 $v 數值小於等於 5 時,執行迴圈內指令<br>
變數 $v 的值,每次累加 2</em></p>
<pre><code>For ($v, $a=1,10; $v -le 5; $v = $v + 2){
"`$v = $v"
$a += $v
"`$a = $a"
}
</code></pre>
<p><mark>因為要程式輸出 $,所以 $ 前面要加上 ` 跳脫符號</mark><br>
<img src="https://lh3.googleusercontent.com/pw/ADCreHdHGd1TuTcYgnYbXVX0zOoMd54tu1wxniqVPzHxFMolwKtRbbWHpPzPjHGoqPpTEM37a2C_6Vq0GY8r7A-SSx1zBQ7ideIGRIxYwUVzlkt1vDVLSWzDO64l3k2m1fqKhUIEc4Z-kiF3vEGamoAHkNgVxw=w766-h257-s-no?authuser=0" alt="enter image description here"></p>
<h3 id="第二種迴圈">第二種迴圈</h3>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token keyword">ForEach</span> <span class="token punctuation">(</span><item> in <collection><span class="token punctuation">)</span><span class="token punctuation">{</span>
<Statement list>
<span class="token punctuation">}</span>
</code></pre>
<h3 id="第三種迴圈">第三種迴圈</h3>
<p>先判斷是否吻合條件</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token keyword">While</span> <span class="token punctuation">(</span><condition<span class="token punctuation">)</span><span class="token punctuation">{</span>
<Statement list>
<span class="token punctuation">}</span>
</code></pre>
<h3 id="第四種迴圈">第四種迴圈</h3>
<p>至少會執行一次,執行後判斷是否吻合條件,條件吻合時<strong>繼續</strong>執行</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token keyword">Do</span> <span class="token punctuation">{</span>
<Statement list>
<span class="token punctuation">}</span> <span class="token keyword">While</span> <span class="token punctuation">(</span><condition><span class="token punctuation">)</span>
</code></pre>
<h3 id="第五種迴圈">第五種迴圈</h3>
<p>至少會執行一次,執行後判斷是否吻合條件,條件吻合時<strong>結束</strong>執行</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token keyword">Do</span> <span class="token punctuation">{</span>
<Statement list>
<span class="token punctuation">}</span> <span class="token keyword">Until</span> <span class="token punctuation">(</span><condition><span class="token punctuation">)</span>
</code></pre>
<h3 id="第六種迴圈">第六種迴圈</h3>
<h4 id="透過-pipe-來源,對每個-object-執行-statement-list">透過 Pipe 來源,<mark>對每個 Object 執行 Statement list</mark></h4>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token punctuation">|</span> <span class="token function">ForEach-Object</span><span class="token punctuation">{</span>
<Statement list>
<span class="token punctuation">}</span>
</code></pre>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$Events</span> = <span class="token function">Get-EventLog</span> <span class="token operator">-</span>LogName System <span class="token operator">-</span>Newest 1000
<span class="token variable">$events</span> <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span><span class="token keyword">Begin</span> <span class="token punctuation">{</span><span class="token function">Get-Date</span><span class="token punctuation">}</span> <span class="token operator">-</span><span class="token keyword">Process</span> <span class="token punctuation">{</span><span class="token function">Out-File</span> <span class="token operator">-</span>FilePath Events<span class="token punctuation">.</span>txt <span class="token operator">-</span>Append <span class="token operator">-</span>InputObject <span class="token variable">$_</span><span class="token punctuation">.</span>Message<span class="token punctuation">}</span> <span class="token operator">-</span><span class="token keyword">End</span> <span class="token punctuation">{</span><span class="token function">Get-Date</span><span class="token punctuation">}</span>
</code></pre>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token function">Get-Module</span> <span class="token operator">-</span>ListAvailable <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span>MemberName Path
</code></pre>
<p>執行字串物件的 Split 方法,參數 “.”</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token string">"Microsoft.PowerShell.Host"</span> <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span>MemberName Split <span class="token operator">-</span>ArgumentList <span class="token string">"."</span>
</code></pre>
<pre class=" language-powershell"><code class="prism language-powershell">1<span class="token punctuation">.</span><span class="token punctuation">.</span>2 <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span><span class="token keyword">Begin</span> <span class="token punctuation">{</span> <span class="token string">'開始'</span> <span class="token punctuation">}</span> <span class="token operator">-</span><span class="token keyword">Process</span> <span class="token punctuation">{</span> <span class="token string">'程序 A'</span> <span class="token punctuation">}</span> <span class="token punctuation">{</span> <span class="token string">'程序 B'</span> <span class="token punctuation">}</span> <span class="token operator">-</span><span class="token keyword">End</span> <span class="token punctuation">{</span> <span class="token string">'結束'</span> <span class="token punctuation">}</span>
</code></pre>
<p>Begin 與 End Script Blocks 都只會執行一次,而 Process 後面可以接多個 Script Blocks,會依照傳遞物件的數量來執行次數</p>
<p>以下只有 Powershell v7 才有</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$Message</span> = <span class="token string">"Output:"</span>
1<span class="token punctuation">.</span><span class="token punctuation">.</span>8 <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span><span class="token keyword">Parallel</span> <span class="token punctuation">{</span>
<span class="token string">"<span class="token variable">$using</span>:Message <span class="token variable">$_</span>"</span>
<span class="token function">Start-Sleep</span> 10
<span class="token punctuation">}</span> <span class="token operator">-</span>ThrottleLimit 10
</code></pre>
<p>採用多執行緒 -Parallel<br>
執行緒數量 -ThrottleLimit 10<br>
所以程式會一次把 1~8 都輸出,最後等上 10秒才結束程式</p>
<p>如果修改 -ThrottleLimit 為 2,就會每次只輸出兩個數值,並等上 10秒</p>
<p>取得系統事件紀錄(需要以管理者權限執行)</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$logNames</span> = <span class="token string">'Security'</span><span class="token punctuation">,</span><span class="token string">'Application'</span><span class="token punctuation">,</span><span class="token string">'System'</span><span class="token punctuation">,</span><span class="token string">'Windows PowerShell'</span><span class="token punctuation">,</span><span class="token string">'Microsoft-Windows-Store/Operational'</span>
<span class="token variable">$logEntries</span> = <span class="token variable">$logNames</span> <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span><span class="token keyword">Parallel</span> <span class="token punctuation">{</span>
Get<span class="token operator">-</span>WinEvent <span class="token operator">-</span>LogName <span class="token variable">$_</span> <span class="token operator">-</span>MaxEvents 10000
<span class="token punctuation">}</span> <span class="token operator">-</span>ThrottleLimit 5
<span class="token variable">$logEntries</span><span class="token punctuation">.</span>Count
</code></pre>
<p>當使用多執行緒時,要注意系統資源使用量會拉高!</p>
<pre class=" language-powershell"><code class="prism language-powershell"><span class="token variable">$job</span> = 1<span class="token punctuation">.</span><span class="token punctuation">.</span>10 <span class="token punctuation">|</span> <span class="token function">ForEach-Object</span> <span class="token operator">-</span><span class="token keyword">Parallel</span> <span class="token punctuation">{</span>
<span class="token string">"Output: <span class="token variable">$_</span>"</span>
<span class="token function">Start-Sleep</span> 3
<span class="token punctuation">}</span> <span class="token operator">-</span>ThrottleLimit 2 <span class="token operator">-</span>AsJob
<span class="token variable">$job</span> <span class="token punctuation">|</span> <span class="token function">Receive-Job</span> <span class="token operator">-</span>Wait
</code></pre>
<p>使用多執行緒,並丟到背景執行,然後用 Receive-Job -Wait 等待並取得執行結果</p>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-39506181833171430402023-11-02T21:10:00.001+08:002023-11-02T21:18:16.362+08:00容器 Container 簡介<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>容器 Container 簡介</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>
<body class="stackedit">
<div class="stackedit__html"><ul>
<li>這裡介紹都使用容器這個名稱,而不是使用 <strong>Docker</strong></li>
<li>因為實踐容器技術的系統有很多種,不是只有 <strong>Docker</strong></li>
<li>但不可否認的是,Docker 確實是業界標準!畢竟它最早開始實作容器技術!</li>
</ul>
<h2 id="容器簡介">容器簡介</h2>
<h3 id="甚麼是容器container,為什麼它發展比虛擬系統還快,有甚麼優點?">甚麼是容器(Container),為什麼它發展比虛擬系統還快,有甚麼優點?</h3>
<ul>
<li>容器是一種應用程式系統打包、隔離執行環境、管理運行的技術。</li>
<li>隔離的環境包括CPU、Memory、Disk I/O、網路頻寬等資源,確保每個運行中的容器,不會互相干擾破壞,也不會影響 Container Host</li>
<li>容器可以快速啟動執行!6</li>
<li>虛擬系統跟實體系統一樣,啟動需要經過開機、測試硬體環境、載入作業系統、驅動程式等等…所以需要花大量的時間。</li>
<li>每個虛擬系統需要佔用大量的記憶體給作業系統以及磁碟空間</li>
<li>容器本身是運行在已經啟動的系統上(不管是實體或是虛擬),它相當於你平常運行應用程式差不多!</li>
<li>容器其實跟 Portable Apps 很像!只是以往要打包 Portable Apps 需要購買軟體授權,例如:<a href="https://www.vmware.com/tw/products/thinapp.html">VMware ThinApp</a>、<a href="https://cameyo.com/">Cameyo</a>,當你安裝好 Portable Apps 建置系統之後,它會先掃描你的軟硬體環境,將這些資訊都紀錄下來,然後你安裝付費的授權軟體、啟用授權軟體,完成安裝之後,ThinApp 會再次掃描整個系統,確認那些地方被修改異動,然後將這些資訊打包成一個 Portable App,讓你可以將這個打包的應用程式搬移到任何電腦上運行!</li>
<li>容器技術不只是打包應用軟體、隔離執行環境資源,還提供執行管理相關的工具,讓應用程式散佈運行更方便!
<table>
<thead>
<tr>
<th>比較項目</th>
<th>容器</th>
<th>虛擬系統</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>執行啟動效率</td>
<td>快</td>
<td>慢</td>
<td>虛擬系統需要經過開機啟動程序</td>
</tr>
<tr>
<td>使用資源量</td>
<td>少</td>
<td>多</td>
<td>虛擬系統需要使用大量的 CPU、RAM、Disk 給作業系統</td>
</tr>
<tr>
<td>費用成本</td>
<td>授權費0</td>
<td>授權費高</td>
<td>需要進階管理虛擬系統,需要支付高額的授權費用</td>
</tr>
<tr>
<td>運行作業系統平台</td>
<td>需一致</td>
<td>不須一致</td>
<td>Linux 平台上,只能運行 Linux 架構的容器,不能運行 Windows 架構的容器</td>
</tr>
</tbody>
</table>
</li>
</ul>
<h3 id="容器技術的四個物件:image-container-volume-network">容器技術的四個物件:Image, Container, Volume, Network</h3>
<ul>
<li><strong>Image</strong>:Base Image + 你開發的應用程式/或是你要運行的系統 + 設定檔案 + 資料檔案等等,打包成一個新的 Image
<ul>
<li>Image 可以匯出成 tarball 格式(早在磁帶備份時期就開始使用的資料檔案封存格式,壓縮性低)檔案</li>
<li>Image 可以上傳(push),到公有或<a href="https://repo.funday.asia/v2/_catalog">私有 Repository</a> 儲存伺服器上
<ul>
<li>公有 Repository 有很多,最著名就是 Docker Hub,Redhat Linux 也有自家 Repository,Google GCP 也有</li>
<li>建立私有 Repository</li>
</ul>
</li>
</ul>
</li>
<li><strong>Container</strong>:包含了 Image 以及執行環境狀態紀錄;預設下,Container停止時,Container 只是停止運行,但是網路、磁碟等資源仍然是占用的狀態。</li>
<li><strong>Volume</strong>:方便管理的磁碟管理
<ul>
<li>可以讓你將 Host Volume 掛載到 Container 裡面,供Container 的應用程式系統讀寫;也因為是 Host Volume,你可以很方便地透過 Host 管理</li>
<li>可以透過 Host 掛載網路磁碟服務(<a href="https://learn.microsoft.com/zh-tw/windows/win32/fileio/microsoft-smb-protocol-and-cifs-protocol-overview">網路芳鄰SMB/CIFS/Samba</a>、<a href="https://aws.amazon.com/tw/compare/the-difference-between-nfs-smb/">NFS</a>、<a href="https://aws.amazon.com/tw/compare/the-difference-between-nfs-and-iscsi/">iSCSI</a>)、後,再掛載到 Container。<br>
<img src="https://lh3.googleusercontent.com/pw/ADCreHcuQj6noFcSr-789IvL_24ZLsTrnqwG9hYZ-W-tVYM2_LAqwihlnWsjqNXrUkrwGIFGd7rPP0fDxhiaBhshdOlSwh07st-GxJ7HhNygzCj_BRumxdhkvbOBbPcLkV8--XQ6QPHhAEmuFElMM3zVKRIK7Q=w401-h271-s-no-gm?authuser=0" alt="enter image description here"></li>
<li><strong>Network</strong>:容器的網路運行在虛擬的隔離網路之中,存取只能透過Container 技術,意即不容易透過網路入侵或攻擊外部,且虛擬的網路環境,可以很容易在其他 Host 進行部屬(不使用固定 IP)</li>
</ul>
</li>
</ul>
<h2 id="一些常用的-docker-指令">一些常用的 Docker 指令</h2>
<h3 id="查詢-docker-指令參數說明">查詢 Docker 指令參數說明</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker --help</td>
<td>查詢所有 Docker 指令及概要說明</td>
</tr>
<tr>
<td>docker [command] --help</td>
<td>查詢 Docker Command 進一步的詳細說明</td>
</tr>
</tbody>
</table><hr>
<h3 id="如何管理-images">如何管理 Images</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker <strong>pull</strong> [image_name:image_tag]</td>
<td>從 Repository 下載 Image</td>
</tr>
<tr>
<td>docker <strong>images</strong> [image_name:image_tag]</td>
<td>查看本機目前已經下載的 Images</td>
</tr>
<tr>
<td>docker <strong>push</strong> [repo_host/image_name:image_tag]</td>
<td>將 Image 上傳到 Repository</td>
</tr>
<tr>
<td>docker <strong>rmi</strong> [image_name:image_tag]</td>
<td>刪除本機的 Image</td>
</tr>
<tr>
<td>docker <strong>save</strong> [image_name:image_tag] > file_name.tar</td>
<td>將本機 Image 匯出存成 tarball 檔案</td>
</tr>
<tr>
<td>cat file_name.tar | docker <strong>load</strong></td>
<td>從 tarball 檔案匯入本機</td>
</tr>
<tr>
<td>docker <strong>history</strong> [image_name:image_tag]</td>
<td>查看當初 image 建立的指令</td>
</tr>
<tr>
<td>docker <strong>inspect</strong> [image_name:image_tag]</td>
<td>查看JSON格式的 Image 資訊</td>
</tr>
<tr>
<td>docker <strong>commit</strong> [container_id 或 container_name] [new_image_name:new_image_tag]</td>
<td>將目前Container 內的檔案狀況寫成新的Image</td>
</tr>
<tr>
<td>docker <strong>tag</strong> [image_name:image_tag]</td>
<td>設定/更改 Image 名稱及 Image Tag</td>
</tr>
</tbody>
</table><h4 id="docker-push-要怎麼知道要把-image-push-到哪個-repository?">docker push 要怎麼知道要把 Image push 到哪個 repository?</h4>
<p>要透過 docker tag 將 image 設成 repo_server _fqdn/image_name:image_tag<br>
例如:</p>
<pre class=" language-bash"><code class="prism = language-bash">docker tag newepay:20231010 repo.funday.asia/newebpay:latest
docker push repo.funday.asia/newebpay:latest
</code></pre>
<hr>
<h3 id="如何運行容器、停止容器、重新啟動容器、刪除容器">如何運行容器、停止容器、重新啟動容器、刪除容器</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker <strong>run</strong> [Options] [image_name:image_tag] [Command] [Args for Command]</td>
<td>以 Image 運行一個新的 Container</td>
</tr>
<tr>
<td>docker <strong>exec</strong> [Options] [container_id 或 container_name] [Command] [Args for Command]</td>
<td>在一個運行中的 Container 執行指定的命令</td>
</tr>
<tr>
<td>docker <strong>attach</strong> [container_id 或 container_name]</td>
<td>將Container 的標準輸出、輸入、錯誤,連接到Host。通常用於容器除錯。當你Ctrl-C中斷程式時,會連帶導致容器運行中止!要脫離Attach Mode,請按<strong>Ctrl-PQ</strong></td>
</tr>
<tr>
<td>docker <strong>stop</strong> [container_id 或 container_name]</td>
<td>停止運行指定的容器</td>
</tr>
<tr>
<td>docker <strong>start</strong> [container_id 或 container_name]</td>
<td>啟動已停止運行指定的容器</td>
</tr>
<tr>
<td>docker <strong>restart</strong> [container_id 或 container_name]</td>
<td>重新啟動證在執行的容器</td>
</tr>
<tr>
<td>docker <strong>rm</strong> [container_id 或 container_name]</td>
<td>刪除已停止的容器</td>
</tr>
</tbody>
</table><hr>
<h3 id="如何觀察容器內運行的程式">如何觀察容器內運行的程式</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker <strong>top</strong> [container_id 或 container_name]</td>
<td>查看容器內運行的程式</td>
</tr>
<tr>
<td>docker <strong>inspect</strong> [container_id 或 container_name]</td>
<td>顯示 JSON 格式的 Container 運行狀態資訊</td>
</tr>
</tbody>
</table><hr>
<h3 id="如何將容器內的資料取出?如何將檔案放入容器中">如何將容器內的資料取出?如何將檔案放入容器中</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker <strong>cp</strong> [container_id 或 container_name]:/path/to/[file] /host/path/to/[file]</td>
<td>將容器內的檔案複製到 Host 指定路徑檔名</td>
</tr>
<tr>
<td>docker <strong>cp</strong> /host/path/to/[file] [container_id 或 container_name]:/path/to/file</td>
<td>將Host 指定路徑檔案複製到 Container 內的指定路徑檔名</td>
</tr>
</tbody>
</table><hr>
<h3 id="如何觀察容器內那些檔案被異動">如何觀察容器內那些檔案被異動</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker diff [container_id 或 container_name]</td>
<td>條列容器內部有異動或新增的目錄及檔案,C 表示 Change,A 表示 Append</td>
</tr>
</tbody>
</table><hr>
<h3 id="如何觀察容器內程式運行的紀錄">如何觀察容器內程式運行的紀錄</h3>
<table>
<thead>
<tr>
<th>指令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>docker logs [container_id 或 container_name]</td>
<td>查看容器內程式產生的 Log資訊</td>
</tr>
</tbody>
</table><hr>
<h3 id="如何遷移影像、容器、資料檔案">如何遷移影像、容器、資料檔案</h3>
<p>一種方式是把 Image Push 到 Repository Server,然後再從其他 Host Pull Image 下來執行<br>
另一種方式,就是匯出 Image,然後傳送到 Remote Server 再匯入運行</p>
<hr>
<h3 id="如何製作容器影像">如何製作容器影像</h3>
<ul>
<li>選取一個可信任的 Base Image
<ul>
<li>請選擇 docker Official Image 或是 Verified Publisher 提供的 Image</li>
</ul>
</li>
<li>熟悉 Dockerfile 指令及用途</li>
</ul>
<hr>
<h3 id="如何讓容器重新開機就自動運行">如何讓容器重新開機就自動運行</h3>
<h4 id="docker-的開機後自動運行依賴-docker-daemon-來管理">Docker 的開機後自動運行依賴 docker daemon 來管理</h4>
<table>
<thead>
<tr>
<th>–restart 參數值</th>
<th>用途說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>no</td>
<td>default值,當容器狀態 exit 時,不要重新啟動</td>
</tr>
<tr>
<td>on-failure</td>
<td>當容器發生異常結束時,自動重啟</td>
</tr>
<tr>
<td>on-failure:n</td>
<td>當容器發生異常結束時,最多重啟 n次</td>
</tr>
<tr>
<td>always</td>
<td>永遠自動重啟容器,即使在重新開機之前,容器就已經停止,開機啟動後,仍要自動執行容器</td>
</tr>
<tr>
<td>unless-stopped</td>
<td>如果在重新開機之前,容器就已經停止,就不會自動重啟</td>
</tr>
</tbody>
</table><p><mark>–restart 參數不可以與 --rm 參數同時使用!</mark></p>
<h4 id="podman-的開機後自動運行依賴-systemd-來管理">Podman 的開機後自動運行依賴 systemd 來管理</h4>
<pre class=" language-bash"><code class="prism = language-bash">podman generate systemd <span class="token punctuation">[</span>containber_id 或 container_name<span class="token punctuation">]</span> <span class="token operator">></span> /usr/lib/systemd/system/myweb.service
systemctl <span class="token function">enable</span> myweb
systemctl status myweb
</code></pre>
<hr>
<h3 id="參考資料:">參考資料:</h3>
<ul>
<li><a href="https://docs.docker.com/build/building/base-images/">如何自行建立基底 Image</a> from Docker Official Website
<ul>
<li>你可以利用別人建立好的基底,快速開發你的應用程式環境,也可以自己閉門造車或是打造你自己完全控制的環境。</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-1203630377403727102023-11-01T19:08:00.001+08:002023-11-02T21:18:23.379+08:00以非 root 身分運行 Docker<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>以非 root 身分運行 Docker</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>
<body class="stackedit">
<div class="stackedit__html"><h2 id="如何讓非-root-使用者也可以執行-docker">如何讓非 root 使用者也可以執行 docker</h2>
<h3 id="以下指令請以非-root-身分執行">以下指令請以非 root 身分執行</h3>
<pre class=" language-bash"><code class="prism language-bash"><span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">grep</span> docker /etc/group <span class="token operator">|</span> <span class="token function">wc</span> -l<span class="token variable">)</span></span> -eq 1 <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token keyword">echo</span> <span class="token string">"group exists."</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token function">sudo</span> <span class="token function">groupadd</span> docker<span class="token punctuation">;</span> <span class="token keyword">fi</span>
<span class="token function">sudo</span> <span class="token function">usermod</span> -aG docker <span class="token variable">$USER</span><span class="token punctuation">;</span>
newgrp docker<span class="token punctuation">;</span>
<span class="token function">sudo</span> <span class="token function">chown</span> <span class="token string">"<span class="token variable">$USER</span>"</span><span class="token keyword">:</span><span class="token string">"<span class="token variable">$USER</span>"</span> /home/<span class="token string">"<span class="token variable">$USER</span>"</span>/.docker -R<span class="token punctuation">;</span>
<span class="token function">sudo</span> <span class="token function">chmod</span> g+rwx <span class="token string">"<span class="token variable">$HOME</span>/.docker"</span> -R<span class="token punctuation">;</span>
</code></pre>
<p>參考資料:<br>
<a href="https://docs.docker.com/engine/security/rootless/">Run the Docker daemon as a non-root user(Rootless mode)</a></p>
</div>
</body>
</html>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-14021200224340724782023-11-01T19:03:00.003+08:002023-11-02T21:18:32.514+08:00建立 Docker Image 並執行<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>建立 Docker Image 並執行</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>
<body class="stackedit">
<div class="stackedit__html"><h2 id="dockerfile-中-entrypoint-與-cmd-的差異">Dockerfile 中 ENTRYPOINT 與 CMD 的差異</h2>
<h4 id="建立-power.sh-bash-shell-script">建立 <a href="http://power.sh">power.sh</a> Bash Shell Script</h4>
<ol>
<li>此 Shell Script 透過 <a href="https://curl.se/">curl</a> 程式,抓取<a href="https://data.gov.tw/">政府資料開放平台</a>的<a href="https://data.gov.tw/dataset/162595">台電供電資訊</a> <a href="https://service.taipower.com.tw/data/opendata/apply/file/d006020/001.json">JSON 格式資料</a></li>
<li>然後透過 <a href="https://jqlang.github.io/jq/">jq</a> 程式,解析、擷取特定 JSON 資料</li>
<li>最後顯示台電供電資訊</li>
</ol>
<pre class=" language-bash"><code class="prism = language-bash"><span class="token shebang important">#!/bin/bash</span>
<span class="token comment">#取得 JSON 資料並解析</span>
json_data<span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span>curl -s -k https://data.taipower.com.tw/opendata/apply/file/d006020/001.json<span class="token variable">)</span></span>
yday_maxi_sply_capacity<span class="token operator">=</span><span class="token punctuation">$(</span>echo <span class="token string">"<span class="token variable">$json_data</span>"</span> <span class="token operator">|</span> jq -r <span class="token string">'.records[2].yday_maxi_sply_capacity'</span><span class="token punctuation">)</span>
fore_maxi_sply_capacity<span class="token operator">=</span><span class="token punctuation">$(</span>echo <span class="token string">"<span class="token variable">$json_data</span>"</span> <span class="token operator">|</span> jq -r <span class="token string">'.records[1].fore_maxi_sply_capacity'</span><span class="token punctuation">)</span>
yday_peak_dema_load<span class="token operator">=</span><span class="token punctuation">$(</span>echo <span class="token string">"<span class="token variable">$json_data</span>"</span> <span class="token operator">|</span> jq -r <span class="token string">'.records[2].yday_peak_dema_load'</span><span class="token punctuation">)</span>
fore_peak_dema_load<span class="token operator">=</span><span class="token punctuation">$(</span>echo <span class="token string">"<span class="token variable">$json_data</span>"</span> <span class="token operator">|</span> jq -r <span class="token string">'.records[1].fore_peak_dema_load'</span><span class="token punctuation">)</span>
publish_time<span class="token operator">=</span><span class="token punctuation">$(</span>echo <span class="token string">"<span class="token variable">$json_data</span>"</span> <span class="token operator">|</span> jq -r <span class="token string">'.records[1].publish_time'</span><span class="token punctuation">)</span>
<span class="token comment">#比較並顯示結果</span>
fore_maxi_sply_capacity<span class="token operator">=</span><span class="token variable">${fore_maxi_sply_capacity%.*}</span>
yday_maxi_sply_capacity<span class="token operator">=</span><span class="token variable">${yday_maxi_sply_capacity%.*}</span>
fore_peak_dema_load<span class="token operator">=</span><span class="token variable">${fore_peak_dema_load%.*}</span>
yday_peak_dema_load<span class="token operator">=</span><span class="token variable">${yday_peak_dema_load%.*}</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$fore_maxi_sply_capacity</span> -gt <span class="token variable">$yday_maxi_sply_capacity</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
result<span class="token operator">=</span><span class="token string">"預估供電能力有增加"</span>
<span class="token keyword">else</span>
result<span class="token operator">=</span><span class="token string">"預估供電能力有下降"</span>
<span class="token keyword">fi</span>
<span class="token keyword">echo</span> <span class="token string">"資料時間: <span class="token variable">${publish_time}</span>"</span>
<span class="token keyword">echo</span> <span class="token string">"昨日最大供電能力: "</span> <span class="token variable">$yday_maxi_sply_capacity</span>
<span class="token keyword">echo</span> <span class="token string">"預估今日最大供電能力: "</span> <span class="token variable">$fore_maxi_sply_capacity</span>
<span class="token keyword">echo</span> <span class="token string">"比較結果: "</span> <span class="token string">"<span class="token variable">$result</span>"</span>
<span class="token keyword">echo</span> <span class="token string">"昨日最大用電量: "</span> <span class="token variable">$yday_peak_dema_load</span>
<span class="token keyword">echo</span> <span class="token string">"預估今日最大用電量: "</span> <span class="token variable">$fore_peak_dema_load</span>
</code></pre>
<h4 id="設定-power.sh-bash-shell-script-可以執行">設定 <a href="http://power.sh">power.sh</a> Bash Shell Script 可以執行</h4>
<pre class=" language-bash"><code class="prism language-bash"><span class="token function">chmod</span> +x power.sh
</code></pre>
<p>建立 Dockerfile,內容如下:</p>
<pre><code>FROM rockylinux:8.7
RUN dnf update -y
RUN dnf install -y curl
RUN dnf install -y jq
COPY power.sh /usr/bin/power.sh
CMD /usr/bin/power.sh
</code></pre>
<p>建立 power:1 Docker Image</p>
<pre class=" language-bash"><code class="prism = language-bash">docker build -t power:1 <span class="token keyword">.</span>
</code></pre>
<p>修改 Dockerfile,內容如下:</p>
<pre><code>FROM rockylinux:8.7
RUN dnf update -y
RUN dnf install -y curl
RUN dnf install -y jq
COPY power.sh /usr/bin/power.sh
WORKDIR /usr/bin
ENTRYPOINT ["power.sh"]
</code></pre>
<p>建立 power:2 Docker Image</p>
<pre class=" language-bash"><code class="prism = language-bash">docker build -t power:2 <span class="token keyword">.</span>
</code></pre>
<h4 id="分別運行這兩個-images">分別運行這兩個 Images</h4>
<h4 id="兩個-container-都可以如預期般的執行">兩個 Container 都可以如預期般的執行</h4>
<pre class=" language-bash"><code class="prism language-bash">docker run -it --name p1 power:1
docker run -it --name p2 power:2
</code></pre>
<h4 id="刪除-p1--p2-containers">刪除 p1 & p2 Containers</h4>
<pre class=" language-bash"><code class="prism language-bash">docker <span class="token function">rm</span> p1 p2
</code></pre>
<h4 id="這次-run-container-時,要求執行-bash-shell">這次 run Container 時,要求執行 Bash Shell</h4>
<pre class=" language-bash"><code class="prism language-bash">docker run -it --name p1 power:1 <span class="token function">bash</span>
<span class="token keyword">exit</span>
docker run -it --name p2 power:2 <span class="token function">bash</span>
</code></pre>
<h4 id="結果-p1-進入了-container-裡面,並執行了-bash-shell;而-p2-完全忽略要求執行的-bash-shell">結果 p1 進入了 Container 裡面,並執行了 Bash Shell;而 p2 完全忽略要求執行的 Bash Shell</h4>
<p><img src="https://lh3.googleusercontent.com/pw/ADCreHfKjrjvce7K_3Y6UqwF7Lsap4P172UzLr3jbeMWlGuJXW-cJNK1-wkmwGd1B5QNyaAtEf3xgiLBPCQ-OQ7edybqaInhcYsdeujXrXlFcKVOEJGpxHmrQzWyaax1UAhZTd44Vb0jlDxhy-Kb33c9frPXAA=w971-h325-s-no-gm?authuser=0" alt="enter image description here"></p>
</div>
</body>
</html>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-7398932582325258002021-07-27T17:03:00.001+08:002022-05-16T10:21:51.080+08:00使用 Powershell 讀取系統事件檢視器的錯誤訊息及警告,然後輸出成 HTML 檔案<p><span style="font-size: large;"> Windows 的事件檢視器一直有許多人詬病,相當不好用!</span></p><p><span style="font-size: large;">光是大量的事件,就要等待半天;在加上沒辦法隨心所欲的設定關鍵字查詢</span></p><p><span style="font-size: large;">剛好前一陣子有人在問購買軟體來處理事件紀錄,個人是覺得很浪費錢。</span></p><p><span style="font-size: large;">因為現成軟體雖然方便,但是彈性很差。</span></p><p><span style="font-size: large;">所以就寫了個簡單的Powershell 程式給大家參考</span></p><span><a name='more'></a></span><pre><code class="html"><p>Clear-Host</p><p>Remove-Variable * -ErrorAction SilentlyContinue</p><p><br /></p><p>If(Test-Path -Path "c:\Users\admin\Desktop\Events.html" -PathType Leaf){</p><p> Remove-Item -Path "c:\Users\admin\Desktop\Events.html" -Force</p><p>}</p><p><br /></p><p># 用來儲存所有收集的事件</p><p>$Events = @()</p><p># 選擇哪些類別的事件</p><p>$LogTypes = @("Application", "System", "Security")</p><p># 選擇那些層級的訊息</p><p>$Levels = @("Warning","Error","Critical")</p><p><br /></p><p>ForEach($LogType in $LogTypes){</p><p> Get-EventLog -LogName $LogType | Where { $_.EntryType -in $Levels} | ForEach-Object{</p><p> # 將事件設定成 hashtable 物件型式,這樣只要簡單指令就可以將資訊轉成 html, csv, json 等</p><p> $Event = @{</p><p> #Index = $_.Index</p><p> "類別" = $LogType</p><p> "產生時間" = $_.TimeGenerated</p><p> #TimeW = $_.TimeWritten</p><p> "層級" = $_.EntryType</p><p> "來源" = $_.Source</p><p> "識別碼" = $_.InstanceId</p><p> "訊息" = $_.Message</p><p> # 擷取特定資料行,然去取得部分字串,使用 replace 去除不需要的部分</p><p> #Module = ($Msg | Select-String -Pattern '失敗的模組名稱\: .*').Matches.Value -replace ",版本:.*","" -replace "失敗的模組名稱: ",""</p><p> #ECode = ($Msg | Select-String -Pattern '例外狀況代碼\: .*').Matches.Value -replace "例外狀況代碼: ",""</p><p> #AppID = ($Msg | Select-String -Pattern '失敗的處理程序識別碼\: .*').Matches.Value -replace "失敗的處理程序識別碼: ",""</p><p> #Application = ($Msg | Select-String -Pattern '失敗的應用程式路徑\: .*').Matches.Value -replace "失敗的應用程式路徑: ","" | Split-Path -Leaf</p><p> }</p><p> $Events += New-Object -TypeName PSObject -Property $Event</p><p> }</p><p>}</p><p><br /></p><p># 將所有事件按照發生的時間排序,然後轉成 HTML 檔(按 Property 順序排列),並在 head 加上 css 方便閱讀,最後輸出到 html 檔案</p><p>$Events | Sort-Object -Property "產生時間" |`</p><p>ConvertTo-Html -Title "System Error & Warning Event Logs" `</p><p>-Property "產生時間","類別","層級別","來源","識別碼","訊息" `</p><p>-Head "<style type='text/css'>table, tr, th, td { border-style: solid;text-align:center;vertical-align:middle;padding:5px} tr:nth-child(even) {background: #CCC} tr:nth-child(odd) {background: #FFF}</style>" | `</p><p>Out-File -FilePath "c:\Users\admin\Desktop\Events.html" -Encoding utf8</p><p># 使用預設瀏覽器開啟檔案</p><p>Start-Process -FilePath "c:\Users\admin\Desktop\Events.html"</p></code></pre>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-36467267974524665152021-07-02T15:39:00.011+08:002021-07-02T15:57:17.895+08:00使用 Powershell 發送 Synology Chat 訊息<pre><code class="html"><p><br /><br /></p><p>Function Send-Chat{</p><p> Param(</p><p> [string] $Msg</p><p> )</p><p> Add-Type -AssemblyName System.Web</p><p> $url = "http://<span style="color: #2b00fe;"><b>your ip:port</b></span>/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=%22el3fotmx3xHbiXGz17aTTXFUJ5DTzgun6bwhLA5bfqso%22"</p><p> $json = 'payload={{"text": "{0}"}}' -f [System.Web.HttpUtility]::UrlEncode($Msg)</p><p> Try{</p><p> $Response = Invoke-WebRequest -Uri $url -Method POST -Body $json</p><p> }Catch [exception]{</p><p> $_</p><p> }</p><p>}</p><p><br /></p><p><br /></p></code></pre>
<pre><code class="html">Send-Chat ("{0:yyyy-MM-dd HH:mm:ss} DB Server CPU Loading {1:f0}%, Memory Loading {2:f0}%" -f (Get-Date), $CPUSensor, $MemSensor)</code></pre>
<h4 style="text-align: left;">設定 $url 請參閱 https://kb.synology.com/zh-tw/DSM/tutorial/How_to_configure_webhooks_and_slash_commands_in_Chat_Integration#x_anchor_id5</h4><h4 style="text-align: left;"><br />要注意的是,<span style="color: red;">當多台電腦,使用同一個 Webhook 傳送訊息時,只會處理第一個傳送到的<br /></span><span style="color: red;">
例如:我有 DB Server 1 & DB Server 2 跑相同的 Powershell 程式(控制同一時間同時傳送),就只會有其中一台的訊息會顯示</span></h4>
Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-4814666519593809172021-03-15T16:42:00.005+08:002023-04-10T23:28:25.337+08:00PowerShell 的 Internet http(s)/Web 存取功能<p></p><ol style="text-align: left;"><li><span style="font-size: medium;">$ie = New-Object -com InternetExplorer.Application</span></li><li><span style="font-size: medium;">$Downloader = New-Object -TypeName System.Net.WebClient</span></li><li><span style="font-size: medium;">[Net.HttpWebRequest]$WebRequest = [Net.WebRequest]::Create($Uri)</span></li><li><span style="font-size: medium;">Invoke-WebRequest</span></li><li><span style="font-size: medium;">Invoke-RestMethod / Invoke-Method</span></li><li><span style="font-size: medium;">透過 Selenium 操控瀏覽器,存取網站</span></li></ol><div><span style="font-size: large;"><br /></span></div><div><span style="font-size: large;">第一種,只能操作 Internet Explorer,而且經常會莫名發生例外狀況,而無法使用 getElement(s)等相關方法;此時,建議改用<span style="color: #2b00fe;"><b>IHTMLDocument3</b></span>_getElement(s)</span><span style="font-size: x-large;">等相關方法</span></div><div><span style="font-size: x-large;"><br /></span></div><div><span style="font-size: large;">第二種,通常用在下載檔案,當你有確定的檔案網址時,就使用它來下載檔案/圖片/影片</span></div><div><span style="font-size: large;"><br /></span></div><div><span style="font-size: large;">第三種讀取網站會是字串型態</span></div><div><span style="font-size: large;"><br /></span></div><div><span style="font-size: large;">第四種、第五種則是 HtmlWebResponse物件,通常用在存取網頁或呼叫API,如果遠端網站的資料是透過 Javascript AJAX 取得,那很可能就會抓不到資料</span></div><div><span style="font-size: large;"><br /></span></div><div><span style="font-size: large;">至於第五種,需要額外安裝<a href="https://www.selenium.dev/" target="_blank">Selenium WebDriver</a>,不同瀏覽器需要安裝不同的版本;此外,當瀏覽器版本升級時,WebDriver也會需要相應升級</span></div><p></p>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-50531231691613312182021-03-02T23:48:00.005+08:002021-07-02T16:02:10.755+08:00使用 Powershell 設定電腦環境<div style="text-align: left;">因為經常需要設定電腦,所以寫了個程式來設定電腦的環境,免得經常要手動設定,還容易忘記漏設定。<br /></div>
<div style="text-align: left;"><br /></div><pre><code><div style="text-align: left;">Param ([switch]$Verbose)<br />$VerboseStatus = $VerbosePreference<br />If($Verbose){<br /> $VerbosePreference = "Continue"<br />}<br />If(-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")){<br /> $ScriptFullPath = $MyInvocation.MyCommand.Definition<br /><span style="white-space: pre;"> </span>$arguments = "& '" + $ScriptFullPath + "'"<br /> # 另外以管理者身分執行 PowerShell,並載入 Script 來執行<br /><span style="white-space: pre;"> </span>Start-Process powershell -Verb runAs -ArgumentList $arguments<br /> # 中斷後面程式指令<br /><span style="white-space: pre;"> </span>Break<br />}<br />Write-Verbose "伺服器管理員不要每次開機都顯示"<br />New-ItemProperty -Path HKCU:\Software\Microsoft\ServerManager -Name DoNotOpenServerManagerAtLogon -PropertyType DWORD -Value “0x1” –Force | Out-Null<br />Write-Verbose "關閉 IE 增強安全性"<br />$AdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"<br />Set-ItemProperty -Path $AdminKey -Name "IsInstalled" -Value 0<br />$UserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"<br />Set-ItemProperty -Path $UserKey -Name "IsInstalled" -Value 0<br />Stop-Process -Name Explorer<br />Write-Verbose "關閉使用者存取控制(UAC)"<br />Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "ConsentPromptBehaviorAdmin" -Value 00000000<br />Write-Verbose "設定微軟注音輸入法,預設為英文模式"<br />Set-ItemProperty "HKCU:\Software\Microsoft\IME\15.0\IMETC" -Name "Default Input Mode" -Value 0x00000001<br />Write-Verbose "設定電源模式-高效能"<br />& "powercfg.exe" /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c<br />Write-Verbose "設定電源模式-高效能-永不關閉螢幕"<br />& "powercfg.exe" -change -monitor-timeout-ac 0<br />Write-Verbose "開機自動登入系統"<br />$usrname = 'user'<br />$password = 'mypasswd'<br />$RegistryLocation = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'<br />Set-ItemProperty $RegistryLocation -Name 'AutoAdminLogon' -Value '1'<br />Set-ItemProperty $RegistryLocation -Name 'DefaultUsername' -Value "$usrname"<br />Set-ItemProperty $RegistryLocation -Name 'DefaultPassword' -Value "$password"<br />Write-Verbose "設定時區、指定校時伺服器並校時"<br />$TimeZone = "Taipei Standard Time"<br />$NTPServer1 = "time1.google.com"<br />$NTPServer2 = "time.windows.com"<br />$NTPServer3 = "time.nist.gov"<br />Set-TimeZone -Id $TimeZone -PassThru | Out-Null<br />Push-Location<br />Set-Location HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers<br />Set-ItemProperty . 0 $NTPServer1<br />Set-ItemProperty . 1 $NTPServer2<br />Set-ItemProperty . 2 $NTPServer3<br />Set-ItemProperty . "(Default)" "0"<br />Set-Location HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters<br />Set-ItemProperty . NtpServer $NTPServer1<br />Pop-Location<br />Stop-Service w32time<br />Start-Service w32time<br />Write-Verbose "變更網路區域為 Private (Not Public)"<br />$NetAdapter = (Get-NetConnectionProfile -IPv4Connectivity Internet).InterfaceIndex<br />Set-NetConnectionProfile -InterfaceIndex $NetAdapter -NetworkCategory Private<br />$VerbosePreference = $VerboseStatus<br />If($Host.Name -eq "ConsoleHost"){<br /> Pause<br />}</div></code></pre>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-35849627612976544952021-03-02T23:41:00.005+08:002021-03-02T23:41:39.161+08:00使用 PowerShell 清除暫存檔,並清除垃圾桶<p>先設定一個陣列 $tempfolders ,用來存放所有暫存檔路徑</p><p>然後使用 Remove-Item 指令來強制刪除檔案(force),包含子目錄(recurse)</p><p>因為有些暫存檔,有可能正在使用,是無法刪除的,會造成指令發出錯誤訊息,所以最後加上參數 -ErrorAction SilentlyContinue,當發生錯誤時,安靜地繼續執行指令</p><p>最後,清除垃圾桶,也是一樣的</p><p>$tempfolders = @("C:\Windows\Temp\*", "C:\Windows\Prefetch\*", "C:\Documents and Settings\*\Local Settings\temp\*", "C:\Users\*\Appdata\Local\Temp\*")</p><p>Remove-Item $tempfolders -force -recurse -ErrorAction SilentlyContinue</p><p>Clear-RecycleBin -Force -ErrorAction SilentlyContinue</p><p><br /></p><p>如果要清除特別命名方式的檔案,或是不確定檔案位置的話,歡迎留言討論</p>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-35046847924455584722021-03-02T23:34:00.004+08:002021-03-02T23:34:48.513+08:00使用 PowerShell 停用不安全的 SSL 2.0 3.0 & TLS 1.0 1.1 通訊協定<div><span style="font-size: xx-small;">$Protocols = @("SSL 2.0", "SSL 3.0", "TLS 1.0", "TLS 1.1")</span></div><div><span style="font-size: xx-small;">$EndPoints = @("Client", "Server")</span></div><div><span style="font-size: xx-small;"><br /></span></div><div><span style="font-size: xx-small;">Write-Verbose "停用 SSL 2.0 & 3.0 以及 TLS 1.0 & 1.1"</span></div><div><span style="font-size: xx-small;"><br /></span></div><div><span style="font-size: xx-small;">$Protocols | ForEach{</span></div><div><span style="font-size: xx-small;"> $Protocol = $_</span></div><div><span style="font-size: xx-small;"> If(!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol")){</span></div><div><span style="font-size: xx-small;"> New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol" | Out-Null</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> $EndPoints | ForEach{</span></div><div><span style="font-size: xx-small;"> $EndPoint = $_</span></div><div><span style="font-size: xx-small;"> If(!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint")){</span></div><div><span style="font-size: xx-small;"> New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" | Out-Null</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> Switch($EndPoint){</span></div><div><span style="font-size: xx-small;"> "Client"{</span></div><div><span style="font-size: xx-small;"> Try{</span></div><div><span style="font-size: xx-small;"> Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" -Name DisabledByDefault -ErrorAction Ignore</span></div><div><span style="font-size: xx-small;"> Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" -Name DisabledByDefault -PropertyType DWORD -Value “0x1” –Force | Out-Null</span></div><div><span style="font-size: xx-small;"> }Catch{</span></div><div><span style="font-size: xx-small;"> New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" -Name DisabledByDefault -PropertyType DWORD -Value “0x1” –Force | Out-Null</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> "Server"{</span></div><div><span style="font-size: xx-small;"> Try{</span></div><div><span style="font-size: xx-small;"> Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" -Name Enabled -ErrorAction Ignore</span></div><div><span style="font-size: xx-small;"> Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" -Name Enabled -PropertyType DWORD -Value “0x0” –Force | Out-Null</span></div><div><span style="font-size: xx-small;"> }Catch{</span></div><div><span style="font-size: xx-small;"> New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\$Protocol\$EndPoint" -Name Enabled -PropertyType DWORD -Value “0x0” –Force | Out-Null</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;"> }</span></div><div><span style="font-size: xx-small;">}</span></div>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-50180016261064239072021-02-18T19:08:00.011+08:002021-02-18T19:08:55.566+08:00使用 PowerShell 進行硬體資產調查<span style="font-size: medium;">Windows 的 WMI, CIM 有很多資訊可以運用管理</span><div><span style="font-size: medium;">例如軟硬體資產、系統資源效能、程式運作等</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">這次要做的是硬體資產調查,以前我有介紹使用 AIDA64 Business 來做資產調查,但這套軟體是要付費的。</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">所以不想要花錢,又要做到資產調查,就只好自己動作來</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">只要將 PowerShell 程式將資料寫入網芳檔案,使用群組政策,讓使用者開機就自動執行這個 PowerShell ,資料就會自動寫入檔案</span></div><div><span style="font-size: medium;"><br /></span></div><span><span style="font-size: medium;"><a name='more'></a></span></span><div><div><span style="font-size: medium;"><b><i>$System = Get-CimInstance CIM_ComputerSystem</i></b></span></div><div><span style="font-size: medium;"><b><i>$BIOS = Get-CimInstance CIM_BIOSElement</i></b></span></div><div><span style="font-size: medium;"><b><i>$OS = Get-CimInstance CIM_OperatingSystem</i></b></span></div><div><span style="font-size: medium;"><b><i>$CPU = Get-CimInstance CIM_Processor</i></b></span></div><div><span style="font-size: medium;"><b><i>$HDD = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID = 'C:'"</i></b></span></div><div><span style="font-size: medium;"><b><i>$EXTXT = "D:\Desktop\welp.txt"</i></b></span></div><div><span style="font-size: medium;"><b><i>Clear-Host</i></b></span></div><div><span style="font-size: medium;"><b><i><br /></i></b></span></div><div><span style="font-size: medium;"><b><i>"`c`r" | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>get-wmiobject win32_networkadapterconfiguration -computer "." -filter "IPEnabled='True'" | Select DNSHostname,MACAddress,IPAddress | ForEach{</i></b></span></div><div><span style="font-size: medium;"><b><i> "MAC Address: {1}, IP Address: {2}, IPV6: {3}" -f $_.DNSHostname, $_.MACAddress, $_.IPAddress[0], $_.IPAddress[1] | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>}</i></b></span></div><div><span style="font-size: medium;"><b><i>"Login User: {0}" -f $env:UserName | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"User Domain: {0}" -f $env:UserDomain | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"Host Name: {0}" -f $env:ComputerName | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"Manufacturer: " + $System.Manufacturer | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"Model: " + $System.Model | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"CPU: " + $CPU.Name | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"RAM: " + "{0:N2}" -f ($System.TotalPhysicalMemory/1GB) + "GB" | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"HDD Capacity: " + "{0:N2}" -f ($HDD.Size/1GB) + "GB" | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"Operating System: " + $OS.caption | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div><div><span style="font-size: medium;"><b><i>"VGA: {0}" -f (Get-WmiObject Win32_VideoController -ComputerName ".").description | Out-File -FilePath $EXTXT -Append -Encoding oem</i></b></span></div></div>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-45385003117723621732021-02-18T18:30:00.006+08:002021-02-18T18:30:34.605+08:00使用 PowerShell 讀取 Synology NAS LDAP Server<p><span style="font-size: medium;">網路上查到的PowerShell 讀取 LDAP 資訊,幾乎清一色都是讀取 Active Directory....</span></p><p><span style="font-size: medium;">很少講到如何讀取 Linux LDAP Server</span></p><p><span style="font-size: medium;">找了好久,終於找到 C# 讀取 LDAP 的資訊,改成 PowerShell </span></p><span><span style="font-size: medium;"><a name='more'></a></span></span><p><span style="font-size: medium;"><b><i>Clear-Host</i></b></span></p><p><span style="font-size: medium;"><b><i>$LDAPDirectoryService = '192.168.1.101:389'</i></b></span></p><p><span style="font-size: medium;"><b><i>$DomainDN = 'dc=mail,dc=company,dc=com'</i></b></span></p><p><span style="font-size: medium;"><b><i># 讀取所有使用者</i></b></span></p><p><span style="font-size: medium;"><b><i>$LDAPFilter = '(&(objectClass=*)(uid=*))'</i></b></span></p><p><span style="font-size: medium;"><b><i># 讀取指定使用者</i></b></span></p><p><span style="font-size: medium;"><b><i>#$LDAPFilter = '(&(objectClass=*)(uid=admin))'</i></b></span></p><p><span style="font-size: medium;"><b><i><br /></i></b></span></p><p><span style="font-size: medium;"><b><i>$null = [System.Reflection.Assembly]::LoadWithPartialName('System.DirectoryServices.Protocols')</i></b></span></p><p><span style="font-size: medium;"><b><i>$null = [System.Reflection.Assembly]::LoadWithPartialName('System.Net')</i></b></span></p><p><span style="font-size: medium;"><b><i><br /></i></b></span></p><p><span style="font-size: medium;"><b><i>$LDAPServer = New-Object System.DirectoryServices.Protocols.LdapConnection $LDAPDirectoryService</i></b></span></p><p><span style="font-size: medium;"><b><i>$LDAPServer.AuthType = [System.DirectoryServices.Protocols.AuthType]::Anonymous</i></b></span></p><p><span style="font-size: medium;"><b><i>$LDAPServer.SessionOptions.ProtocolVersion = 3</i></b></span></p><p><span style="font-size: medium;"><b><i>$LDAPServer.SessionOptions.SecureSocketLayer =$false</i></b></span></p><p><span style="font-size: medium;"><b><i>$Scope = [System.DirectoryServices.Protocols.SearchScope]::Subtree</i></b></span></p><p><span style="font-size: medium;"><b><i># 讀取使用者所有屬性</i></b></span></p><p><span style="font-size: medium;"><b><i>#$AttributeList = @('*')</i></b></span></p><p><span style="font-size: medium;"><b><i># 讀取指定屬性</i></b></span></p><p><span style="font-size: medium;"><b><i>$AttributeList = @('uidnumber')</i></b></span></p><p><span style="font-size: medium;"><b><i>$SearchRequest = New-Object System.DirectoryServices.Protocols.SearchRequest -ArgumentList $DomainDN,$LDAPFilter,$Scope,$AttributeList</i></b></span></p><p><span style="font-size: medium;"><b><i>$objs = $LDAPServer.SendRequest($SearchRequest)</i></b></span></p><p><span style="font-size: medium;"><b><i><br /></i></b></span></p><p><span style="font-size: medium;"><b><i># 抓多個使用者</i></b></span></p><p><span style="font-size: medium;"><b><i>ForEach($user in $objs.Entries){</i></b></span></p><p><span style="font-size: medium;"><b><i> # 拆解 uidnumber 屬性</i></b></span></p><p><span style="font-size: medium;"><b><i> $chars = $user.Attributes.uidnumber -split " "</i></b></span></p><p><span style="font-size: medium;"><b><i> $uidnumber = ""</i></b></span></p><p><span style="font-size: medium;"><b><i> $chars | ForEach{</i></b></span></p><p><span style="font-size: medium;"><b><i> # 將字串轉成數值,再轉成字元,然後將字元累加,串成字串</i></b></span></p><p><span style="font-size: medium;"><b><i> $uidnumber += [char][int]$_</i></b></span></p><p><span style="font-size: medium;"><b><i> }</i></b></span></p><p><span style="font-size: medium;"><b><i> $fields = $user.DistinguishedName -split ","</i></b></span></p><p><span style="font-size: medium;"><b><i> $UserAccount = $fields[0] -replace "uid="</i></b></span></p><p><span style="font-size: medium;"><b><i><br /></i></b></span></p><p><span style="font-size: medium;"><b><i> # 格式化輸出帳號、使用者代號</i></b></span></p><p><span style="font-size: medium;"><b><i> If($UserAccount.Length -le 3){</i></b></span></p><p><span style="font-size: medium;"><b><i> "{0}`t`t`t`t{1}" -f $UserAccount, $uidnumber</i></b></span></p><p><span style="font-size: medium;"><b><i> }Elseif($UserAccount.Length -ge 11){</i></b></span></p><p><span style="font-size: medium;"><b><i> "{0}`t{1}" -f $UserAccount, $uidnumber</i></b></span></p><p><span style="font-size: medium;"><b><i> }Elseif($UserAccount.Length -ge 8){</i></b></span></p><p><span style="font-size: medium;"><b><i> "{0}`t`t{1}" -f $UserAccount, $uidnumber</i></b></span></p><p><span style="font-size: medium;"><b><i> }Else{</i></b></span></p><p><span style="font-size: medium;"><b><i> "{0}`t`t`t{1}" -f $UserAccount, $uidnumber</i></b></span></p><p><span style="font-size: medium;"><b><i> }</i></b></span></p><p><span style="font-size: medium;"><b><i>}</i></b></span></p><div><br /></div>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-91929665489698866422021-02-18T15:42:00.006+08:002021-03-05T23:39:53.865+08:00使用 PowerShell 批次執行 IE ,自動登入 Synology NAS<p><span>這次會想寫這個程式,是因為公司打算將 G Workspace 轉移到 Synology NAS</span></p><p><span>公司本來也沒有使用 AD or LDAP 做驗證,打算將帳號整合到 LDAP 做未來準備。</span></p><p>轉移郵件的功能 MailPlus 本身的功能就很完整,不需要太多操心</p><p><span>但是Synology Drive 卻沒辦法自動批次轉移全公司的 Google Drive!</span></p><p><span>使用Cloud Sync ,必須讓使用者自行操作,也沒辦法限制使用者只能加入指定的 Google Workspace</span></p><p><span>幸運的是,Synology Active Backup for G Suite可以將全部使用者的Google Drive 都備份下來,只要把使用者備份檔案複製到使用者家目錄,就可以正常在Synology Drive 使用。</span></p><p><span>只是因為整合了 LDAP 驗證,所以家目錄變成 "帳號-LDAP uidNumber" 這樣的格式。</span></p><p><span>手動去建立家目錄也很麻煩(一兩百個帳號),用PowerShell 讀取 LDAP 也有點麻煩,所以最簡單的方法就是使用者登入Synology NAS,Synology NAS 會自動建立家目錄。</span></p><p><span>以下不多說,就直接看程式吧</span></p><p><span style="color: red;">之前在每個 Page 變動後,都去偵測 $ie.ReadyState = 4 或是 $ie.Busy = $False 程式才繼續執行,都會發生錯誤</span></p><p><span style="color: red;">後來改成檢查 $ie.Document.getElementById('ext-gen84') 是否為物件也會誤判</span></p><p><span style="color: red;">再改成檢查 $ie.Document.getElementById('ext-gen84') 是否存在,也還是會誤判</span></p><p><span style="color: #2b00fe;">最後改成判斷 $ie.Document.getElementById('ext-gen84')的 Type 才成功。</span></p><span><a name='more'></a></span><div><div><b><i># 指定 帳號清單的 csv 檔案</i></b></div><div><b><i># 格式:"信箱","家目錄","帳號","密碼"</i></b></div><div><b><i>Clear-Host</i></b></div><div><b><i>$Error.Clear()</i></b></div><div><b><i>Remove-Variable * -ErrorAction SilentlyContinue</i></b></div><div><b><i><br /></i></b></div><div><b><i>$List = Get-ChildItem -Path "$PSScriptRoot\AccountList-*.csv" | Sort-Object -Property name -Descending | Select-Object -First 1</i></b></div><div><b><i>$Count = 0</i></b></div><div><b><i><br /></i></b></div><div><b><i># Synology NAS 的登入頁面網址</i></b></div><div><b><i>$Login = "http://192.168.1.123:5000/"</i></b></div><div><b><i><br /></i></b></div><div><b><i>Get-Content -Path $List.FullName | ForEach{</i></b></div><div><b><i> $Count++</i></b></div><div><b><i> $Line = $_</i></b></div><div><b><i> # 取得四欄資料</i></b></div><div><b><i> $fields = $Line -split ","</i></b></div><div><b><i> $EMail = $fields[0]</i></b></div><div><b><i> $UserHome = $fields[1]</i></b></div><div><b><i> $account = $fields[2]</i></b></div><div><b><i> $password = $fields[3] -replace [regex]"`r`n",""</i></b></div><div><b><i> # 顯示目前處理的帳號資訊</i></b></div><div><b><i> $msg = "{0:000} {1} {2}" -f $Count, $account, $password </i></b></div><div><b><i> Write-Host $msg</i></b></div><div><b><i><br /></i></b></div><div><b><i> # 使用 COM 物件呼叫 IE (Chrome 沒有 COM 物件,所以這個方法不適用 Chrome.exe)</i></b></div><div><b><i> $ie = New-Object -com "InternetExplorer.Application"</i></b></div><div><b><i> #$ie.Navigate("about:blank")</i></b></div><div><b><i> $ie.Visible = $True</i></b></div><div><b><i> </i></b></div><div><b><i> $ie.Navigate($Login)</i></b></div><div><b><i> </i></b></div><div><b><i> # 設定 IE 視窗位置及大小</i></b></div><div><b><i> # 您可以先用程式開啟 IE 之後,將 IE 視窗調整到你喜歡的位置,再去讀取Left, Top, Width, Height 等屬性</i></b></div><div><b><i> # 然後將數值寫在程式中</i></b></div><div><b><i> $ie.Left = -8</i></b></div><div><b><i> $ie.Top = -8</i></b></div><div><b><i> $ie.Width = 1296</i></b></div><div><b><i> $ie.Height = 1056</i></b></div><div><b><i> </i></b></div><div><b><i> # 等待 DOM Ready,才能進行 Javascript 相關指令操作</i></b></div><div><b><i> Do{ </i></b></div><div><b><i> #"$($ie.ReadyState) $($ie.Busy)"; </i></b></div><div><b><i> Start-Sleep -Milliseconds 100 </i></b></div><div><b><i> }While($ie.ReadyState -ne 4)</i></b></div><div><b><i><br /></i></b></div><div><b><i> </i></b></div><div><b><i> # 如果前一個使用者沒登出,就會停在登入畫面;如果找到登出 Button,就按下登出鈕</i></b></div><div><b><i> # 雖然 瀏覽器 ReadyState = 4 或是 Busy = $False,但是 JScript Engine/COM Object/DOM 似乎都不一定 Ready</i></b></div><div><b><i> # 單純只判斷 $ie.Document.getElementById('ext-gen84') 是否存在或者是否為物件都會有誤判機率發生</i></b></div><div><b><i><span style="white-space: pre;"> </span># 一定要確認該元素的 Type 不等於 "DBNull"</i></b></div><div><b><i> If((($ie.Document.getElementById('ext-gen84')).GetType()).Name -ne "DBNull"){</i></b></div><div><b><i> $ie.Document.getElementById("ext-gen84").click()</i></b></div><div><b><i> }</i></b></div><div><b><i><br /></i></b></div><div><b><i> # 等待登入畫面的登入鈕出現,而且 Type 不等於 DBNull 才能繼續下去</i></b></div><div><b><i> Do{</i></b></div><div><b><i> Start-Sleep -Milliseconds 100</i></b></div><div><b><i> }While((($ie.Document.getElementById('ext-gen47')).GetType()).Name -eq "DBNull")</i></b></div><div><b><i><br /></i></b></div><div><b><i> # 自動填入帳號密碼,並按下登入鈕</i></b></div><div><b><i> $ie.Document.getElementById("login_username").value = $account</i></b></div><div><b><i> $ie.Document.getElementById("login_passwd").value = $password</i></b></div><div><b><i> $ie.Document.getElementById("ext-gen47").click()</i></b></div><div><b><i><br /></i></b></div><div><b><i> # 等待登出鈕出現,而且 Type 不等於 DBNull 才能繼續下去</i></b></div><div><b><i> Do{</i></b></div><div><b><i> Start-Sleep -Milliseconds 100</i></b></div><div><b><i> }While((($ie.Document.getElementById('ext-gen84')).GetType()).Name -eq "DBNull") </i></b></div><div><b><i><br /></i></b></div><div><b><i> # 按下登出鈕</i></b></div><div><b><i> $ie.Document.getElementById("ext-gen84").click()</i></b></div><div><b><i><br /></i></b></div><div><b><i><span style="white-space: pre;"> </span># 等待登入畫面的登入鈕出現,而且 Type 不等於 DBNull ,才算完成登出</i></b></div><div><b><i> Do{</i></b></div><div><b><i> Start-Sleep -Milliseconds 100</i></b></div><div><b><i> }While((($ie.Document.getElementById('ext-gen47')).GetType()).Name -eq "DBNull")</i></b></div><div><b><i><br /></i></b></div><div><b><i> # 結束 IE</i></b></div><div><b><i> $ie.Quit()</i></b></div><div><b><i> # 清除變數 ie</i></b></div><div><b><i> Remove-Variable ie, account, password</i></b></div><div><b><i>}</i></b></div></div><div><b><i><br /></i></b></div><div><br /></div><hr /><div>$LoginURL = "http://192.168.1.123:5000"</div><div>$login = Invoke-WebRequest -Uri $LoginURL -WebSession $synology</div><div><br /></div><div> $PostParams = @{username="$account";passwd="$password"}</div><div> $Method = $login.Forms['login-form'].Method</div><div> $Action = $login.Forms['login-form'].Action</div><div><br /></div><div> $Content = Invoke-WebRequest -Uri "$LoginURL/$Action" -Body $PostParams -Method $Method -WebSession $synology</div><div><br /></div><div> $C = Invoke-WebRequest -Uri "$LoginURL/webapi/encryption.cgi" -Body $PostParams -Method Post -WebSession $synology</div><div><br /></div><div> $D = Invoke-WebRequest -Uri "$LoginURL/webman/login.cgi?enable_syno_token=yes" -Body $PostParams -Method Post -WebSession $synology</div><div> $Token = ($D.Content | ConvertFrom-Json).SynoToken</div><div><br /></div><div> $Entry = "$LoginURL/webapi/entry.cgi?api=SYNO.Core.Desktop.Defs&version=1&method=getjs&SynoToken={0}&v=1614173144" -f $Token</div><div> $E = Invoke-WebRequest -Uri $Entry -Method Get -WebSession $synology</div><div> $E.RawContent</div><div><br /></div><div><span style="color: red;"><b>使用 Invoke-WebRequest 可以登入 Synology NAS,但是不會觸發 DSM 自動建立使用者家目錄,歡迎大家來討論</b></span></div>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-55665709025724282382020-12-03T22:51:00.004+08:002021-02-18T15:46:08.939+08:00使用 PowerShell 對文字進行Escape編碼、Unescape解碼<p> <b style="text-indent: 0pt;"><span style="font-size: 18pt; letter-spacing: 0pt;"><span style="font-family: SimSun;">這個編碼解碼結果,與</span> JavaScript Escape() <span style="font-family: SimSun;">及 </span><span style="font-family: Times New Roman;">Unescape() </span><span style="font-family: SimSun;">相同</span></span></b></p><p><span style="font-family: Calibri;"> </span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 425.2pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 425.2pt;" valign="top" width="566"><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$Original = '<span style="font-family: SimSun;">“</span><span style="font-family: Calibri;">Instead of going back to business as usual, Uber is taking this moment as an opportunity to reduce our environmental impact.</span><span style="font-family: SimSun;">” </span><span style="font-family: Calibri;">The company said in a press release.[p]Uber </span><span style="font-family: SimSun;">在新聞稿中表示:「</span><span style="font-family: Calibri;">Uber</span><span style="font-family: SimSun;">並沒有像往常一樣重返市場,而是以此為契機,減少對環境的影響。」</span><span style="font-family: Calibri;">'</span></span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$Encode = ""</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$Alphabet = @(42,43,45,46,47,48,49,50,51,52,53,54,55,56,57,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122)</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$Symbol = @(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,44,58,59,60,61,62,63,91,92,93,94,96,123,124,125,126,127)</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span style="font-family: SimSun;">編碼文字</span></span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">for($i = 0; $i -lt $Original.Length; $i++){</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> If($([int]$($Original[$i])) -in $Alphabet){</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> $Encode += $Original[$i]</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> }ElseIf($([int]$($Original[$i])) -in $Symbol){</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> $Encode += [System.String]::Format("%{0:X2}", [int]$Original[$i])</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> }Else{</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> $Encode += [System.String]::Format("%u{0:X4}", [int]$Original[$i])</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> }</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;">}</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">Write-host $Encode</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">Write-Host "`r`n"</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span style="font-family: SimSun;">還原文字</span></span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: medium;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">Add-Type -AssemblyName System.Web</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-family: SimSun; font-size: medium; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">[System.Web.HttpUtility]::UrlDecode($Encode)</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></p><p class="MsoNormal"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun;"><o:p></o:p></span></p></td></tr></tbody></table><div id="highlighter--hover-tools" style="display: none;">
<div id="highlighter--hover-tools--container">
<div class="highlighter--icon highlighter--icon-copy" title="Copy"></div>
<div class="highlighter--separator"></div>
<div class="highlighter--icon highlighter--icon-delete" title="Delete"></div>
</div>
</div>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0tag:blogger.com,1999:blog-7646996704860285904.post-52337299193249831222020-12-03T22:43:00.003+08:002021-02-18T15:47:59.406+08:00使用 PowerShell 讀取 GMail 摘要 RSS<p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"><span face="新細明體">使用</span> PowerShell <span face="新細明體">讀取 </span><span style="font-family: Calibri;">GMail </span><span face="新細明體">信箱資訊,需要先設定應用程式密碼,包括使用 </span><span style="font-family: Calibri;">Outlook</span><span face="新細明體">或是使用</span><span style="font-family: Calibri;">Windows 10</span><span face="新細明體">內建的 </span><span style="font-family: Calibri;">Mail </span><span face="新細明體">程式收發郵件。</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span><span face="新細明體">或是想要讓事物機把掃描產生的圖檔,以電子郵件寄出,也需要設定應用程式密碼。</span></span></p><p class="MsoNormal"><span face="新細明體" style="font-size: large;">紅字部分,請自行更換成適當的資訊喔</span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 426.1pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568"><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">Clear-Host</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"># <span face="新細明體">讀取 </span><span style="font-family: Calibri;">GMail Samples</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">$webclient = new-object System.Net.WebClient</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-family: Calibri; font-size: large; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"> </span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"># <span face="新細明體">這裡輸入的密碼,是 </span><span style="font-family: Calibri;">Application Password (</span><span face="新細明體">應用程式密碼</span><span style="font-family: Calibri;">)</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"># <span face="新細明體">如何產生 </span><span style="font-family: Calibri;">Application Password (</span><span face="新細明體">應用程式密碼</span><span style="font-family: Calibri;">)</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"># https://support.google.com/mail/answer/185833?hl=tw</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">$webclient.Credentials = new-object System.Net.NetworkCredential ("</span><span face="新細明體" style="color: red; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">my</span><span style="color: red; font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;">@</span><span face="新細明體" style="color: red; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">email.address</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">", "</span><span face="新細明體" style="color: red; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">MyApplicationPassword</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">")</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></p></td></tr></tbody></table><p class="MsoNormal"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> </span><span style="font-size: large;"><span face="新細明體">之前使用</span><span face="新細明體"> .DownloadString Method<span face="新細明體">,會發現中文字都被破壞掉,所以改用 </span><span style="font-family: Calibri;">.DownloadData</span></span></span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 426.1pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568"><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span style="font-family: SimSun;">下載 </span><span style="font-family: Calibri;">RSS</span><span style="font-family: SimSun;">,這裡得到的是一堆十進位數字的陣列,</span><span style="font-family: Calibri;">Unicode </span><span style="font-family: SimSun;">文字是三組大於</span><span style="font-family: Calibri;">127</span><span style="font-family: SimSun;">的</span><span style="font-family: Calibri;">10</span><span style="font-family: SimSun;">進位數字</span></span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$xml= $webclient.</span><span style="color: blue; font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">DownloadData</span><span style="font-family: SimSun; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">("https://mail.google.com/mail/feed/atom")</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun;"><o:p></o:p></span></p></td></tr></tbody></table><p class="MsoNormal"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZCD9vrUoVNiBoK1KAHXptLccOG0GjZi0vG-PaRy5mZzQSdsX8lTgpzg2ce8mFpPJIKn64pzQOCroglbis1dcd5vcPp1flS3EG99fsyGg-D3F54suhiyGUIXcZdmBVjSXue6qEp2oQ3cA/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="399" data-original-width="61" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZCD9vrUoVNiBoK1KAHXptLccOG0GjZi0vG-PaRy5mZzQSdsX8lTgpzg2ce8mFpPJIKn64pzQOCroglbis1dcd5vcPp1flS3EG99fsyGg-D3F54suhiyGUIXcZdmBVjSXue6qEp2oQ3cA/s16000/image.png" /></a></div><br /><p></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span><span face="新細明體">所以,接下來就是要將變數</span><span face="新細明體"> $xml </span><span face="新細明體">的資訊轉換成文字</span><span style="font-family: Calibri;">(</span><span face="新細明體">包含 </span><span style="font-family: Calibri;">Unicode)</span></span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 426.1pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568"><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">$s = ""</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">For($l=0;$l -lt $xml.Count; $l++){</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> If($xml[$l] -gt 127){ # <span face="新細明體">當數值大於 </span><span style="font-family: Calibri;">127</span><span face="新細明體">,表示是 </span><span style="font-family: Calibri;">Unicode</span><span face="新細明體">,所以轉換成</span><span style="font-family: Calibri;">16</span><span face="新細明體">進位格式字串</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> $s += "%" + $xml[$l].ToString('x2')</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> }Else{ # <span face="新細明體">小於等於 </span><span style="font-family: Calibri;">127 </span><span face="新細明體">,就直接轉成 </span><span style="font-family: Calibri;">Ascii </span><span face="新細明體">字元</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> $s += [char]$xml[$l]</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> }</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;">}</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"># <span face="新細明體">將 </span><span style="font-family: Calibri;">Unicode </span><span face="新細明體">編碼進行解碼,還原成中文字</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';">$xml = ([URI]::UnescapeDataString($s))</span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p></td></tr></tbody></table><p class="MsoNormal"><span style="font-family: Calibri; font-size: large; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK7bTPWEo5KhY9B6_YZxGmV7RhP9YiZIox4Neyj7dFB6N2FWVxPp8DmP3WZulO1TapN3OuDEK_b6FXSatkyBgmAzz03c1mQWVjVnAnbsUKg298JLqDNeVo9fO5GGnUu-BKeiM6W2ArYq4/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-size: large;"><img alt="" data-original-height="64" data-original-width="1886" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK7bTPWEo5KhY9B6_YZxGmV7RhP9YiZIox4Neyj7dFB6N2FWVxPp8DmP3WZulO1TapN3OuDEK_b6FXSatkyBgmAzz03c1mQWVjVnAnbsUKg298JLqDNeVo9fO5GGnUu-BKeiM6W2ArYq4/s16000/image.png" /></span></a></div><span style="font-size: large;"><br /> </span><p></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體"><span face="新細明體">這樣</span> $xml <span face="新細明體">就變成 </span><span style="font-family: Calibri;">XML </span><span face="新細明體">格式的</span></span><span face="新細明體" style="color: blue;">字串</span><span face="新細明體">了</span></span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 426.1pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568"><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span face="新細明體">輸出成 </span><span style="font-family: Calibri;">XML </span><span face="新細明體">檔案</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$xml | Out-File -FilePath "D:\test.xml" -Encoding utf8</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p></td></tr></tbody></table><p class="MsoNormal"><span face="新細明體" style="font-size: large; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體">接下來要解析</span><span face="新細明體"> XML</span><span face="新細明體">內容,分欄顯示</span></span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 426.1pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568"><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span face="新細明體">雖然字串是 </span><span style="font-family: Calibri;">XML </span><span face="新細明體">格式,但不代表變數是 </span><span style="font-family: Calibri;">XML </span><span face="新細明體">型態,所以要進行轉換型態</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$xml = [xml]$xml</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span face="新細明體" style="font-size: large; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span face="新細明體">設定 </span><span style="font-family: Calibri;">Format-Table </span><span face="新細明體">要輸出的格式</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$format= @{Expression={$_.author.name};Label="Name"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={"|"};Label="|"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={$_.author.email};Label="E-Mail"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={"|"};Label="|"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={$_.title};Label="Title"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={"|"};Label="|"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> #@{Expression={$_.link|Select 'href'};Label="Link"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> # <span face="新細明體">當你使用瀏覽器開啟 </span><span style="font-family: Calibri;">Link </span><span face="新細明體">的連結,就會直接讀取該郵件</span></span><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={$_.link|Select-XML -XPath "@href"};Label="Link"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={"|"};Label="|"},</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> @{Expression={$_.summary};Label="summary"}</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span face="新細明體">輸出成 </span><span style="font-family: Calibri;">Table </span><span face="新細明體">,缺點是過長的欄位資訊就不會出現</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$xml.feed.entry | format-table $format</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p></td></tr></tbody></table><p class="MsoNormal"><span face="新細明體" style="font-size: large; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEr3mxt9AuFkb3WxPA-fq2wcOrJ4dZPmjT6gWOTIYVzCNCKVp9IR8Hj3qXDQ_Tsx_N65MrMzN1_4nnL2HOOEj8JzlKuSYYhNIrXo0FTDLE5a3YI_MpZt2JgweUzlMAf6Ar5PCept6C_Fw/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-size: large;"><img alt="" data-original-height="127" data-original-width="1347" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEr3mxt9AuFkb3WxPA-fq2wcOrJ4dZPmjT6gWOTIYVzCNCKVp9IR8Hj3qXDQ_Tsx_N65MrMzN1_4nnL2HOOEj8JzlKuSYYhNIrXo0FTDLE5a3YI_MpZt2JgweUzlMAf6Ar5PCept6C_Fw/s16000/image.png" /></span></a></div><span style="font-size: large;"><br /></span><p></p><p class="MsoNormal"><span face="新細明體" style="font-size: large; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"><span face="新細明體">再來就是將</span> XML <span face="新細明體">內容,轉換成簡單的 </span><span style="font-family: Calibri;">HTML </span><span face="新細明體">檔案</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"><o:p></o:p></span></span></p><table border="1" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-table-layout-alt: fixed; width: 426.1pt;"><tbody><tr><td style="background: rgb(197, 224, 179); border-bottom: 1.0000pt solid windowtext; border-color: windowtext; border-left: 1.0000pt solid windowtext; border-right: 1.0000pt solid windowtext; border-style: solid; border-top: 1.0000pt solid windowtext; border-width: 1pt; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-top-alt: 0.5000pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568"><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"># <span face="新細明體">所以底下將 </span><span style="font-family: Calibri;">XML </span><span face="新細明體">資訊轉換成 </span><span style="font-family: Calibri;">HTML </span><span face="新細明體">表格</span></span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$mail = @()</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$xml.feed.entry | ForEach {</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> $hash = @{</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> "name" </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">= $_.author.name</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> "email" </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">= $_.author.email</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> "title" </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">= $_.title</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> "link" </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">= ($_.link|Select-XML -XPath "@href")</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> "summary" </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"> </span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">= $_.summary</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> }</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> $Line = New-Object -TypeName PSObject -Property $Hash</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> $mail += $Line</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;">}</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></span></p><p class="MsoNormal"><span face="新細明體" style="font-size: large; mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';">$mail | ConvertTo-Html | Out-File -FilePath "D:\testxml.html" -Encoding oem</span><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri;"><o:p></o:p></span></p></td></tr></tbody></table><p class="MsoNormal"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5T6KDs9V3H9HaFtXr2EW7aTCPQxCxP9_KYyLH-3zK6Pla7HY9GrleMSFGQNU7i0zX2JNutXJwrR3FIhP2hPqGZl0RLNBhr9xWBdJySvCB04Y0u3UjGVaIIZaZg48KE1u_RmJq1cj5yQ/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="196" data-original-width="1267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5T6KDs9V3H9HaFtXr2EW7aTCPQxCxP9_KYyLH-3zK6Pla7HY9GrleMSFGQNU7i0zX2JNutXJwrR3FIhP2hPqGZl0RLNBhr9xWBdJySvCB04Y0u3UjGVaIIZaZg48KE1u_RmJq1cj5yQ/s16000/image.png" /></a></div><br /><p></p><p class="MsoNormal"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><p class="MsoNormal"><span face="新細明體" style="mso-ascii-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-spacerun: 'yes';"> </span></p><p class="MsoNormal"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 新細明體; mso-spacerun: 'yes';"> </span></p><p class="MsoNormal"><span style="font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun; mso-spacerun: 'yes';"> </span></p><div id="highlighter--hover-tools" style="display: none;">
<div id="highlighter--hover-tools--container">
<div class="highlighter--icon highlighter--icon-copy" title="Copy"></div>
<div class="highlighter--separator"></div>
<div class="highlighter--icon highlighter--icon-delete" title="Delete"></div>
</div>
</div>Tomhttp://www.blogger.com/profile/12801472459074932275noreply@blogger.com0