Я пробовал обе стандартные PS1, используя то, что я читал об использовании:
ECHO y | plink .....
Но проблема в том, что plink сохраняется на сетевом диске. Я могу назвать это, используя:
$plink = "P:\path\plink.exe"
echo y | &$plink -ssh -l user-pw password $addrss exit
&$plink -ssh -l user -pw password -m "P:\path\SCOTDiagScript.txt" $addrss
У меня проблема в том, что если я запускаю plink вручную через cmd, я получаю вывод, который мне нужно прочитать и, возможно, отобразить пользователю. Передача последней строки в Out-File ничего мне не дает, и если я попытаюсь вызвать cmd, чтобы затем перенаправить в txt-файл, я получаю сообщение об ошибке, потому что в пути для plink есть пробел; и я использую кавычки.
Я также попробовал использовать .NET, но выполнение .StandardOutput.ReadToEnd() приводит к зависанию; может тупик? Несмотря на то, что я размещаю его задолго до выхода, и я немного сплю, прежде чем произойдет какой-либо выход:
$ps = New-Object -TypeName System.Diagnostics.Process
$ps.StartInfo.UseShellExecute = $false
$ps.StartInfo.RedirectStandardInput = $true
$ps.StartInfo.RedirectStandardOutput = $true;
$ps.StartInfo.FileName = "P:\path\plink.exe"
$ps.StartInfo.Arguments = "-ssh -l user -pw password $addrss"
[void]$ps.Start()
Start-Sleep -m 500
$ps.StandardInput.Write("cd c:/scot/bin`r")
Start-Sleep -m 500
$ps.StandardInput.Write("GetDiagFiles.exe`r")
Start-Sleep -m 500
$ps.StandardInput.Write("cd c:/temp`r")
Start-Sleep -m 500
$ps.StandardInput.Write("ls *.zip`r")
Start-Sleep -m 500
$ps.StandardInput.Write("cd c:/scot/monitor`r")
$Out = $ps.StandardOutput.ReadToEnd();
Start-Sleep -s 10
$ps.StandardInput.Write("exit`r")
$PlinkStreamWriter.Close();
if (!$ps.HasExited) { $ps.Kill() }
$Out
Я уверен, что делаю что-то не так, но я перерыл все в MSDN и ничего.
.exeс использованием команд *nix (ls) необычна. Работает ли последовательность команд, если вы набираете ее вручную в терминале SSH (PuTTY)? - person Martin Prikryl   schedule 26.05.2015