如何僅利用 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
}
}
如此一來就可以透過該函式來判定要不要做換行代碼的轉換了
沒有留言:
張貼留言