将名称替换为第一个字母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根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?