我正在编写一个脚本来返回所有用户及其拥有邮箱的OU。我唯一的问题是distinguishedname返回
CN =用户,OU = ...
我只想要OU = ...
这是我的最后一行格式不正确
$($objItem.distinguishedname.replace('CN=$($objItem.name),',''))"
在最后一行的这一段中,我想替换我找到的短语CN =从对象返回的空白数据。
所以如果$(objItem.name)包含Bob
我希望这能执行以下替换
$objItem.distinguishedname.replace('CN=Bob,','')
我该如何格式化?我也试过以下
$($objItem.distinguishedname[0].replace('CN=$($objItem.name),',''))
不会返回错误但不替换任何内容。如果我将其更改为
$($objItem.distinguishedname[0].replace('CN=',''))
它会删除前面的所有CN =。我感觉很亲密。
以下是完整的脚本。
$strFilter = "(&(&(&(objectCategory=Person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)(HomeMDB=*)))))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"
$colProplist = "name","distinguishedname", "samaccountname"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
{
$objItem = $objResult.Properties;
write-Host "$($objItem.samaccountname) $($objItem.name)$($objItem.distinguishedname.replace('CN=$($objItem.name),',''))"
}
答案 0 :(得分:2)
PowerShell不会在单引号内扩展变量:
'CN=$($objItem.name),'
也许你想要这个:
"... $($objItem.distinguishedname[0].replace(`"CN=$($objItem.name),`",''))"
以下是一个例子:
$objItem = [pscustomobject]@{DistinguishedName='CN=Bob,OU=blah','';Name='Bob'}
"Blah ... $($objItem.distinguishedname[0].replace(`"CN=$($objItem.name),`",''))"
输出:
Blah ... OU=blah
答案 1 :(得分:1)
你可以试试这个:
$($objItem.distinguishedname[0] -creplace 'CN=[^,]+,')
这适合你吗?
....
...
$objItem = $objResult.Properties;
$del = 'CN={0},' -f $($objItem.name)
.......$($objItem.distinguishedname[0] -creplace "$del")
答案 2 :(得分:1)
而不是取代我会提供斯普利特作为替代。这将在逗号上拆分并返回一个2项数组,第一项是CN = Name,第二项是OU = Path。然后我选择并跳过第一个,只返回字符串的OU =部分。
$objItem.distinguishedname -split ",",2|select -skip 1
然后你可以使用它:
Write-Host ("{0} {1}{2}" -f $objItem.samaccountname, $objItem.name, ($objItem.distinguishedname -split ",",2|select -skip 1))
这将在您的SAMAccountName示例中提供类似的输出,后跟一个空格,后跟其名称,紧接其后将是其DistinguishedName,其CN = Name部分已删除。