2024年2月14日 星期三

PowerShell 從網址下載檔案的所有方法

PowerShell 從網址下載檔案的所有方法


驗證網址是否有效

在下載前要先確認網址是否有效,比較簡易有效率的方法試直接驗Head就行,邏輯簡單但可能會有不適用情況,再自行調整。

# 檢查鏈接是否有效
function Test-URI {
    param (
        [Parameter(Mandatory)]
        [string] $Uri
    )
    try {
        # 嘗試發送 HEAD 請求
        $response = Invoke-WebRequest -Uri $Uri -Method Head -TimeoutSec 10
        # 檢查 HTTP 狀態碼是否為 200
        if ($response -and $response.StatusCode -eq 200) {
            return $true
        } else {
            # Write-Warning "Received HTTP status code $($response.StatusCode). The link might not be valid."
            return $false
        }
    } catch {
        # Write-Warning "Error checking the link: $_"
        return $null
    }
}

用例

$link = 'https://www.google.com/'
if (!(Test-URI $link)) {
    Write-Error "The link might not be valid" -ErrorAction Stop
} else { Write-Host $link -ForegroundColor DarkGray }




下載指令

這裡有好幾個指令大概簡單介紹一下,自己挑一個合適的用


方法1 .Net 方法

最建議使用的方法
事實上有許多大型專案的教學安裝時用指令就是這個

(New-Object Net.WebClient).DownloadFile($Url, $DLPath)


方法2 Start-BitsTransfer 方法

這個載起來也比 Invoke-WebRequest 好上一些,有個優點是可以續傳
不過只能在 Windwos 下使用並且如果系統本身沒啟用該服務也會無法使用

Start-BitsTransfer -Source $Url -Destination $DLPath


方法3 Invoke-WebRequest 方法

這個其實更適合用來載純文字的網址,主要是用來查網頁Headder之類的

其他還有好幾個別名可以用

  • curl -> Invoke-WebRequest
  • iwr -> Invoke-WebRequest
  • wget -> Invoke-WebRequest
Invoke-WebRequest -Uri $Url -OutFile $DLPath



2024年2月11日 星期日

Onedrive突然變成全亂碼 奇怪的語言

Onedrive突然變成全亂碼 奇怪的語言

之前幫朋友處理過突然他的 Onedrive 變成奇怪的語言,但仔細看又好像不是語言是亂碼



測試過用線上網頁看是正常的,並不是設置到語言

最後是重新安裝了 Onedrive 解決掉的
https://www.microsoft.com/zh-hk/microsoft-365/onedrive/download

移除的話直接到新增移除程式把 Onedrive 刪除即可,重裝就可以復原了

2024年2月4日 星期日

[Win10/11] 如何新增 修復磁碟分割區 (RE分區)

[Win10/11] 如何新增 修復磁碟分割區 (RE分區)

繼上一篇刪除的,這篇來說明如何新增
https://charlottehong.blogspot.com/2022/06/win1011-re.html

以下代碼要使用管理員模式打開 PowerShell 後執行
有個比較快捷的方式是對著開始按右鍵然後選擇 終端機(系統管理員) 打開


新增修復分區

這邊直接提供寫好的程式,能簡易的追加出修復分區


New-RecoveryPartition 各項參數的意義
-Size
要追加的修復分區的大小

-CompressDriveLetter
從哪個磁碟壓縮容量 (預設C)

-RestartRecovery
追加完後嘗試啟用RE系統


PowerShell 管理員權限執行

irm bit.ly/EditRecovery|iex; New-RecoveryPartition -Size 1024MB -RestartRecovery

執行完畢會自行從C槽壓縮出1024MB做成RE分區








失敗的處置

如果分區建立與啟用都成功但卻被映射到C槽,執行這個重新映射看看

irm bit.ly/EditRecovery|iex; Set-RecoveryStatus -Status ReMapping


如果是啟用失敗有可能是丟失RE映像檔了,參考這邊有檔案可以補




[圖文] OpenCV 4.9.0 安裝配置在Win11 Visual Studio 2022

[圖文] OpenCV 4.9.0 安裝配置在 Visual Studio 2022

-



安裝 OpenCV 與文件說明

先到官方下載這兩項軟體 (點擊有連結)
https://opencv.org/releases/



打開之後即可安裝,把他指定到C槽



會用到的路徑有這下面這些

  1. 執行檔目錄

    C:\opencv\build\x64\vc16\bin
  2. 包含目錄

    C:\opencv\build\include
  3. 程式庫目錄

    C:\opencv\build\x64\vc16\lib
  4. 程式庫檔案

    opencv_world490d.lib (Debug Mode)
    opencv_world490.lib (Release Mode)



設定環境變數

打開設定,並依照下圖打開進階系統設定

系統 → 系統資訊 (截圖少點開"系統資訊"的步驟,這個在最下方)



然後在環境變數 Path 中追加這個路徑

C:\opencv\build\x64\vc16\bin


再來依序按"確定"把所有視窗關閉,這邊的步驟電腦設置一次即可。



設置 OpenCV 專案

再來打開 Visual Studio 2022 建立新的專案



選擇空白專案



專案名稱隨意預設即可



建立好專案之後先建立好空的 cpp 檔案



檔名隨意這邊是取 OpenCVTest.cpp



然後對著專案按右鍵屬性



設置包含目錄

C:\opencv\build\include



設置程式庫目錄

C:\opencv\build\x64\vc16\lib



設置程式庫檔案 (沒有d結尾的檔案是Release模式用的)

opencv_world490d.lib



到這邊針對這個專案就設置好了,這邊的設定更換專案的話還得再來一次



測試 OpenCV 執行結果

在剛剛創建的空檔案貼上下面的代碼

/*****************************************************************************
Name :
Date : 2016/05/29
By   : CharlotteHonG
Final: 2016/05/29
*****************************************************************************/
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char const* argv[]) {
    /* 畫布 */
    Mat img(270, 720, CV_8UC3, Scalar(56, 50, 38));
    /* 直線 */
    line(img, Point(20, 40), Point(120, 140), Scalar(255, 0, 0), 3);
    /* 實心方塊 */
    rectangle(img, Point(150, 40), Point(250, 140), Scalar(0, 0, 255), -1);
    /* 實心圓 */
    circle(img, Point(330, 90), 50, Scalar(0, 255, 0), -1);
    /* 空心橢圓 */
    ellipse(img, Point(460, 90), Size(60, 40), 45, 0, 360, Scalar(255, 255, 0), 2);
    /* 不規則圖形 */
    Point points[1][5];
    int x = 40, y = 540;
    points[0][0] = Point(0 + y, 50 + x);
    points[0][1] = Point(40 + y, 0 + x);
    points[0][2] = Point(110 + y, 35 + x);
    points[0][3] = Point(74 + y, 76 + x);
    points[0][4] = Point(28 + y, 96 + x);
    const Point* ppt[1] = { points[0] };
    int npt[] = { 5 };
    polylines(img, ppt, npt, 1, 1, Scalar(0, 255, 255), 3);
    /* 繪出文字 */
    putText(img, "Test Passed !!", Point(10, 230), 0, 3, Scalar(255, 170, 130), 3);
    /* 開啟畫布 */
    namedWindow("OpenCV Test By:Charlotte.HonG", WINDOW_AUTOSIZE);
    imshow("OpenCV Test By:Charlotte.HonG", img);
    waitKey(0);
    return 0;
}


然後按下 F5 執行或是上方的 本機偵錯工具 執行該代碼



執行後如果看到這圖就表示成功了



好了,就此就完成了