簡體   English   中英

Powershell plink telnet 命令輸出到 var

[英]Powershell plink telnet command output into var

我正在嘗試使用 powershell 和 plink 為某些 telnet/ssh 命令執行編寫腳本(基於一些互聯網示例)。 但是我想實現的主要功能是將此命令的輸出捕獲到變量或文本文件中。 如何攔截特定命令的輸出?

例如:當我發送“get-status”命令時,它返回“Status is 01 02 03”。 我可以將此字符串分配給 var 或文本文件嗎? 也許,只有“01 02 03”沒有“狀態”文本?

$ps = New-Object -TypeName System.Diagnostics.Process
$ps.StartInfo.UseShellExecute = $false
$ps.StartInfo.RedirectStandardInput = $true
$ps.StartInfo.FileName = "plink"
$ps.StartInfo.Arguments = "-telnet XXX.XXX.XXX.XXX"

[void]$ps.Start() 

$PlinkStreamWriter = $ps.StandardInput

Start-Sleep -m 500
$PlinkStreamWriter.Write("login`r")
Start-Sleep -m 500
$PlinkStreamWriter.Write("password`r")
Start-Sleep -m 500
$PlinkStreamWriter.Write("get-status")
Start-Sleep -m 500

Write-Host "Status string: " .....

$PlinkStreamWriter.Write("exit`r")
$PlinkStreamWriter.Close();
if (!$ps.HasExited) { $ps.Kill() }

如果我正確理解您的意見,那么在您發送

$PlinkStreamWriter.Write("get-status")

你收到

Status is 01 02 03

如果這是一致的,並且您想將此值分配給變量,則只需在命令開頭定義變量:

$result =  $PlinkStreamWriter.Write("get-status")

現在,如果要從$ result中存儲的值中刪除“狀態為”:

$result = $result -replace "Status is ",""

現在,$ result僅包含"01 02 03"

現在,您可以更新您的write-host命令:

Write-Host "Status string: $result"

只需要一個簡單的重定向 (>)。 我在 Powershell v5.1.22000.282 中驗證了這對我有用。 這是我對任何需要它的人的方法。

$filepath = "$PSScriptRoot"
$PUTTY="$Env:ProgramFiles\\PuTTY\\plink.exe"

@"
vncserver -geometry 1920x1080
出口
"@| & $PUTTY -ssh $IP -l $USER -pw $PW > "$filepath/out.txt"

這可能有用,您可以將錯誤消息和警告消息的輸出重定向到標准輸出中。 例:

調用表達式“ cmd / c'C:\\ Program Files(x86)\\ PuTTY \\ plink.exe'$ plinkcmd 4>&1 3>&1 2>&1”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM