2018-11-05

Apach Web Server 限制存取 IP


<Directory "D:/WebSite/www.contoso.com">
Options FollowSymLinks
AllowOverride All
Order Deny,Allow
Deny From All
Allow From 192.168.0.0/24 192.168.1.0/24 192.168.2.0/24
</Directory>

2018-10-01

Veeam 備份 Replicated VMs 時遇到的問題與迂迴的解決辦法

朋友使用 Veeam Backup & Replication 做 Hyper-V 的 VM 備份, 卻遇到了一個解不開的問題
先說他的備份環境大致是這樣:「所有 Production 的 Hyper-V Hosts 先將 VM Replica 到一台肚子超大的 Server 裡, 然後再用 Veeam 去備份這些副本 VM」
聽起來這個策略沒什麼問題, 在副本 Host 上備份根本理所當然, 不會去影響到 Production 的效能
但當備份到容量較大的 VM, 尤其是 SQL Server 的時候卻產生了問題
Full Backup 時總會遇到以下錯誤:

Processing Mercury Error: Failed to call wmi method 'DestroySnapshot'. Wmi error: '32775' Failed to delete VM snapshot, snapshot path '%2'.

Failed to create VM recovery checkpoint (mode: Crash consistent) Details: Failed to call wmi method 'CreateSnapshot'.
Wmi error: '32775' Failed to create VM recovery snapshot,VM ID 'ooooooooooooooooooo'.

Retrying snapshot creation attempt (Failed to create production checkpoint.)
Task has been rescheduled
Queued for processing at [Date Time]
Unable to allocate processing resources. Error: Failed to call wmi method 'CreateSnapshot'.

Wmi error: '32775' Failed to create VM recovery snapshot, VM ID 'ooooooooooooooooooo'.

在備份的 Repository 裡面的確有看到 vbk 檔案, 看起來很像有備份成功
但上述錯誤發生後該 VM 會卡在 Applying Changes, 後續複寫則全部失敗
且 Hyper-V Virtual Machine Management Service 無法 Stop, 重開機指令下去後要等待兩小時左右才能重開機成功

一步一步來, Workaround 的方式如下:
  1. 遇到問題後先將 Hyper-V Virtual Machine Management Service 改為手動啟動, 不要讓他開機自動啟動
  2. Stop Hyper-V Virtual Machine Management Service
  3. 下指令 taskkill /f /im vmms.exe 將 Process Kill 掉
  4. 重開機就不需要等兩小時
  5. 開好機後在 net start vmms 指令之後緊接著快速地連續下達以下指令
    Get-VM "YourVMName" | Get-VMCheckpoint -SnapshotType Recovery | Remove-VMCheckpoint
  6. 步驟 5 最好是多開幾個視窗, 連續下指令, 錯誤沒關係, 就怕來不及, VM 又進入了卡在 Apply Changes 的狀態
  7. 這樣做完後可以至少將 VM 的狀態復原, 後續再嘗試備份

2018-09-30

Line@ BOT Login / Messaging API with Apache / PHP / MySQL System

這陣子對 Line@ 生活圈有興趣
試用後發現不能自己將某些人設為一個群組, 只對這些人發訊息
只能廣播給所有加入 Line@ 好友的人
或是付更多費用取得分眾發訊的功能
但該功能似乎只能針對性別、年齡等資訊去分, 依然不能自己設群組廣播
於是興起了自己寫後台的想法

目前開發完成的功能:

1. 將在 Line@ 申請好的 Channel 資訊填入即可建立 BOT
2. 具有 Log 功能, 可將 1on1、Room、Group 的對話全部 Log 下來, 包含文字、圖片、音訊、視訊、檔案、地點等等
3. 可打開 Chat Window 進行對話
4. Chat Window 會自動 Refresh 取得最新訊息

*. 收到 Line Official Event 會檢查 HTTP header 確認身份, 也會驗證 Json 的簽章, 安全性檢查無虞

2018-09-06

取得連結網路磁碟機的資訊 (Get Mapped Network Drive Letter & UNC Path) with VBS

Set objNetwork = WScript.CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
For i = 0 to colDrives.Count-1 Step 2
   Wscript.Echo colDrives.Item(i) & vbTab & colDrives.Item (i + 1)
Next

2018-08-15

Office 365 - Exchange Online 郵件無法搜尋

同事使用 Office 365 - Exchange Online 的 Outlook Client 發生了郵件無法搜尋的問題
向微軟開 Case 後解決如下:


2018-08-14

Exchange Mailbox Move 自動找最小的 DB 遷移

據說 Exchange 的 DB 建議大小在 200GB 以內 (這麼小?)
由於需要進行 2010 to 2016 的遷移, 就寫了一個小程式來自動判斷 DB 大小
然後把 User 自動遷移到當下最小的一個 DB 去

# ----- 參數設定 -------------------------------------------------------------------------------------------

# 遷移的方式
# DB: 將一個 DB 內的所有 MailBox 全部遷移
# TXT: 提供一個 TXT 檔, 遷移 TXT 檔中的 User Account
$MoveMethod = "TXT"

# 要遷移的 DB
# 如果 MoveMethod 是 DB 的話, 這裡要設定來源 DB, DB 中所有的 MailBox 都會搬移
$DBToMove = "SourceDB"

# 要遷移的 User Account 一行一個 User 寫到純文字檔中
# 跟 PowerShell 的 .ps1 檔放在相同路徑
$UserToMove = "Users.txt"

2018-08-03

Gust OS on Hyper-V 2016 Backup Issue

最近開始進行 VM 備份的作業
架構是將數台 Hyper-V 2012 R2 上的 Guest VM 先複寫到一台肚子很大的 Hyper-V 2016
再用另一台肚子也很大的來把 Hyper-V 2016 上的複本 VM 備份起來
在過程中遇到了一個很奇怪且嚴重糟糕的問題

先說明一下在備份作業開始時, 備份軟體會先把 VM 做一個 Recovery Check Point
然後備份完再把 Recovery Check Point 刪除
而遇到的問題是某一台 VM 在備份完成時會無法刪除 Recovery Ckeck Point
且 Status 會卡在 Applying Replication Changes 之類的狀態

該狀態無論按 Cancel、Remove Replica、Delete VM 等各種強制手段都無法結束
一定要將 VMMS Service Stop (但 Stop 一定會失敗) 然後重開機
再在開機後 VMMS Service 一啟動馬上下指令 Remove-VMCheckPoint - Name "oooooo" 才能移除
若是開機一陣子, VMMS Service 已經跑起來了, 他就又會陷入 Applying Changes 的狀態


2018-07-23

Microsoft VDI 相關的東西

翻到一篇很久之前的草稿沒發佈, 是跟 VDI 有關的內容


Registry:


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services]
"TrustedCertThumbprints"="oooooooooooooooooooooooooooooooo"

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Ext\CLSID]
"{6A5B0C7C-5CCB-4F10-A043-B8DE007E1952}"="1"


2018-07-20

Exchange 2016 採用 Let's Encrypt 憑證的方法與 Auto Renew

Let's Encrypt 真是進年度最偉大的服務了
上次用 Let's Encrypt 佈署 Remote Desktop Gateway 後, 這次要來佈署 Exchange 2016

Updated:
2025.02.24
Let's Encrypt 已經改用 https://www.win-acme.com/
PowerShell Script 更新加入 Exchange Online Hybrid 的部分 (TLS Issuer Name)


採用的版本是 LetsEncryptWinSimple.v1.9.11.2 (直接下載連結)
解壓縮後我把他放到 Exchange Server 的 C:\Cert\LetsEncryptWinSimple.v1.9.11.2 路徑
接著執行 letsencrypt.exe



這裡我選 M


2018-07-09

DFS-R 排除檔案項目 FileNameToExclude / DirectoryNameToExclude

Get-DfsReplicatedFolder | Set-DfsReplicatedFolder -FileNameToExclude "~*, *.tmp, .DS_Store, Thumbs.db"

預設 .bak 也被排除, 但有的 User 習慣用 .bak , 所以將 .bak 從排除名單中刪除避免沒複寫到
.DS_Store 是 MAC 留下的東西不需要
Thumbs.db 是縮圖也不要