在PowerShell中解析字符串以使用变量

时间:2016-08-01 16:54:48

标签: regex string powershell

我想创建一个小脚本,它采用特定类型的字符串并以一种我可以轻松处理的方式使用它

  • %1g。%s基本上是指来自给定名称和完整辅助名称的1个字符(输出应该是从2个参数构建的j.snow)
  • %g。%s,基本上是指完整的给定名称点和完整的辅助名称(输出应该是从2个参数构建的john.snow)
  • %5g。%s基本上是指来自给定名称和完整辅助名称的5个字符,但如果给定名称更短,则使用更短版本(john.snow)
  • %g%s将给出给定名称和辅助名称不带点(johnsnow)

问题是我如何开始处理它,以便我不创建怪物if / else案例?或者我应该这样做?

EDIT。由于这是Microsoft Exchange电子邮件模板行为,只是想解释这是针对没有内部部署选项的Office 365,它没有电子邮件模板选项。换句话说,我想创建一个以某种方式模仿这种行为的脚本。

1 个答案:

答案 0 :(得分:1)

$firstName = "Alice"
$lastName = "Bloggs"

$template = '%2g.%s@example.com'

function Get-NameSection {
    # Returns the first $num characters of a name
    # unless $num is 0, missing or longer than the name
    # then returns the entire name

    param([string]$name, [int]$num)

    if (-not $num -or $num -gt $name.Length) { 
        $name 
    } else {
        $name.Substring(0, $num)
    }
}

$template = [regex]::Replace($template, '%(\d*)g', {param($m) Get-NameSection $firstName $m.Groups[1].Value })
$template = [regex]::Replace($template, '%(\d*)s', {param($m) Get-NameSection $lastName $m.Groups[1].Value })

$template