试图在Powershell控制台中生成文本(结果是预先确定的),由于不断闪烁,所以不喜欢cls + Write-Host,尝试使用PSConsoleReadLine。下面的代码在某些情况下有效,而在其他情况下则无效。
代码在以下情况下有效:
直接复制粘贴到Powershell窗口中
存储在脚本文件中并从Powershell窗口调用该文件时
在以下情况下代码不起作用
:在ISE中推出(已知问题)
右键单击脚本文件/使用powershell运行
试图通过Add-Type解决该错误,但是它以IOException和null引用结尾。出现在下面的代码中,但已注释。
试图以一种在新的Powershell流程中重新启动自身来处理该脚本的方式编写脚本,没有帮助。
代码本身(可能可以用一行代码来重现该问题,但指南说一行代码是不够的):
function tryOne($oldExpression, $targetExpression, $currentPosition, $src)
{
While($targetExpression[$currentPosition] -cne $triedCharacter)
{
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()#here problem
$triedCharacter = Get-Random -InputObject $src
$expression = $oldExpression + $triedCharacter
[Microsoft.PowerShell.PSConsoleReadLine]::Insert($expression)#here problem
Start-sleep -Milliseconds 50
}
Return $expression
}
cd $PSScriptRoot
#Add-Type -path "C:\Program Files\WindowsPowerShell\Modules\PSReadline\1.2\Microsoft.PowerShell.PSReadLine.dll"
#above helps with not found error, with it uncommented the errors at RevertLine and Insert are IOException and null reference
$targetExpression = "Not ideal"
$oldExpression = ""
$currentPosition = 0
#region AllowedCharacters
$src = New-Object System.Collections.ArrayList
for($i=65;$i-le 90;$i++)
{
$src.Add([char]$i) | Out-Null
}
for($i=97;$i-le 122;$i++)
{
$src.Add([char]$i) | Out-Null
}
for($i=0;$i-le 9;$i++)
{
$src.Add($i) | Out-Null
}
$src.Add(" ") | Out-Null #allowed characters in the target sentence - A-Z, a-z, 0-9, space
#endregion
While($currentPosition -lt ($targetExpression.length))
{
$oldExpression = tryOne $oldExpression $targetExpression $currentPosition $src
$currentPosition++;
}
我希望能够通过右键单击/使用Powershell运行来启动脚本。