将名称替换为第一个字母powershell

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将名称替换为第一个字母powershell相关的知识,希望对你有一定的参考价值。

我需要一些技巧来替换文本文件中的名字,只用名字的第一个字母和powershell(或其他东西)。拥有以下格式的文件:

givenName: John
displayName: John Forth
sAMAccountName: john.forth
mail: j.forth@mydomain.com

givenName: Peter
displayName: Peter Doe
sAMAccountName: peter.doe
mail: p.doe@mydomain.com

.......................
etc.

我在我的脚本中使用了powershell -replace并将@ somedomain.com替换为@ mydomain.com整个文件和其他一些字符串。它工作得很完美,但现在我需要用sAMAccountName:j.forth替换sAMAccountName:john.forth,用于文件中的大约90个用户。有没有办法用脚本执行此操作或必须手动执行此操作?非常感谢!

答案

您可以再次使用替换,但使用不同的正则表达式。

这样的事情可能会发生

$result = $subject -replace '(?<=sAMAccountName: \w)\w+', ''

Breakdown

'(?<=' +                   # Assert that the regex below can be matched backwards at this position (positive lookbehind)
   'sAMAccountName: ' +       # Match the character string “sAMAccountName: ” literally (case sensitive)
   '\w' +                     # Match a single character that is a “word character” (Unicode; any letter or ideograph, digit, connector punctuation)
')' +
'\w' +                     # Match a single character that is a “word character” (Unicode; any letter or ideograph, digit, connector punctuation)
   '+'                        # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
另一答案

这里有一个如何获取新值的示例,因为我猜你已经获得了在当前域名更改器中设置它的代码。

这两个的新值将是j.forth和p.doe,并且基于旧的SamAccountName。

$file = "givenName: John
displayName: John Forth
sAMAccountName: john.forth
mail: j.forth@mydomain.com

givenName: Peter
displayName: Peter Doe
sAMAccountName: peter.doe
mail: p.doe@mydomain.com"
$file = $file -split "`n"

Foreach($line in $file){

    # identifier to look for
    $id = "sAMAccountName: "

    # if identifier found in line
    if($line -match $id){
        # removing identifier to get to value
        $value = $line -replace $id
        # splitting on first dot
        $givenname = $value.split(".")[0]

        # new value
        $newvalue = ($givenname.SubString(0,1))+($value -replace ($givenname))
        $newvalue
    }
}

以上是关于将名称替换为第一个字母powershell的主要内容,如果未能解决你的问题,请参考以下文章

无法将正则表达式模式表单文件解析为 powershell 中的变量

根据字符串名称而不是列表视图项位置替换片段并启动活动

Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?

Powershell-批量重命名替换文件名

在 .bat 文件中使用 PowerShell,将一个字符串替换为多个字符串

将输入变量从PowerShell表单传递到cmdlet参数会导致空白数据