2018-12-17

取得 Hyper-V Host 上 VM 的 CPU、Memory、HDD Size 等基本資訊

取得 Hyper-V Host 上 VM 的 CPU、Memory、HDD Size 等基本資訊

$VMs = Get-VM
$Result = "Hyper-V Host,VM Name,CPU Count,Mem Min (MB),Mem Max (MB),HDD Path,HDD FileSize (MB),HDD Size (MB)`r`n";
foreach ($VM in $VMs) {

$CPU = $VM | Get-VMProcessor
$Mem = $VM | Get-VMMemory
$HDDs = $VM | Select-Object VMId | Get-VHD | select path,filesize,size

foreach ($HDD in $HDDs) {
$Result += $env:computername+","+$VM.Name+","+$CPU.Count+","+$Mem.Minimum/1024/1024+","+$Mem.Maximum/1024/1024+","+$HDD.path+","+$HDD.filesize/1024/1024+","+$HDD.size/1024/1024+"`r`n";
};
};
$Result | Out-File -filepath "$env:computername VMs.txt"

2018-12-06

利用 Firebase Javascript PHP 做訊息推播


利用 Firebase Javascript PHP 做訊息推播

以下為簡單 Code
測試環境為 Apache with Let's Encrypt SSL 網站,不確定沒 SSL 能不能運作

*. 還在研究怎麼對離線 Device 補傳訊息(應該有這個方法)



首先到 Firebase 網站 https://console.firebase.google.com/ 新增專案
專案名稱自取,建立好之後點選【專案設定】


中下方點擊: 【將 Firebase 加入您的網路應用程式】

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"