powershell - 仅添加真实 MAC 地址

在一天的工作过程中,我有现场技术人员四处走动,他们偶尔需要将 MAC 地址添加到我们在 AD 中的无线访问组。我们不完全支持他们自己进入 AD,我们一直在使用脚本让他们以正确的方式添加 MAC 地址。 我已经承担起完全防止白痴这件事的责任,而且我几乎就在那里减去一个明显的问题。我无法阻止他们添加值大于“f”的 MAC 地址。

Write-Host "MAC Address must be entered as lowercase and without colons. EX: 14d6aa6ac9be" -ForegroundColor Yellow
    $MACUserName = Read-Host -Prompt 'Please Input the MAC Address of the Device to be added to AD and press Enter'
    $MACUserName = $MACUserName -replace '[\W]', ''
    If ($MACUserName.Length -ne 12 -or $MACUserName -notmatch '[A-Za-z0-9]') {
        Write-Host "MAC Address: " -ForegroundColor Red -NoNewline; Write-Host $MACUserName -ForegroundColor White -NoNewline; Write-Host " is not the correct length or contains invalid characters. Please verify MAC address" -ForegroundColor Red
        Pause
        Single-Device}

这是我目前为止所做的一切,显然这不仅仅是这一部分,但现在这是我住的地方。

我能够去掉任何可能输入的冒号,并且我的 -notmatch 部分包含所有可能的值。

如果我将 -notmatch '[A-Za-z0-9]' 更改为 -notmatch '[A-Fa-f0-9]' 它仍然允许我用 z 和诸如此类的东西添加假的 MAC 地址。我该如何限制此部分将接受的字符?

最佳答案

Santiago Squarzon's helpful answer使用 .NET API 为您的问题提供最佳解决方案。


至于你尝试了什么:

'[A-Fa-f0-9]' 匹配一个属于指定范围的字符,这意味着一个这样的输入字符串中的字符使表达式的计算结果为 $true - 即使存在这些范围之外的其他字符也是如此。

因此您必须确保组成输入字符串的所有字符都在预期的范围内:

-notmatch '^[a-f0-9]+$'

或者,反转逻辑并查找至少一个无效字符:

-匹配'[^a-f0-9]'

注意:

  • -match / -notmatch运算符默认执行 substring 匹配;因此,为了匹配整个 字符串,需要开始和结束 anchor ^$

  • [a-f] 足以匹配 小写和大写字母,因为 -match/-notmatch 默认情况下不区分大小写,就像 PowerShell 通常那样。如果需要大小写敏感匹配,请使用-cmatch/-cnotmatch

https://stackoverflow.com/questions/71341817/

相关文章:

R - 如何将多个 bool 列(不知道有多少)组合成一列

flutter - 图标聚集在带有 float 按钮的 flutter 底部导航栏中

ruby-on-rails - 安装带有 native 扩展 Gem::Ext::BuildErro

python - 独特的骰子组合

swift - RealityKit——在检测到的平面上可视化网格

kubernetes - 在 WSL2 中安装 Minikube 集群时无法访问已部署的服务

r - 检查列表中的值是否存在于多列 R data.table 中

javascript - React.js,列表中的每个 child 都应该有一个唯一的 "key"

r - 一种扩展R向量的有效方法

r - 在列 R 中包含列表元素