Вывод в powershell
добрый день,
Мне нужно использовать команду AWS s3 ls и автоматически выводить ее в текстовое поле, а не выполнять при нажатии кнопки. Как я могу это сделать?
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $Form = New-Object System.Windows.Forms.Form $Form.Size = New-Object System.Drawing.Size(600,400) ############################################## Start functions function s3Info { $s3Result= aws s3 ls | fl | out-string; $outputBox.text=$s3Result } #end s3Info ############################################## end functions ############################################## Start text fields $outputBox = New-Object System.Windows.Forms.TextBox $outputBox.Location = New-Object System.Drawing.Size(10,150) $outputBox.Size = New-Object System.Drawing.Size(565,200) $outputBox.MultiLine = $True $outputBox.ScrollBars = "Vertical" $Form.Controls.Add($outputBox) ############################################## end text fields ############################################## Start buttons $Button = New-Object System.Windows.Forms.Button $Button.Location = New-Object System.Drawing.Size(400,30) $Button.Size = New-Object System.Drawing.Size(110,80) $Button.Text = "Ping" $Button.Add_Click({s3Info}) $Form.Controls.Add($Button) ############################################## end buttons $Form.Add_Shown({$Form.Activate()}) [void] $Form.ShowDialog()
Что я уже пробовал:
Я попытался удалить эту функцию и добавить только исходящую строку в outputBox. text без каких-либо положительных результатов.
Richard Deeming
Как насчёт:
$Form.Add_Load({s3Info})
ChrisV85
В каком разделе? Вы имеете в виду удалить информацию о кнопке и использовать $Form.Add_Load{s3Info})?
Richard Deeming
Как раз под $Form.Add_Shown(...)
линия. Если это сработает, вы должны быть в состоянии удалить $Button
линии.
ChrisV85
Нужно ли мне добавлять несколько $Form. add_Loads, если я добавлю несколько текстовых полей и функций для вызова для заполнения указанных полей?
Richard Deeming
Это, вероятно, было бы лучшим подходом.
ChrisV85
Спасибо, что у меня все получилось! У меня есть еще один вопрос.
Что я здесь делаю не так? поскольку он не передает только текстовую информацию из текстовых полей в функцию.
############################################## Начнет функционировать
функция синхронизации {
$Местные=$LocalPath.текст
$S3Bucket=$S3Path. text
$S3Result=ping $S3Path $Local | fl | out-string;
$wshell = New-Object-ComObject Wscript.Ракушка
$wshell.Всплывающее окно("$S3Result",0,"синхронизация выполнена",0х0)
} #end procInfo
############################################## конец функции
Richard Deeming
$S3Result=ping $S3Path $Local | fl | out-string;
Разве это не должно быть:
$S3Result=ping $S3Bucket $Local | fl | out-string;
(
$S3Bucket
вместо $S3Path
)
ChrisV85
Я исправил это, проблема, с которой я столкнулся, заключается в соединении двух, которые я использовал Ping в качестве примера. Команда должна быть передана по трубе следующим образом
(aws s3 sync s3:/ / bucketname / folder c:/Software) имя корзины и папки заполняются из соответствующих текстовых полей. Я использую ping в качестве примера для тестирования этой функции.
Richard Deeming
Я не знаком с командами AWS. Вы получаете ошибку?
ChrisV85
Он действует так, как если бы $S3Bucket и $Local не были соединены вместе с пробелом между ними. Он видит только $ S3Bucket, но не $Local.
Richard Deeming
Я не вижу причин, почему это не сработает.
Попробуйте создать и вызвать простое консольное приложение C#, чтобы повторить параметры командной строки, чтобы увидеть, делает ли Powershell что-то странное.
using System; static class Program { static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { Console.WriteLine("{0}> {1}", i, args[i]); } } }