ChrisV85 Ответов: 1

Вывод в 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]);
        }
    }
}

1 Ответов

Рейтинг:
2

ChrisV85

Пришлось использовать сплит в

3Result=ping $S3Path $Local