只是想知道是否有可能通过按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
}
如果我想更改域名,我希望能够对其进行转义
答案 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语句,而不是开放式用户输入。
该黑客程序应该在您的情况下起作用,因为您要提示的用户名在语法上应是有效的PowerShell语句。
但是,由于两个原因,支持任意输入是有问题的:
将应用不适用的语法着色-但是,您可以将所有可配置的颜色临时设置为相同的颜色,但这会很麻烦。
更重要的是,如果输入恰好等于语法上不完整 PowerShell语句,PSConsoleHostReadline
将不接受输入,而是继续提示(在新行);例如,输入PSConsoleHostReadline
会导致此问题。
也:
无论提交什么输入,都会始终将其添加到命令历史记录中。
虽然您当前可以在退出脚本时删除一个临时安装的键盘处理程序,但没有健壮的方法来恢复以前活动的键盘处理程序-参见{{ 3}}。
a|