--- title: 'Batch 指令教學' disqus: hackmd --- # Batch指令教學 - 2 ## 目錄 [TOC] ## REG 指令介紹 :::info 針對登錄子機碼資訊和登錄專案中的值執行作業 ::: **本篇僅介紹 REG ADD 跟 REG DELETE** 詳細功能請看 https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/reg 1. REG ADD 如下 ( 詳細請看 https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/reg-add ): **REG ADD 位置 /v 名稱 /t 型類 /d 資料** ``` 位置:機碼位置 名稱:機碼名稱 型類:REG_SZ REG_MULTI_SZ REG_DWORD_BIG_ENDIAN REG_DWORD REG_BINARY REG_DWORD_LITTLE_ENDIAN REG_LINK REG_FULL_RESOURCE_DESCRIPTOR REG_EXPAND_SZ 預設是 REG_SZ 資料:寫入的資料 REG ADD         加入機碼 HKLM\SYSTEM    機碼位置 /v          機碼名稱 /t         機碼類型 /d          機碼值 /f          不提示,強制復寫 ``` **注意**:REG ADD是有回傳值的,回傳值可以透過Errorlevel查看 ``` 回傳值 狀態 0 成功 1 失敗 ``` 例如: 1. 要在HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run底下新增一個名為Atomic Red Team的Registry Run key,資料來源為C:\Path\AtomicRedTeam.exe,並且其過程不提示,直接強制執行,指令如下: ``` REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "Atomic Red Team" /t REG_SZ /F /D "C:\Path\AtomicRedTeam.exe" ``` 2. 若要使用名為MRU的值將多重值登錄專案新增至HKLM\Software\MyCo ,類型REG_MULTI_SZ以及fax\0mail\0\0的資料,請輸入: ``` reg add HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail\0\0 ``` 2. REG DELETE 詳細介紹如下網址: https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/reg-delete 例如: 1. 刪除剛剛建立的Registry Run Key **REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "Atomic Red Team" /f >nul 2>&1** 其中關於 >nul 2>&1的介紹如下(其實>nul 2>&1可省略): https://www.ltsplus.com/linux/dev-null-2-and-1-meanning Call 呼叫外部程式或副程式 --- ```gherkin= Feature: Guess the word # The first example has two steps Scenario: Maker starts a game When the Maker starts a game Then the Maker waits for a Breaker to join # The second example has three steps Scenario: Breaker joins a game Given the Maker has started a game with the word "silky" When the Breaker joins the Maker's game Then the Breaker must guess a word with 5 characters ``` > I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it. [name=Bill Gates] ```gherkin= Feature: Shopping Cart As a Shopper I want to put items in my shopping cart Because I want to manage items before I check out Scenario: User adds item to cart Given I'm a logged-in User When I go to the Item page And I click "Add item to cart" Then the quantity of items in my cart should go up And my subtotal should increment And the warehouse inventory should decrement ``` > Read more about Gherkin here: https://docs.cucumber.io/gherkin/reference/ schtasks 指令 --- :::info 讓系統管理員能夠在建立、刪除、查詢、變更,和執行結束排程工作。 ::: 排程必須具備一定的權限: 1. 若要排程、查看及變更本機電腦上的所有工作,**您必須是 Administrators 群組的成員。** 2. 若要排程、查看及變更遠端電腦上的所有工作,**您必須是遠端電腦上 Administrators 群組的成員**,或者您必須使用 /u 參數提供遠端電腦的系統管理員認證。 3. **如果本機和遠端電腦位於相同網域中,或本機電腦位於遠端電腦網域信任的網域中**,您可以在/create或/change操作中使用/u參數。 否則,遠端電腦無法驗證指定的使用者帳戶,也無法確認該帳戶是否為系統管理員群組的成員。 4. **您打算執行的工作必須具有適當的許可權**,這些許可權因工作而異。 根據預設,工作會以本機電腦目前使用者的許可權執行,或以 /u 參數所指定之使用者的許可權執行(如果包含的話)。 若要以不同使用者帳戶的許可權或系統許可權來執行工作,請使用 /ru 參數。 詳細指令如下: ``` SCHTASKS /parameter [arguments] ``` **參數清單:** /Create 建立新的排程工作。 /Delete 刪除排定的工作。 /Query 顯示所有排定的工作。 /Change 變更排定工作的內容。 /Run 依需求執行排定的工作。 /End 中止目前正在執行的排程工作。 /ShowSid 顯示與排定的工作名稱對應的安全性識別碼。 /? 顯示這個說明訊息。 例如 ( /create的參數請看 https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/schtasks-create ): 1. 建立一個名為T1053_005_OnLogon的排程,它會在**User每次登入時執行**,此Task是執行cmd.exe /c calc.exe指令,預設使用User權限運行 **schtasks /create /tn "T1053_005_OnLogon" /sc onlogon /tr "cmd.exe /c calc.exe"** **有關執行頻率的參數如下表**: ``` MINUTE - 指定工作應該執行之前的分鐘數。 HOURLY - 指定工作應該執行之前的小時數。 DAILY - 指定工作應該執行之前的天數。 每週 指定工作應該執行前的周數。 MONTHLY - 指定應該執行工作之前的月份數。 ONCE - 指定工作在指定的日期和時間執行一次。 ONSTART - 指定每次系統啟動時,工作都會執行。 您可以指定開始日期,或在下次系統啟動時執行工作。 ONLOGON - 指定每當使用者 (任何使用者) 登入時,工作就會執行。 您可以指定日期,或下次使用者登入時執行工作。 ONIDLE - 指定每當系統閒置一段時間時,工作就會執行。 您可以指定日期,或在下次系統閒置時執行工作。 ``` 2. 在**每次系統啟動時**都會執行名為T1053_005_OnStartup的排程,目的是執行cmd.exe /c calc.exe指令,並且使用system權限運行 ``` schtasks /create /tn "T1053_005_OnStartup" /sc onstart /ru system /tr "cmd.exe /c calc.exe" ``` 3. 強制刪除一個名為T1053_005_OnLogon的排程 ``` schtasks /delete /tn "T1053_005_OnLogon" /f >nul ``` takeown 指令 --- :::info 這個指令主要是取回擁有權 可藉由讓系統管理員成為檔案的擁有者,讓系統管理員復原之前遭拒的檔案存取 ::: **根據預設,擁有者是物件建立者或建立程式的人**。 有關**擁有權及存取控制清單的介紹**請參考 https://docs.oracle.com/cd/E19253-01/816-3945/6ma6l6rg0/index.html 指令模板: ``` TAKEOWN [/S system [/U username [/P [password]]]] /F filename [/A] [/R [/D prompt]] ``` 參數如下: ``` /S 指定遠端電腦的名稱或 IP 位址, 預設值為本機電腦 /F 指定檔案或資料夾位置 /P 指定 /u 參數中指定的使用者帳戶密碼 /R 將當前資料夾位置及所有子資料夾,設定擁有者(Owner)權限 /U 將擁有者(Owner)權限,設定為特定用戶 /A 將擁有者(Owner)權限,設定為將當前系統管理員群組 如果您未指定此選項,系統會將檔案擁有權授與目前登入電腦的使用者 /D 隱藏目前使用者沒有指定目錄的 [清單資料夾 ] 許可權時所顯示的確認提示,並改用指定的預設值。 /d選項的有效值為: Y - 取得目錄的擁有權。 N - 略過目錄。 注意:需搭配 /R 使用 ``` 例如: 1. 將所有位於”C:\Folder″資料夾及檔案,及所有子資料夾及其檔案,擁有者(Owner)權限設為當前系統管理員群組 ``` TAKEOWN /F "C:\Folder" /R /A ``` 2. 強制將C:\Users\Public\sethc.exe的擁有者設為當前系統管理群組 ``` takeown /F C:\Users\Public\sethc.exe /A ``` 3. 將所有位於”C:\Folder″資料夾及檔案,及所有子資料夾及其檔案,擁有者(Owner)權限設為用戶”user″ ``` TAKEOWN /F "C:\Folder" /R /U "user" ``` 4. 將所有位於”C:\Folder″資料夾及檔案,及所有子資料夾及其檔案,擁有者(Owner)權限設為網域”domain″用戶”user″ ``` TAKEOWN /F "C:\Folder" /R /U "domain\user" ``` ## icacls 指令 :::info Change Access Control List 顯示或修改指定檔案上的判別存取控制清單 (DACL),及套用預存的 DACL 到指定目錄中的檔案。 簡單說就是顯示或修改指定檔案的存取權。 ::: 本篇僅介紹基礎用法,詳細請參考 https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/icacls 常用參數表: ``` [/T] 以遞迴的方式執行操作(使用)。 [/C] 遇到錯誤時仍要繼續執行,當然他也會出錯誤的清單。 [/L] 操作在符号链接本身而不是其目标上执行(這一個不常用)。 [/Q] 安靜模式。 ``` 我們會**先介紹如何儲存及還原權限**,再介紹**如何利用icacls設定及拒絕權限** 1. 儲存權限 ``` icacls File_Name /save Save_File_Path [/T] [/C] [/L] [/Q] ``` 2. 還原權限 ``` icacls File_Name /restore Save_File_Path [/T] [/C] [/L] [/Q] ``` 3. 設定權限 ``` icacls name /grant groupName|userName:perm [/T][/C][/L][/Q] ``` **groupName|userName:是群組名稱 或 使用者名稱 perm :權限操作符號,在一般的操作大家可用簡單的方式即可** 簡單的權限操作符號: ``` F - 完全訪問權限 M - 修改權限 RX - 讀取和執行的權限 R - 只讀的權限 W - 可寫的權限 ``` 4. 拒絕權限 ``` icacls name /deny groupName|userName:perm [/T][/C][/L][/Q] ``` 在此附上**進階的權限操作符號**,供讀者參考: D - 删除 RC - 讀取控制 WDAC - 寫入 DAC WO - 寫入所有者 S - 同步 AS - 訪問系统安全性 MA - 允许的最大值 GR - 一般性讀取 GW - 一般性寫入 GE - 一般性執行 GA - 全为一般性 RD - 讀取數據/列出目錄 WD - 寫入數據/添加文件 AD - 附加數據/添加子目录 REA - 讀取擴張屬性 WEA - 寫入擴張屬性 X - 執行/遍歷 DC - 删除子項 RA - 讀取屬性 WA - 寫入屬性 **例如**: 1. 我要設定在c:/test資料夾所有文件的權限,讓canred帳號可以完全控制 ``` icacls c:/test /grant canred:F /T ``` 2. 我要拒絕canred帳號使用c:/test的權限 ``` icacls c:/test /deny canred /T ``` 3. 我要備儲c:來的所有檔案權限,存儲到c:/c.perm中 ``` icacls c:/ /save c.perm ``` 4. 我要還原c:的檔案權限 ``` icacls c:/ /restore c.perm ``` 5. 設定C:\Users\Public\sethc.exe及其下所有子目錄的權限,使 Administrators 群組具有完全控制權 ``` icacls C:\Users\Public\sethc.exe /grant Administrators:F /T ``` ## Net User 指令 :::info **NET USER 可建立和修改電腦上的使用者帳戶。** 使用時不加上參數,便會列出該台電腦的使用者帳戶。 使用者帳戶資訊是儲存在使用者帳戶資料庫中。 ::: 指令如下: ``` NET USER [username [password | *] [options]] [/DOMAIN] ``` options有/ADD、/DELETE、/ITEMS、/ACTIVE四種,如下所示: * username {password \ *} /ADD [options] [/DOMAIN] * username [/DELETE] [/DOMAIN] * username [/TIMES:{times \ ALL}] * username [/ACTIVE: {YES \ NO}] **可再CMD上輸入 Net Help User 取得完整資訊** 基本參數用法如下: ``` username 是要新增、刪除、修改或檢視的使用者帳戶名稱。 使用者帳戶名稱最多可有 20 個字元。 password 指派或變更使用者帳戶的密碼。 密碼必須符合以 NET ACCOUNTS 命令的 /MINPWLEN 選項設定的最小長度。 最多可有 14 個字元。 * 可產生一個提示要求輸入密碼。 當您在密碼提示輸入密碼時,密碼不會顯示出來。 /DOMAIN 在目前網域的網域控制站上執行操作。 /ADD 將使用者帳戶新增到使用者帳戶資料庫。 /DELETE 將使用者帳戶從使用者帳戶資料庫移除。 ``` 例如: 1. 新增使用者test 並於下次登入後輸入密碼 ``` net user test * /add ``` 2. 在Domain下建立一個名為test的User,且密碼為password ``` net user test password /add /domain ``` ## 2>&1 指令