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"


2018-07-20

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

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

採用的版本是 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 是縮圖也不要

2018-07-03

Microsoft Storage Pool 建立 Virtual Disk 容量異常的問題

利用一些不同容量的 硬碟 + Storage 組成一個 Storage Pool 的時候遇到了問題
所有容量合計有 54.5 TB , 但是在建立 Virtual Disk 的時候只能建立一個 6.80 TB 的 Disk
如果把這個 6.80 TB 的 Disk 建立後, 又可以建立一個 33 TB 的 Disk
但怎麼樣都無法建立一個 54.5 TB 的 Disk

這個問題在初期建立 Thin Disk 的時候造成一些問題

因為 Thin Disk 我選了最大容量 54.5 TB
但在實際儲存容量使用達到 6.8 TB 的時候就再也無法寫入
如果在 CMD 下面 Copy 檔案, 會顯示 Insufficient disk space

在 Event Log 中有以下錯誤



2018-06-27

Exchange Auth Login Failed Ban Powershell Script

Exchange 是公開對外服務
難免遭受 Try 帳號的攻擊, 除了 IPS 設備以外
窮人也可以透過查詢 Transport Role Log 的方式將驗證失敗紀錄中的來源 IP 加到 Windows Advanced Firewall 來進行阻擋
因 PowerShell 版本差異, 舊版 OS 有些 cmdlet 不能用
故根據作業系統版本分別寫了兩個不同的 Script

程式尚有許多未盡之處, 比如只查最後一個 Log File 的最後多少行
不是按照時間來查詢, 可能會有遺漏或重複的情況, 不過暫時先這樣用吧!


讓 Windows 工作列的時間顯示秒

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"ShowSecondsInSystemClock"=dword:00000001

2018-06-23

しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-7 しりちゃん 命令功能

しりちゃん 命令功能

しりちゃん加入群組後, 首先我們用 set:check 檢查初始設定



しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-6 邀請 しりちゃん 加入群組 (防護機器人追加)

邀請 しりちゃん 加入群組 (防護機器人追加)

  1. しりちゃん 的作者確認收到禮物卡後會透過 SiriRegiCenter 傳送訊息給註冊的 Line 帳號



しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-5 登錄 しりちゃん招待券

登錄 しりちゃん招待券

  1. 接下來回到步驟 3, 【招待券購入】的部份, 剛剛開啟的招待券購買狀態管理頁面如果已經失效了的話再對 SiriRegiCenter 送出「Siri:招待券購入」或「Siri:BuyInvitationTicket」訊息取得網頁就好了



しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-4 購買 Amazon JP 禮物卡

購買 Amazon JP 禮物卡

  1. 到 Amazon JP 網站後點選上排 Menu 中間的 ギフト券



しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-3 招待券購入

招待券購入

  1. 對 SiriRegiCenter 送出「Siri:招待券購入」或「Siri:BuyInvitationTicket」訊息
    若還沒有連接 Twitter 帳號的話, SiriRegiCenter 會告訴你必須先進行連接



しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-2 連接 Twitter 帳號

連接 Twitter 帳號

  1. 對 SiriRegiCenter 送出「Siri:Twitter紐付け」或「Siri:LinkWithTwitter」訊息SiriRegiCenter 會回應一個【允許應用程式存取 Twitter 帳號】的授權網址

    *. 這裡請特別注意, 由於這個網址只能【開一次】! 所以請先用您的預設瀏覽器連上 Twitter 並登入好帳號準備。若還沒登入帳號,或登入帳號的不是你的預設瀏覽器,則這個連結點下去後會失敗, 就要再等一個小時才能再進行一次 Twitter 帳號連結了。



しりちゃん Line ボット 防翻群機器人 Siri-Chan 教學-1 準備工作與 しりちゃん使用登錄

開始之前:

  • 準備好 Twitter 帳號, 並且使用預設的瀏覽器登入等待
  • 註冊好 Amazon JP 帳號, 並準備好一張有效期限內的信用卡
  • Line 帳號必須設定 Line ID, しりちゃん才能辨認

按部就班:

  1. しりちゃん使用登錄
  2. 連接 Twitter 帳號
  3. 招待券購入
  4. 購買 Amazon JP 禮物卡
  5. 登錄 しりちゃん招待券
  6. 邀請 しりちゃん 加入群組 (防護機器人追加)
  7. しりちゃん 命令功能

2018-05-18

2018-05-15

HP / HPE Smart Storage Administrator 的 RAID 監控

HP 的 SmartArray 有提供 HPE Smart Storage Administrator 工具
但是不知為什麼長久以來都沒有提供故障警示 E-mail 功能 (或是有我沒找到, 不然就是要錢 $$)
不過 HP 有提供 Cli 程式可以用 Command 來取得 RAID 狀態
(HPE Smart Storage Administrator (HPE SSA) CLI for Windows)

有 CLI 模式的程式可以用
就可以再用 PowerShell 透過這支程式來取得 RAID 狀態並判斷 State, 若異常則發出告警 Email
我另外有寫一篇 IRST (Intel Rapid Storage Technology) 在 Server Core 模式下的 RAID 監控 與這篇類似

程式如下:

$EmailFrom = "RAIDNotifier <RAIDNotifier@contoso.com>"
$EmailTo = @()
$EmailTo += "Admin <Admin@contoso.com>"
$EmailSubject = "$ENV:ComputerName RAID Warning"
$SMTPServer = "10.10.10.10"

2018-05-14

Media Player Classic Home Cinema 變更播放速度時播放聲調不變之設定

Media Player Classic Home Cinema 變更播放速度時播放聲調不變之設定

View (檢視)-> Options (設定選項) ->

Left Pannel (左方項目頁籤):
Playback (撥放器)
Right Pannel (右方設定項目):
Control (控制) -> Speed step (速度步進)-> Change to (變更為) 10 %

Left Pannel (左方項目頁籤):
Playback (撥放器) -> Output (輸出)
Right Pannel (右方設定項目):
Audio Renderer (音訊譜製器)-> Change to (變更為) 10: Internal Audio Renderer

2018-05-03

IRST (Intel Rapid Storage Technology) 在 Server Core 模式下的 RAID 監控

IRST (Intel Rapid Storage Technology) 在 Server Core 模式下不能安裝 Management Tools
只有 CLI 模式的程式可以用
只好用 PowerShell 透過這支程式來取得 RAID 狀態並判斷 State, 若異常則發出告警 Email
我另外有寫一篇 HP / HPE Smart Storage Administrator 的 RAID 監控 與這篇類似

程式如下:

$EmailFrom = "RAIDNotifier <RAIDNotifier@contoso.com>"
$EmailTo = @()
$EmailTo += "Admin <Admin@contoso.com>"
$EmailSubject = "$ENV:ComputerName RAID Warning"
$SMTPServer = "10.10.10.10"

利用 PowerShell 刪除某路徑底下 14 天以前的檔案與資料夾 (過期檔案與資料夾)

寫過一篇 用批次檔 (Batch) 刪除指定天數之前 (過期) 所有子目錄及檔案

以下改用 PowerShell 處理, 邏輯:

1. 找出過期檔案予以刪除
2. 找出過期的空資料夾予以刪除 (從最深層的子目錄開始往上一層一層檢查)

不知道是否需要寫得這麼複雜就是了

2018-03-30

How to Kill a Hanging Hyper-V VM


$VMName = Read-Host "Enter VM Name"

$VM = $(Get-VM | where {$_.Name -eq "test"} | select-object  -ExpandProperty VMId).Guid
if ($VM.Count -ne 1) {
write-host "Not Found"
} else {
$ProcessId = $(Get-WmiObject win32_process -Filter "name like '%vmwp%'" | where {$_.CommandLine -like "*$($VM)*"} | select ProcessId).ProcessId
$ForceKill = Read-Host "Found ProcessID: $ProcessId, Force Kill? (Y/N)"
if ($ForceKill -eq "y" -or $ForceKill -eq "Y") {
Stop-Process $ProcessId -Force
}
}

2018-03-23

Windows 10 變更預設瀏覽器小程式 Change Default Browser

因為不知名的原因, Windows 10 的環境下點擊 Outlook 信件中的超連結時
出現了這個很冏的視窗


哪裡冏呢? 他沒有提供 IE 或 Chrome 或任何已經安裝好的瀏覽器給人選
一定要自己去 [設定] 裡面選才行
而這個問題不是單一事件, 有許多人都遇到了

2018-03-22

Client 連接 RDS 時出現 [無法執行憑證的撤銷檢查] 錯誤

遇到一個奇怪的問題
某幾台 Windows 7 在連接 RDS (Remote Desktop Service) 的時候
不知何故會出現下圖:

錯誤為: 無法執行憑證的撤銷檢查

英文為: A revocation check could not be performed for the certificate



憑證撤銷清單是以 http Web 的方式提供, 其他 Client 完全正常
且這台有問題的 Windows 7 也確認可以用 Browser 正確取得憑證撤銷清單


2018-03-15

Reset Remote Desktop Service Grace Period

有時候我們必須測試 Remote Desktop Service
但是測試階段老闆可能不會答應你買 Terminal License
必須要測試出成果確認可行後, 寫一篇文情並茂的建議案附上測試成果老闆才會勉強點頭
微軟很佛心的提供 120 天的 Remote Desktop Service License 緩衝期
在 120 天之內除了會在狀態列跳訊息出來罵你提醒你以外, 都讓你隨便用
但是到 120 天後就會禁止登入, 只有 Local Administrator 能用 Console 登入了

但是往往我們在測試初期架設就花掉一、兩個月
Pilot Run 又花了一個月才完成教學
接著種子們又以工作很忙為由拖拖拉拉 (你也不好意思催促)
結果過了 120 天又要重頭安裝一次, 真是練習的好機會麻煩

其實可以經由修改註冊機碼來延長這個 120 天期限, 辦法如下:

先將註冊機碼 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod 的 Owner 及 Permission 修改為 Local Administrators

2018-03-13

VBScript String Encode / Decode

VBScript String Encode / Decode
出處 https://stackoverflow.com/questions/496751/base64-encode-string-in-vbscript

有時候有文字傳遞的需求, 但卻又無法直接傳遞中文字 (編碼問題)
此時先將文字轉換成 Base64 編碼, 傳遞後再 Decode 是最好的辦法
只需要帶入一些函式即可簡單處理

' Base64-encode: from UTF-8-encoded bytes.
Word1 = Base64Encode("Word1", False)

' Base64-encode: from UTF-16 LE-encoded bytes.
Word2 = Base64Encode("Word2", True)

' Base64-decode: back to a VBScript string via UTF-8.
Word3 = ConvertFromUTF8(Base64Decode(Word1, False))

' Base64-decode: back to a VBScript string via UTF-16 LE.
Word4 = ConvertFromUTF8(Base64Decode(Word2, True))

wscript.echo Word1 & vbcrlf & Word2 & vbcrlf & Word3 & vbcrlf & Word4

Symantec Definition Auto Downloader VBScript for SEPM

如果是在暗網 (Dark Network) 裡面使用 Symantec Endpoint Protection 的話
可能沒辦法透過全自動 Internet Update 來更新病毒碼
還好 Symantec 有提供了手動下載病毒碼並放到特定路徑讓 SEPM 自己去更新的辦法
但如果要人工下載實在太麻煩又會忘記
於是寫了一個簡單的 VBScript 來下載

因為不熟悉 VBS 連接 FTP 的語法
找不到怎麼取得檔案日期時間以便比對出最新的一個來下載
所幸 Symantec 的檔名應該是按照 Hex 版本號來命名
所以比對檔名也可以取得最後一個最新的病毒定義檔

該下載哪個版本的病毒定義檔要 到這裡來確認
改前面兩個參數指定下載來源與目的就可以了
如果未來 Symantec 有任何異動, 就自己改一下吧

2018-01-19

WSUS Windows Update Auto Approve after One Month 延後一個月自動核准

WSUS 沒有內建延遲 Approve 的功能
但是微軟釋出的更新常常會出包, 有的隔天就回收, 有的兩周內回收, 再釋出新版
為了避免中招當白老鼠, MS 的建議是要建立測試環境然後手動 Approve
問題是有多少公司企業有這種美國時間跟人力呢?

不要在更新一發佈就立刻 Auto Approve 我覺得是權宜之計
但還是無法完全避免 Update 與應用程式發生相容性問題
若要做到延遲 Approve 就會需要用到 PowerShell 了
首先 WSUS 不要設定 Auto Approve
然後參考以下 Script 每天執行就好了 (可以附帶執行 Clean Up , 參考這篇)

*. 紅字部分的判斷可加可不加, Malicious Software Removal Tool 在被取代後並不會立刻 Superseded