我尝试使用从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个字符串,因此导致了很大一部分代码。也许有更简单的方法?
答案 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