PowerShell:如何检查为用户密码输入了多少位数字

标签 powershell if-statement

我正在尝试编写一个 powershell 脚本,要求用户输入一个 4 位数的 PIN,如果该数字不等于 4,则会发出警告。

这是我所拥有的,但它似乎不起作用......

[int]$userPin = read-host 'type in your user pin'
if ($userPin.length -ne 4) {
  write-host "Error, Pin must be 4 numbers"
}

无论如何,此代码都会写入错误消息... 任何帮助表示赞赏! 谢谢!

最佳答案

$userPin = while ($true) {
  $entered = Read-Host 'type in your user pin'
  if ($entered.Trim() -match '^\d{4}$') { [int] $entered; break }
  Write-Warning "$entered is not a 4-digit number; please try again."
}

上面一直提示,直到输入一个 4 位数字,并将其作为 [int] 实例存储在变量 $userPin 中。

请注意 regex 首先使用匹配来确保刚好输入 4 个十进制数字 (\d{4})[1],使用 -匹配regular-expression matching operator .这样一来,预先排除了输入非数字的可能性,而不会导致将非数字的值直接转换为 [int] 时出现的错误。


至于你尝试了什么:

通过类型约束您的$userPin 变量来键入[int] ([int] $userPin = ... ),您将其值(初始值和以后分配的任何值)强制为该类型,并且 [int] ( System.Int32) 的实例没有 。 Length 属性(而从 Read-Host 返回的原始 [string] 实例有)。

默认情况下,PowerShell 会忽略访问不存在的属性的尝试并返回 $null,因此您的 $userPin.length -ne 4 条件等同于 $null -ne 4始终为真。


[1] 严格来说,\d 不仅匹配 ASCII 范围的十进制数字 09,还匹配其他Unicode 字符也归类为数字。要消除歧义,您可以改用 [0-9],尽管在​​实践中可能很少需要这样做。

关于PowerShell:如何检查为用户密码输入了多少位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68514343/

相关文章:

javascript - 在简单函数中使用 if-if 或 if-else if-else

字符指针和 IF 语句

windows - 如何使用PowerShell和Windows 10打开/关闭WiFi状态?

c# - 枚举 PowerShell 对象的属性抛出

azure - 如何使用 Powershell 从订阅获取 Cosmos DB 的数据大小

javascript - jquery 不适用于 css 媒体查询

powershell - 通过 PowerShell 将 Write-Host 和 Write-Output 输出到控制台的不同输出

windows - 在 Windows 7 上使用 PowerShell 从 COM 端口捕获输出

java - 为什么我的方法不能正常工作?

c - 如何在一行中组成变量名,作为结构调用的一部分?