鼎新 ERP 技轉課程之 TIPTOP GP 程式開發
環境架構:
p_zx 為建立使用者帳號的畫面
使用 TELNET 或 SSH 模式登入的話需要在 LINUX 主機建立對應帳號
執行程式呼叫 r.r2 或 exe2 加程式名稱,r.r2 只能在當下目錄執行
執行主功能呼叫 udm7,Web 模式自動呼叫這支程式
在 TIPTOP 任何一支程式中按下 Ctrl+G 可開出 Command Run 畫面
TIPTOP 資料區:
正式區─公司正常運作的區域
測試區─系統測試用,練習操作或測試功能
標準區─鼎新提供版本更新時放在標準區,不可修改
資料夾:
config─參數檔
各模組(aap,adm,aim,atm,azz…)─ERP標準模組,標準模組一律為三碼,a開頭為台灣,g開頭為大陸,c開頭為客製,模組名稱在 p_zmd 中查詢及建立
各模組底下的資料夾:
4gl: Source Code
42m: 編譯後的執行檔
42r: 編譯連結完成的執行檔
4fd: 畫面檔,舊版為 per
42f: 編譯後的畫面檔
sch: 資料結構檔
系統模組(lib,sub,qry)─系統管理模組,lib及sub是不可單獨執行的
lib: 所有作業都必需使用的功能,例如判斷權限
sub: 很多作業都用到的功能,例如自動取號
qry: 查詢資料的功能
系統模組會打包成 42x 檔放在 42m 資料夾底下,使用 r.gx 模組代號,手動打包系統模組的 42x
系統模組函數:
lib函數為 cl_ 開頭;sub 函數為 s_ 開頭;qry 函數為 q_ 開頭
p_link 可查詢作業連結,p_findfunc 可查詢函數名稱
作業命名原則:
一至三碼為模組(範例中的aim),第四碼為程式類型(範例中的第二個i),五至七碼為流水號(範例中的100),範例:aimi100.4gl
程式類型:i─建檔;q─查詢;t─處理;s─參數設定;p─批次處理;r─報表作業;
變數命名原則:
修改原有的作業,不要改名,但要搬到客製區底下,畫面檔也要搬到客製區,新增作業時依命名原則存在客製區,可使用 p_zz 定義作業的執行路徑
資料表命名原則:
前四碼表示資料表開頭,使用二至四碼的英文加數字,後面加上_file,範例:ima_file
欄位名稱為資料表開頭加上流水號,範例:ima01,ima02…
特定用途會用資料表開頭加上用途
索引為資料表開頭加上流水號
Primary Key 為資料表開頭加pk
使用 p_zta 查詢所有的資料結構
資料表的"檔案名稱"及"檔案目的"可以多語系
欄位的"屬性"分為標準(出貨值)及客製(自行新增)
欄位的"欄位說明"可以多語系
「建立Table」的按鈕為新增一個空白資料表,如果已存在會失敗
「資料庫比對」可用來比對指定的來源與目的資料庫Schema的差異
客製 Table 命名原則:
tc_xxx_file:客製新增,xxx為三碼英或數字
ta_xxx_file:修改標準 Table
不允許修改標準欄位的 type,size,不允許更改欄位用途,不允許使用 No Used 的欄位
Config:
4ad: 存放程式 Action 代碼與多語系說明,
TIPTOP 語言代碼:0-繁體中文,1-英文,2-簡體中文
/語言/系統/程式代碼.4ad
4tm: Top Menu 的內容檔案,可在 p_base_act 中查詢
4st: 存放螢幕顯示的 Style
4tb: Toolbar 的內容檔案,可在 p_zz 中查詢
4sm: 存放系統 Start Menu 的內容檔案,可在 p_zm 中查詢
/語言/menu_id.4sm
top.global: 定義 TIPTOP 全系統共用的全域變數
schema: 存放 ds.sch 檔案
dsfgl2.bin: 存放 TIPTOP 提供的系統工具
log: 程式錯誤記錄
p_cron: 存放使用者設定的背景作業的相關檔案,使用 p_cron 設定
環境變數:$開頭,一律為大寫
$XXX─標準模組路徑
$XXXi─系統模組下的 42r
$ORALE_SID─Oracle Instance 變數
系統工具:
rebuild─全系統重新編譯,大概需要兩小時
r.gf─預覽42f,r.gf formname lang p/c y/n
將新增作業加到 Start Menu 時使用 p_zm,建立 Start Menu 時使用 p_zz,模組代號為 “MENU"
交談指令:支援 ON ACTION
CONSTRUCT: 接受畫面輸入的查詢條件轉成 SQL 指令的 WHERE 字串
INPUT/INPUT ARRAY: 接受畫面輸入的值存到資料庫
DISPLAY ARRAY: 將資料庫的值顯示到畫面上
MENU: 表示功能表
PROMPT: 表示彈出式視窗,通常用於顯示訊息並傳回使用者回覆
TIPTOP 標準用法在交談指令中必定要加
ON ACTION controlg:
ON ACTION help: 提供"說明"的資訊
ON ACTION about: 提供"關於"的資訊
ON ACTION locale: 切換語言別
ON IDLE g_idle_seconds: 處理閒置
鼎新 ERP 技轉課程之 Genero 基礎課程
Genero 將語言稱之為 BDL(Bussiness Development Language)
最常見的副檔名:4gl 副程式, *.per 畫面檔, *.4fd 較新版本的畫面檔
其程式可分為 Form 及 Module
Form 稱為表單,即為畫面檔
Module 稱為副程式,可再分為 Function 及 Report,每支程式都需要一個稱之為 MAIN 的 Function,作為應用程式進入點。
畫面開發:
1、建立 Form 時設定寬度及高度,設定值為字元數(不是像素)
2、Form 裡的元件大致分為 Container control(容器控制項)及 Widget control(一般控制項)
3、Form 裡面不可以直接放 Widget control,一定要使用 Container control,再將 Widget control 放入 Container control 內
4、ScollGrid一定是搭配 MFArray 使用
5、版面配置一般使用 Grid 加上 HBOX、VBOX 排列,HBOX 或 VBOX 類似 Office 的群組功能,要在裡面加元件要先解開
6、輸入文字使用 Edit(文字方塊)或 TextEdit(多行文字方塊)
7、重要屬性:Required─不可空白、NoEntry─唯讀、NoNull─不可無值
8、TIPTOP 有控制表單控制項順序,不需要在表單中自訂
9、TIPTOP 中不使用 Button,程式會在 RunTime 產生
程式開發:
1、TIPTOP 規範指令一律大寫
2、定義變數使用 DEFINE
DEFINE 名稱 型態 #直接定義
DEFINE 名稱 LIKE TableName.FieldName #參照欄位型態
3、註記使用 # 或用 {} 括起來
4、DATABASE dbname #指定連接資料庫名稱
5、LET 設定變數值
6、TIPTOP 只使用 INTEGER,SMALLINT及DECIMAL
7、STRING 是 BDL 中一個很特殊的型態
8、不同資料型態的組合:
DEFINE rec RECORD
名稱 型態,
名稱 型態,
名稱 型態,
名稱 型態
END RECORD
或
DEFINE rec RECORD LIKE TableName.*
9、INITIALIZE:定義變數時給初始值
10、"," 表示字串相加,相加中的字串如有 Null 先轉為空白再相加
"||" 表示字串相加,相加中的字串如有 Null 結果為空白
[start,end]取出 CHAR 或 VARCHAR 字串中指定起迄位置的字串,第一碼為 1
11、GLOBALS:定義全域變數
GLOBALS
DEFINE 名稱 型態
END GLOBALS
或
GLOBALS “FilePath" #讀取已寫好的設定檔
12、呼叫 Function 使用 CALL FunctionName()
13、任何地方的變數名稱不可與全域變數同名,包含 Function 的參數名稱
14、CALL 可接收回傳值
CALL FunctionName() RETURNING var1[,var2…]
LET var1 = FunctionName() #只有一個回傳值才能用
Function 中使用 REUTRN 回傳結果值
15、INT_FLAG:當設定 DEFER INTERRUPT 時,系統會在使用者按下中斷鍵時將此變數設為 True
STATUS:最近一次執行 SQL 指令的結果是否成功
16、SQLCA:最近一次執行 SQL 指令的結果,為一物件
SQLCA.SQLCODE:結果狀態,0表示成功,>0表示錯誤訊息代號
SQLCA.SQLERRD[]:結果訊息,SQLCA.SQLERRD[3]表示受影響的資料列
DISPLAY:將程式變數顯示到畫面的指定欄位
DISPLAY 變數 TO 欄位名稱 #標準用法
DISPLAY BY NAME 名稱 #變數名稱與欄位名稱相同
INPUT:將指定欄位的值儲存到變數中
INPUT 變數 FROM 欄位名稱 #標準用法
INPUT BY NAME 名稱 #變數名稱與欄位名稱相同
WITHOUT DEFAULTS 表示不使用欄位預設值
CONSTRUCT:依輸入的欄位建立資料庫查詢語法中的 WHERE 字串
PREPARE:驗證 SQL 字串的正確性
FREE:釋放 PREPARE 的記錄
CURSOR:BDL中使用CURSOR來承載查詢結果指標
DECLARE CursorName [SCROLL] CURSOR FOR [SQL 陳述式 or Prepared_id or SQL 字串]
OPEN:將 CURSOR 開啟,如果 OPEN 時要代入參數,使用 USING
範例:
LET l_sql="SELECT * FROM a WHERE col1=? AND col2=?; "
PREPARE a_pre FROM l_sql
DECLARE a_cus SCROLL CURSOR FOR a_pre
OPEN a_cus USINT var1,var2
FETCH first a_cus INTO l_a.
CLOSE a_cus
在 CURSOR 中指定指標使用 FETCH,必需用 SCROLL CURSOR,
使用 FOREACH 可跑迴圈逐筆讀取,不需要 OPEN 及 CLOSE,必需使用 CURSOR
ON ACTION:定義按鈕 Click 事件方法
ON ACTION action名稱
ARRAY:陣列
DEFINE 名稱 ARRAY[長度] OF 型態 #固定長度
DEFINE 名稱 DYNAMIC ARRAY OF 型態 #動態長度
第一個元素的索引位置為1
陣列提供方法可呼叫,除了 getLength() 之外都要加 CALL
BEFORE INPUT ARRAY:將表單中Table的資料儲存到 ARRAY 中
在 4gl 中特定指令是有順序性的,以下指令按照順序列出
DATABASE #必需放在第一行
GLOBALS #第二行,宣告全域變數,可能有多行
DEFINE #宣告整支程式共用的變數,第三行
MAIN … END MAIN #應用程式進入點
FUNCTION … END FUNCTION #其他 FUNCTION
結論:
Genero 算是比較不人性化的語言,畫面檔跟程式檔分得很清楚,如果要存取畫面檔的欄位或定義控制項事件方法,要在程式檔中依控制項名稱指定,可是IDE工具並沒有幫我們關聯,所以如果對應不到在編譯時是不會錯的,要在RunTime才會發現,所以 Debug 並不是很容易。
指令中包含存取資料庫的語法,很容易搞混到底該怎麼下指令,要不要使用引號括起來。
總之,不是很好學,加油。
鼎新ERP技轉課程之UNIX基礎課程
由於 TIPTOP 是安裝在 Linux 之上,因此要維護 TIPTOP 就必需要熟悉 Linux,今天是第一堂課,屬於基礎課程。
1、從 Windows 登入 Linux 可使用的工具,包含 Telnet、NetTerm、Putty、XShell…,登入之連接方式可以使用 Telnet 或是 SSH。
2、Linux 有區分大小寫,因此帳號密碼都要注意大小寫。使用者可使用 passwd 指令變更密碼,密碼的限制為字典查得到的字不接受,太簡短太常用的密碼不接受。
3、Linux 的系統管理員帳號為"root",可以變更自己及其他使用者的密碼,而且不受上述限制。
4、環境變數主要用途為規範使用者每次登入時所能使用的相關資源,一般皆為大寫命名,可使用 echo $環境變數名稱 查詢變數值,透過 export 環境變數=變數值 來設定。
例如:echo $TEMPDIR 用來查詢 TEMPDIR 這個變數的值
export FGLGUI=1 用來設定 FGLGUI 這個變數的值等於 1
5、其他就是一些 Linux 指令的介紹, 一個作業系統的指令應該是多到學不完,在這裡就不講得太詳細。
6、另一個重點就是 vi,簡單來說 vi 算是 Linux 的文字編輯器,用來在 Linux 環境裡編輯檔案內容。
7、今天有提到一些Oracle的東西,教了最基礎的建立及管理使用者、建立及管理資料表、存取資料的指令。
執行 Ocacle 命令要使用 sqlplus 這個指令登入資料庫。
因為最主要是要維護 TIPTOP,所以關於 Linux 並沒有教得太深入,整體來說已經可以讓我們有個大概的了解,
知道作業系統的檔案架構及資料庫怎麼操作,至於其他的部份,就要靠我們自己再去摸索了。
Microsoft TechDay 2010 徵文獎品
九月底參加了 Microsoft TechDay 2010,原本只是想說寫個心得分享一下,
沒想到還有事後徵文活動,而且不用我投稿,是他們自己找上門來留言,
說我獲得Tech Days徵文所送的隨行杯,因此我得到一個隨行杯
當然也是因為我在文章中順便替 Microsoft 打廣告,
內容就是圖中左邊的網站火花計畫
總之再次分享喜悅,Microsoft TechDay 真得是很好的課程。
Microsoft TechDays Taiwan 2010 心得
這次是我第一次參加 TechDay,收穫蠻多的。
之前也曾聽過幾次研習會,不過研習會通常都是一天,而且不會說得很深入,
難得有這種機會可以聽到這麼多堂專業的課程,雖然消化不了太多,但總是多少能再吸收一些新知。
由於公司不是資訊業,因此我們IT部門是屬於全都包的作法,從使用者需求訪談、系統分析、資料庫、程式設計、報表製作到客服,一律都要會,所以選課時困擾了好久,後來決定挑選程式設計及資料庫的課程,本來也選了一堂 Hyper-V 的課,後來臨時改變跑去上了別的課,其實如果只把自己當做程式設計師,應該可以選到很完整的課表,結果東挑西選的什麼都聽不完整,要是有人還沒參加過而明年要參加的,可以多多思考這個問題。
首先先來分享一下參加 TechDay 有什麼好處,那就是可以拿到很多贈品
右上角那個就是每個學員都有的 TechDay 2010 背包
我專屬的馬克杯,提早報名才有的喔
我的學員證
這次 ThecDay 有幾個重要的主題,最熱門的當然是雲端,這次所有的課程裡應該就屬跟雲端有關的課最多了,
聽了兩堂小朱老師的課以及一堂 Rubby 老師的課,對於雲端技術總算有了一點大概的槪念,不過對我而言能聽懂得不多,
只記得 Rubby 老師說的話「這是一堂難度400的課,但礙於時間我不能講得太多,所以我會當作你們都聽得懂,一直講下去。」
再來就是 SQL Server 2008 R2,關於資料庫的課也不少,不過我的感覺是關於 SQL Server,打廣告的成份居多,我聽到的大部份內容都是展示新功能,那些東西大概 Help 裡都找得到,沒聽到什麼技術性的東西,這是我覺得比較可惜的。
另一個也廣告打很兇的就是 IE9,支援 HTML5及CSS3,而且運用 GPU 硬體加速,對於影像及動畫的運算效能大大提升(展示出來是如此),至於實際上可以做到怎麼樣的程度已經有 Beta 版可以下載,但我還沒有用過。
這次參加 TechDay 另一個很大收穫就是認識了一些高手,像是 gipi、Bill 叔 以及大鈞,那天非常感謝大鈞提供了一些問題的方向,當面聊天更可以感受到 MVP 的熱情。
今年不同以往的多了一個 IE Night Party,雖說是為了 IE9 作宣傳,但這樣的一個熱鬧的晚會還是讓人回味無窮,當天沒有拍下什麼東西,只好回家後拍獎品
入場券是一個手環
會場提供四個小遊戲,過關後即可得到一個胸章,四個遊戲四個胸章,就是 I Love IE9
集滿四個胸章可以換一台防水相機。
順帶一提,這一次活動中,聽到了微軟很佛心的計畫:BizSpark
鼓勵新興網路公司,可以向微軟爭取資源,至少可以節省一開始的研發成本囉。
有興趣創業的朋友們,記得檢視一下自己是否符合BizSpark的資格 。
最後,還要再說一次,TechDay 真得是一個很好的活動,對我們這種大量使用微軟產品的人是一個可以了解新知識並學習技術的好機會,不過明年必需換別人去,我就不會再參加了。
TechDay 2010 心得報告 第三天
鼓勵新興網路公司,可以向微軟爭取資源,至少可以節省一開始的研發成本囉。
有興趣創業的朋友們,記得檢視一下自己是否符合BizSpark的資格 。
TechDay 2010 心得報告 第二天
BOF 是大家針對自己在工作上遇到的問題還有對各種軟體的建議,
似乎今天來得都是MIS,幾乎都在談 Office,不過光是一個 Office 時間就不夠用了,
從升級新版本(2003->2007->2010)之後習慣及環境的改變,到討論最熱烈的向下相容的問題,
主持人根本沒什麼時間講話,大家搶著吐苦水發表問題,現場的微軟員工(微軟阿宅)都快應接不暇了,
看來對負責管理幾百台甚至幾千台電腦的MIS而言,大家根本沒空去在乎夠用、夠快、還是夠強,
只要問題夠少就可以成為完美的辦公室應用軟體了。
雲端應用程式平台介紹
特質:
雲端運算是將電腦集中運用,未來使用電腦的運算能力就像是使用水電一樣,只要連上網就可以使用,不必自行投資建構。
無限延展(scalable)、彈性使用(elastic)
應用:
Windows Azure AppFabric
Windows Server AppFabric
微軟提供了 Private Cloud 的底層架構
Hosting Services,Caching Services,結合IIS管理介面
三大好處:
1.建立可延伸效能(ScaleOut)應用程式,AppFabric Caching是什麼?
2.加快即有ASP.NET網站的執行速度
3.管理與監控WF/WCF Services
BizTalk
與企業內部的應用程式做橋接,再與 Public Cloud 做資料交換,
BizTalk 提供多種 LOB Adapter,除了各式資料庫,甚至是 SAP,Oracle 等ERP系統
Biz Talk 與外部系統應用方式:SOAP,Database,File
Demo BizTalk 與 SAP ERP 橋接設定
Demo BizTalk 開發 SAP ERP 資料橋接,包裝成 WebService 並佈署至 Web Server
Demo WCF Workflow Service 與 BizTalk 的整合
結論
如何讓企業內部系統與雲端系統接軌,是企業必需考量的重要課題
透過 BizTalk Server整合企業內部多種系統並與雲端界接,能夠完全發揮…後面來不及抄>_<
變更偵測(Change Detection):
政府會要求提供哪些使用者在何時存取了哪些資料
敏感性、機密性資料保護是因應個資法必需做到的
—
安全稽核機制:SQL追蹤檔─並非很容易判斷誰存取了什麼資料、從資源的角度來說代價很高、C2稽核和通用條件模式接近但不完整
資料稽核:易出錯且難維護,容易產生Bugs
變更追蹤(Change Tracking):
2008 之後版本
記錄哪資料被異動過,但不儲存資料如何變更的異動歷程值
在交易的過程就同步的產生追蹤,和資料庫引擎完全整合
ETL update(類似Type 3 SCD)
—
資料庫層級─ALTER DATABASE AdventureWorks SET CHANGE_TRACKING=ON;
資料表層級─ALTER TABLE HumanResources.Employee ENABLE CHANGE_TRACKING;
變更追蹤會跟 transaction 綁在一起
透過特定系統函數可查詢變更記錄
改變資料表結構是否記錄?不行
是否有記錄改變前的資料?不行
sys_Change_Context 只有一個欄位?
如果有使用 Begin tran 再 Rollback 是否會有記錄?
異動資料擷取(Change Data Capture):
記錄更改歷程,交易完成後非同步產生(使用複寫記錄讀取器(replication log reader)),這個功能只有 Enterprice,Developer,datacenter 有
啟用資料庫─EXEC sys.sp_cdc_enable_db,啟用資料表─EXEC sys.sp_cdc_enable_table
建立名為"cdc"的資料庫結構(owner)
建立兩個 SQL JOB,_capture 作業─為觸發記錄讀取器
資料庫稽核(SQL Audit):
應用背影基礎:XEvent
Audit 可記錄 select 動作
—
舊有 SQL 版本的稽核方式:SQL Server Audio Report Services
SQL Diag
PerfStat Script
效能分析
PAL:自動分析 Performance Counter 提供HTML報表…
定義環境後執行即可開始分析,報表中提供各種指標數據
SQL Nuxus:匯入 SQL Diag 資料(資料夾)後進行分析
HTML報表內可從各種角度 DropDown 去查詢明細
Access Control
協助企業管理 Service Bus 上來自各個不同來源的 User
管理機制:SSO
使用規則塑模定義使用者權限
Resource Types:token policy-設定權杖有效期間,scope-應用程式授權範圍,issue-應用程式的使用用或角色,rule-結合 scope 及 issue
Access Control 驗證方式未來會越來越多元
Service Bus
服務匯流排,串連企業內部大大小小的所有應用程式,
如果要讓各個裝置存取全球集中的資料中心,那就必需透過各式各樣的網路節點,防火牆規則及通訊協定都不同,
Service Bus 則是透過經過認證的入口提供資料轉傳的途徑。
Message Relay
Service Registry
Service Deployment Models
詳細內容不簡單,大致上就是目前只能使用 WCF
其實要做到可以從 Client 連接到 Service Bus,背後要實作的東西很多,
尤其是為了讓安全性夠嚴謹,需要很多道驗證的手續,目前要讓應用程式可以佈署到 Windows Azure 過程還蠻複雜的,
但是我相信未來應該會慢慢被簡化。
還是那個重點,一定要先熟悉WCF才能運用雲端技術。
TechDay 2010 心得報告 第一天
分成各段介紹雲端運算及Windows Lync,透過實例分享廣告雲端、Windows Phone 7及Windows Lync Server
重點:
雲端伺服器仰賴某種技術將多台伺服器(可能是幾百台或更多)虛擬化之後成為一個服務平台,
底層依然是 Windows 2008 及 SQL 2008,但是比各一台的效能高得多,
而且自動執行各種 Service Pack 更新及自有一套防毒防駭機制,
Server Platform 企業建立私有雲,根據需求自行客製化,
Service Platform 使用微軟建立的公用雲
—
可惜坐太遠看不清小妹容顏
此堂課是概念性的講述,沒有太深入的技術內容,因此將重點以雜亂無章的方法表列。
新的 WPF 控制項、多點觸控、Windows 7 功能、改善文字繪製
平板電腦是 64 位元,目前大部份的軟體也並沒有針對這個特性開發
預載應用程式(autostart):IIS啟動後馬上開始網譯,第一次瀏覽網站就不會那麼久、Web forms URL 路由、減少ViewState的大小、Web forms 圖表(Chart)控制項、ASP.NET MVC 2
網路瀏覽行為:瀏覽、搜尋、交易(將一個行為分成好幾頁跳頁執行)
Workflow服務、支援 WS-Discovery、ASP.NET URL 路由、REST WCF 服務、WCF 資料(伺服器分頁,二進位串流,行數(Row counts))
.NET 4 提供新的平行運算 APIs:平行迴圈、平行LINQ(PLINQ)、最佳化數量的(工作導向)平行運算、新的同步機制及平行集合類別
平行運算及LINQ應該會是未來的主流,在多核心系統及雲端主機上可以發揮最大的效果
HTML5的標準還尚未行成
—
.Net 2010 其實沒有加太多新的突破性的東西,只是更完整的提供未來主流功能
其中包含WPF、Silverlight、HTML5、平行運算、LINQ、Windows Phone 7
提供 SharePoint 開發環境
Visual 2010 可以接受擴充功能,而且可以自行開發,當自行開發的專案在執行時,系統會再開一個 vs2o10 來 Debug
MEF:有點類似介面,但無法事先定義屬性方法,使用attribute去定義方法或屬性的內容,Import及Export
透過MCG的講解與示範,了解可能的應用及開發方式。
公用程式控制點(UCP):提供各式各樣監看及分析Server狀況
UCP預設只能監看執行個體,如果想要監看資料庫,必需建立DAC(資料層應用程式)
UCP只能使用網域使用者(Domain User account)執行
UCP必需是10.5或更高的版本,10.5=S008 R2
資料收集器:將每一台Server的狀況集中到指定的伺服器
UCP必需是10.5或更高的版本,10.5=S008 R2
以原則為基礎的管理(PBM)
可以使用中央管理伺服器(CMS)進行原則定義管理及佈署原則到各伺服器
EPM Framework 軟體為免費
PowerShell 指令碼
屬於 CommandLine 介面的 T-SQL 執行器,接受 .Net 語法,將某些反覆使用的程式碼存起來後以 PowerShell 執行很方便