System.Windows.Forms.TextBox 不显示输出

System.Windows.Forms.TextBox not displaying output

我正在尝试为我的脚本创建一个 GUI,该 GUI 将删除目录中与特定名称匹配且早于设定时间段的特定文件,并在删除前显示假设情况。一切顺利,直到我尝试将输出放入文本框。输出在控制台中显示正常,但不会显示在文本框中。我已经将它缩小到我正在 运行ning 的命令,就好像我只是删除它并且 运行 'ping google.com' 它输出正常。请在下面找到我的代码:

$scanbutton.Location = '380,84'
$scanbutton.text = 'Scan Directory'
$scanbutton.height = 25
$scanbutton.Width = 100
$scanbutton.Add_Click({
    $result.Text = get-childitem $folderBrowser.SelectedPath -include "cat*.png" -force -recurse | where-object { (-not $_.PSIsContainer) -and ($_.LastWriteTime -lt (get-date).AddDays(-0)) } | remove-item -whatif
    #$result.Text = ping google.com
    $Form.Controls.Add($result)
})

有人知道这是为什么吗?我对这一切还很陌生,所以请保持友善。另外,如何让输出像在控制台中那样跟随新行?目前它只有一个长字符串(当我执行 ping 操作时)。如果您需要我提供任何其他信息,请告诉我。

提前谢谢你。 IC

如评论所述,Remove-Item cmdlet 不会 return 任何您可以在文本框中捕获为文本的内容。 -WhatIf 开关也没有,它像 Write-Host 一样被设计为不 return 任何东西,而是直接写入控制台。

对于您的情况,您可以在文本框中创建和写入您自己的信息。类似于:

$resultBox = [System.Windows.Forms.TextBox]::new()
# do the Location, Size and whatever it takes here

# make the textbox accept multiple lines of text
$resultBox.Multiline = $true

# add the control to the form after you have created it
# NOT inside the $scanbutton.Add_Click() event handler
$Form.Controls.Add($resultBox)

$scanbutton.Add_Click({
    # get a list of files to remove (just the FullNames)
    $filesToRemove = Get-ChildItem $folderBrowser.SelectedPath -Filter "cat*.png" -File -Force -Recurse | 
                     Where-Object { ($_.LastWriteTime -lt (Get-Date).AddDays(-60).Date) } | 
                     Select-Object -ExpandProperty FullName
                    
    # write the file FullNames in the textbox   
    $resultBox.Text = "Removing files:`r`n{0}" -f ($filesToRemove -join [environment]::NewLine)
    $filesToRemove | Remove-Item -WhatIf
})