gpt4 book ai didi

powershell - 使用 Powershell 检查字符串中的特定单词是否包含大写字母

转载 作者:行者123 更新时间:2023-12-02 23:18:50 26 4
gpt4 key购买 nike

我正在使用 get-childitem 检查注册表项与 -recurse选项。我将其输入 Get-ItemProperty ,我正在寻找字符串值的特定值。然后我选择那个对象。我想进一步增强我的脚本以添加 If陈述。如果我的字符串中的一个单词包含大写字母,我只想做某事。诀窍是,只有那个特定的词,没有其他词。

我的字符串值的值如下所示:Https:\\Blah.blah.com
所以在上面,只有 if如果“https”包含大写字母,则声明为真。上面,它确实包含一个大写字母。但是,如果返回的值类似于 https:\\CapitalLettersHereareOK.com .然后 If语句应该返回 false。

我无法使用 -cmatch因为,虽然它有效,但它匹配整个字符串。如上所述,字符串中的某些字母可能是大写字母,这没关系。我只需要知道“HTTPS”是否包含任何大写字母。

我不擅长正则表达式,我很确定这里需要。请参见下面的代码:

$GetWebValue = Get-ChildItem -Path 'HKLM:\Software\MySoftwareKey' -Recurse -ErrorAction SilentlyContinue | Get-ItemProperty -Name Web -ErrorAction SilentlyContinue | Select-object -expandproperty Web

最佳答案

关键是隔离协议(protocol)名称 (: 之前的所有内容)和 只测试它是否存在大写字符 ;例如。:

PS> ('Https:\\Blah.blah.com' -split ':')[0] -cmatch '\p{Lu}'
True # ditto for 'httpS:\\...', 'hTtps:\\...', 'HTTPS:\\...', ...

PS> ('https:\\Blah.blah.com' -split ':')[0] -cmatch '\p{Lu}'
False
  • (... -split ':')[0]提取第一个 :基于 LHS 字符串的 token ,即协议(protocol)名称。
  • -cmatch区分大小写匹配正则表达式 \p{Lu} (大写字母)该协议(protocol)名称中的任何位置。
  • 注意:在这个简单的情况下,可以安全地假设只有 ASCII 范围的字母 a通过z可以是协议(protocol)名称的一部分,正则表达式 [A-Z]就足够了;相比之下,\p{Lu}匹配任何分类为字母的大写 Unicode 字符。


  • 在您的命令上下文中:
    Get-ChildItem -Path 'HKLM:\Software\MySoftwareKey' -Recurse -ErrorAction SilentlyContinue |
    Get-ItemProperty Web -ErrorAction SilentlyContinue |
    Select-Object -ExpandProperty Web |
    Where-Object { ($_ -split ':')[0] -cmatch '\p{Lu}' }

    请注意,虽然您应该能够使用 Get-ItemPropertyValue Web (PSv5+) 而不是环岛 Get-ItemProperty Web | Select-Object -ExpandProperty Web ,以便直接从每个匹配的注册表值中提取数据,在撰写本文时,这不是一个选项,因为 known bug .

    关于powershell - 使用 Powershell 检查字符串中的特定单词是否包含大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57632226/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com