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
})
我正在尝试为我的脚本创建一个 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
})