PowerShell新手求助:将Get-ADOrganizationalUnit结果转为字符串数组
解决PowerShell OU名称转为带引号字符串数组的问题
嘿,作为PowerShell新手遇到这种数据格式转换的问题太正常了,我来帮你搞定!你之前用Format-Table的问题在于,这个命令是用来生成可视化的表格输出的,它返回的不是纯文本或字符串数据,而是格式化对象,所以没法直接用来做后续的数组处理。咱们换个正确的思路:
步骤1:获取纯OU名称数组
首先,咱们直接提取OU的Name属性值,得到一个纯字符串数组:
$ouNames = Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase 'OU=aa,OU=bb,OU=cc,OU=dd,DC=AD,DC=contoso,DC=CA' -SearchScope OneLevel | Select-Object -ExpandProperty Name
这里的Select-Object -ExpandProperty Name会直接把每个OU的名称提取出来,存成一个字符串数组,比如["ThisOU", "ThatOU", "AnotherOU"]。
步骤2:转换为带双引号的字符串数组
如果需要每个元素都带有双引号(比如"ThisOU"、"ThatOU"),可以用ForEach-Object来给每个名称加上引号:
$quotedOuArray = $ouNames | ForEach-Object { '"{0}"' -f $_ }
执行后,$quotedOuArray就是你要的格式:PowerShell里显示时会转义双引号,但实际使用时每个元素就是带引号的字符串,比如"ThisOU"。
可选:生成逗号分隔的字符串(如果下拉列表需要这种格式)
如果你的下拉列表脚本需要的是一个类似"ou1","ou2","ou3"的单个字符串,可以把数组用逗号连接起来:
$quotedOuString = $quotedOuArray -join ', '
这样得到的结果就是"ThisOU", "ThatOU", "AnotherOU"。
为什么之前的Export-Csv效果不好?
Export-Csv是用来生成CSV格式文件的,会自动添加表头和额外的格式标记,不符合你需要的简洁数组格式,所以用上面的方法更直接。
现在你可以把$quotedOuArray或者$quotedOuString传入你的下拉列表脚本里,应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者JRW
相关产品推荐
相关产品推荐

