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";
};
-----------------------------------------------------------------------------------------------