替换字符串,直到其长度小于PowerShell的限制

时间:2018-06-26 12:10:14

标签: powershell replace

我尝试使用从csv文件导入的值更新用户的AD帐户属性。 问题在于,department之类的某些属性允许最大长度为64的字符串小于文件中提供的最大长度(最多110个)。

我已经在此线程中找到并采用了TroyBramley提供的解决方案-How to replace multiple strings in a file using PowerShell(感谢您Troy)。

它工作正常,但是...嗯。在所有替换项放置之后,文本的意义不如最初。

例如,原始文本First Department of something1 something2 something3 something4将产生1st Dept of sth1 sth2 sth3 sth4

我想控制该过程,以便当字符串的长度下降到AD属性所允许的限制以下时,可以停止该过程。

顺便说一句。我想选择哪种替换方法也要第一,第二等等。

我按字母顺序将元素放在哈希表中,但似乎没有以这种方式处理它们。我无法弄清楚模式。

我可以通过一一替换字符串,每次替换后控制长度来查看分辨率。但是,由于使用了近70个字符串,因此导致了很大一部分代码。也许有更简单的方法?

1 个答案:

答案 0 :(得分:2)

您可以迭代替换列表,直到字符串达到定义的MaxLength

## Q:\Test\2018\06\26\SO_51042611.ps1

$Original = "First Department of something1 something2 something3 something4"

$list = New-Object System.Collections.Specialized.OrderedDictionary
$list.Add("First","1st")
$list.Add("Department","Dept")
$list.Add("something1","sth1")
$list.Add("something2","sth2")
$list.Add("something3","sth3")
$list.Add("something4","sth4")

$MaxLength = 40

ForEach ($Item in $list.GetEnumerator()){
    $Original = $Original -Replace $Item.Key,$Item.Value
    If ($Original.Length -le $MaxLength){Break}
}

"{0}: {1}" -f $Original.Length,$Original

$ MaxLength设置为40的示例输出

37: 1st Dept of sth1 sth2 sth3 something4