如何通过按Escape键来逃逸读取主机?

时间:2019-04-04 23:46:01

标签: powershell powershell-ise

只是想知道是否有可能通过按ESC键在while循环中对读取主机进行转义。

我尝试做一个do-else循环,但是它只会识别在读取主机之外的按钮按下。

这基本上就是我所拥有的

#Import Active Directory Module
Import-Module ActiveDirectory

#Get standard variables
$_Date=Get-Date -Format "MM/dd/yyyy"
$_Server=Read-Host "Enter the domain you want to search"

#Request credentials
$_Creds=Get-Credential

while($true){

    #Requests user input username
    $_Name=Read-Host "Enter account name you wish to disable"

    #rest of code
    }

如果我想更改域名,我希望能够对其进行转义

2 个答案:

答案 0 :(得分:1)

无法使用Read-Host来执行此操作,但是您可以考虑使用图形输入对话框,而不是在控制台中进行提示。毕竟,Get-Credential cmdlet还会显示一个GUI。

如果这是您的选择,则可以使用以下方法完成此操作:

function Show-InputBox {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true, Position = 0)]
        [string]$Message, 

        [string]$Title = [System.IO.Path]::GetFileNameWithoutExtension($MyInvocation.PSCommandPath),

        [string]$defaultText = ''
    )
    Add-Type -AssemblyName 'Microsoft.VisualBasic'
    return [Microsoft.VisualBasic.Interaction]::InputBox($Message, $Title, $defaultText)
}

while($true) {
    $_Name = Show-InputBox "Enter account name you wish to disable"
    if ([string]::IsNullOrWhiteSpace($_Name)) {
        # the box was cancelled, so exit the loop
        break
    }
    # proceed with the rest of the code
}

如果用户按下 Esc 键,单击取消或将输入留空,则可以退出while循环,否则继续执行代码。

答案 1 :(得分:0)

您无法使用Read-Host来执行此操作,但是可以通过PSReadLine module(Windows 10 / Windows Server 2016上的Windows PowerShell版本5或更高版本和PowerShell Core)和{ {1}}函数:

重要提示:

  • 从PSReadLine v2.0.0-beta3开始,以下解决方案是 hack ,因为PSConsoleHostReadline仅支持提示 PowerShell语句,而不是开放式用户输入。

    • GitHub feature suggestion要求该功能也可以选择性地用于通用用户输入,这将带来极大的可自定义的最终用户提示体验。如果您希望看到此建议的实施,请在此处听到您的声音。
  • 该黑客程序应该在您的情况下起作用,因为您要提示的用户名在语法上应是有效的PowerShell语句。

    • 但是,由于两个原因,支持任意输入是有问题的:

      • 将应用不适用的语法着色-但是,您可以将所有可配置的颜色临时设置为相同的颜色,但这会很麻烦。

      • 更重要的是,如果输入恰好等于语法上不完整 PowerShell语句,PSConsoleHostReadline将不接受输入,而是继续提示(在新行);例如,输入PSConsoleHostReadline会导致此问题。

  • 也:

    • 无论提交什么输入,都会始终将其添加到命令历史记录中。

    • 虽然您当前可以在退出脚本时删除一个临时安装的键盘处理程序,但没有健壮的方法来恢复以前活动的键盘处理程序-参见{{ 3}}。

a|