2023年10月28日 星期六

如何僅利用 sftp 判斷對方是 unix 還是 win

如何僅利用 sftp 判斷對方是 unix 還是 win

繼前幾篇的轉換

CHG: 在BAT中如何做 Ascii 文本的變換 更換換行符號 (Linux -> Win)
CHG: 在BAT中如何做 Ascii 文本的變換 更換換行符號 (Win -> Linux)

這篇要來講如何判斷對方是不是 Unix 伺服器,從設計上來說其實 sftp 並不具備檢測對方伺服器的標準API,只能瞎猜看看了

這邊用的判斷方式是檢測對方根目錄有沒有 etc 文件的存在,雖然無法百分百完全判定
,不過在大多數情況下足夠了



判斷的代碼

測試是否為Unix

function Test-SftpIsUnix {
    param (
        $LoginInfo
    )
    # 檢視根目錄
    $output = 'ls /' | sftp -oBatchMode=yes $LoginInfo 2>&1
    # 檢查輸出中是否有特定目錄存在
    if ($LastExitCode -eq 0) {
        $dirName = '/etc'
        if (-not ($output -match $dirName)) {
            # Write-Host "$dirName 目錄不存在,可能不是 Linux 系统。"
            return $false
        } else {
            # Write-Host "$dirName 目錄存在,可能是 Linux 系统。"
            return $true
        }
    } else {
        # Write-Error "連接失敗或無法存取跟目錄" -ErrorAction Stop
        return $null
    }
}

如此一來就可以透過該函式來判定要不要做換行代碼的轉換了



沒有留言:

張貼留言