У меня есть интерактивная PowerShell с использованием оконных форм, что означает, что скрипт PowerShell отображает некоторые элементы управления в форме, запрашивающей ввод, и, наконец, запускает robocopy
, когда пользователь нажимает кнопку.write robocopy output to console and log file
Это простой сценарий, отображающий проблему. Вы можете скопировать код, сохранить его в сценарий Power Sell и запустить. Для успешного запуска нужна папка: \ tmp \ tmp, см. Функцию CopyFolder.
function createdMainForm {
$mainForm = New-Object System.Windows.Forms.Form
$btn = New-Object System.Windows.Forms.Button
$btn.Text = "RoboCopy"
#register click event
$btn.add_click({Add_click})
$mainForm.Controls.Add($btn)
$mainForm.ShowDialog()
}
#click event
function Add_click() {
CopyFolder
}
function CopyFolder() {
$sourseFolder = "C:\tmp\tmp"
$targetFolder = "C:\tmp\tmp2"
$Logfile = "c:\tmp\a.log"
robocopy $sourseFolder $targetFolder /tee /log:$Logfile
}
function ReadMode() {
Write-Host Mode [1 for GUI mode]
$mode = Read-Host
if ($mode -eq 1) {
createdMainForm
} else {
CopyFolder
}
}
ReadMode
Я хочу, чтобы захватить robocopy
прогресс в лог-файл, а также в консоли.
Однако только файл журнала фиксирует вывод, а консоль «висит» до конца.
Я обнаружил, что работает плавно, когда PowerShell не отображает форму, а просто запускает команду. Сценарий работает в двух режимах. введите 1 для «режима формы» что-нибудь еще для консольного режима, где журнал фактически записан в консоль и файл.
Как я могу использовать форму и отображать прогресс в консоли?
выполнить Robocopy на фоне работы, а также получать данные в конце концов, таким образом, форма не будет замораживать, а также вы можете использовать таймер для проверки определенных интервалов, выполнит ли задание, а затем получит данные. – Avshalom
Трудно что-то предложить, не видя ваш код. В настоящее время это звучит так, как будто вы хотите писать в трубопровод из обработчика событий окна GUI. Это то, что вы пытаетесь сделать? – PetSerAl
PetSerAI, да, вы правы. добавлен код в вопрос. – OJNSim