2021-06-06

Shrink Azure VM OS Disk 縮小 Azure 上 VM 的 OS Disk 大小

 Azure 上面起一個 Windows VM 的 OS Disk 預設是 127GB

但通常用不到那麼大卻要負擔那麼多的租金
在以下網址找到可以縮小 OS Disk 的 PowerShell Script

https://github.com/jrudlin/Azure/blob/master/General/Shrink-AzDisk.ps1

需要注意 Script 的預設情況 Disk 是 沒有設置 Available Zone 
以下 Script 已經將 Disk 的 Available Zone 加入避免錯誤

2021-06-05

Windows Server 2019 NPS RADIUS 驗證失敗的問題

Windows Server 2019 的 NPS 有 RADIUS Server 服務設定
但即使完成了正確的設定,RADIUS Client 仍然無法正確取得驗證
如果此時將 Firewall 關閉則可以正確驗證
顯然問題出在防火牆上

解決辦法下一行 PowerShell 指令即可

Get-NetFirewallRule -DisplayGroup "Network Policy Server" | where DisplayName -like "*RADIUS*" | Set-NetFirewallRule -Service Any

Reference: https://social.technet.microsoft.com/Forums/en-US/0bf054af-eebe-4a2b-a07b-ccab174b234f/server-2019-radius-blocked-by-defender-firewall

2021-06-01

PowerShell 取得兩個字串中間的字串 Get SubString Between 2 Strings

$String = 'SString1T<String2>';

$Find = [Regex]::Matches($String, "(?<=S).+?(?=T)");
for($i = 0; $i -lt $Find.Count; $i++) {
    $Find[$i].Value;
};

$Find = [Regex]::Matches($String, "(?<=\<).+?(?=\>)");
for($i = 0; $i -lt $Find.Count; $i++) {
    $Find[$i].Value;
};

PowerShell Invoke-WebRequest 出現錯誤: The server committed a protocol violation. Section=ResponseStatusLine

又踩到雷啦!

用 PowerShell Invoke-WebRequest 向某個網站發出 Request 的時候出現錯誤:

The server committed a protocol violation. Section=ResponseStatusLine


解決辦法:

在 Invoke-WebRequest 之前先執行以下 Script:

2021-05-31

PowerShell Invoke-WebRequest 編碼問題 (Bug5 內容) (Big5)

這年頭還在用 Bug5 (Big5) 編碼提供資料的網站都該下十八層地獄
以下只能正確讀取 Bug5 編碼的網頁,不是 Bug5 to UTF-8 轉換編碼

$URL = 'Somewhere in hell';

$BIG5 = [System.Text.Encoding]::GetEncoding(950)
$UTF8 = [System.Text.Encoding]::GetEncoding(65001)
$ISO88591 = [System.Text.Encoding]::GetEncoding(28591) #ISO 8859-1 ,Latin-1

[System.IO.File]::WriteAllText(('C:\Temp\SomeData.txt'), ($BIG5.GetString(([System.Text.Encoding]::Convert($UTF8,$ISO88591,($UTF8.GetBytes((Invoke-RestMethod -Uri $URL))))))), $BIG5);


Powershell Out-File 預設編碼 UCS-2 LE BOM 問題 (改成 UTF-8)

PowerShell 中最單純的 Out-File 指令建立出來的文字檔預設是沒見過的 UCS-2 LE BOM
為了處理這個問題要改成以下寫法:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False;
[System.IO.File]::WriteAllLines(('C:\Temp\Test.txt'), (Get-Date), $Utf8NoBomEncoding);

其中 WriteAllLines
第一個參數是路徑+檔名
第二個參數是要寫入的內容
第三個參數是叫他用 UTF-8 with No BOM 編碼

2021-05-19

用 PowerShell 取得自己的 Public IP

  • 取得自己的 Public IP

    (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content

  • 取得包括 Public IP 以及地理位置、電信商等資訊

    Invoke-RestMethod -Uri ('http://ipinfo.io/'+(Invoke-WebRequest -uri "http://ifconfig.me/ip").Content)

如果執行時發生以下錯誤:

Invoke-WebRequest : The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.


2021-05-18

用 PowerShell 判斷時間區間後執行 batch

C:\Command\Run.bat

-----------------------------------------------------------------------------------------------
C:
cd "C:\Command\"
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" -command ". 'C:\Command\Run.ps1';"
-----------------------------------------------------------------------------------------------

C:\Command\Run.ps1
-----------------------------------------------------------------------------------------------
$Min = Get-Date '14:00';
$Max = Get-Date '17:30';
$URL = 'https://www.google.com';

$Now = Get-Date;

if (($Min.TimeOfDay -le $Now.TimeOfDay) -and ($Max.TimeOfDay -ge $Now.TimeOfDay)) {
Start-Process -FilePath "C:\windows\system32\cmd.exe" -Wait -UseNewEnvironment;
Invoke-WebRequest -URI $URL -OutFile "URL.txt";
};
-----------------------------------------------------------------------------------------------

2021-02-22

取得 PowerShell 執行 .ps1 的自身路徑與 pid

注意這是執行 .ps1 的時候用的指令,普通開 PowerShell 視窗用 Get-Location

$MyInvocation.MyCommand (PowerShell 系統保留變數)

($MyInvocation.MyCommand).Path

$pid (PowerShell 系統保留變數)

寫入一個與 .ps1 主檔名相同、副檔名為 pid、內容為 pid 的檔案

2021-02-09

處理 Windows 10 / 2019 預設視窗邊界很難分辨的問題

不知道別人的情況如何
但我根本分辨不出來上層這個視窗的邊界在哪裡
所以無法辨別滑鼠游標要在哪裡按才能拖曳視窗

問題是,修改視窗標題、邊框顏色等功能又要先啟動作業系統後才能修改
微軟這真是莫名其妙、喪心病狂的設定...
只好出動註冊機碼來處理這件事