通过Active Directory查询删除' - '字符之前

时间:2018-04-27 10:31:06

标签: powershell active-directory

输入:

john.dow-g
stephanie.adam-p
paul.douglas-steve-svr-z
jane.young-ac-a

输出:

-g 
-p
-svr-z
-ac-a

我的查询是固定的,但如何在' - '之前删除字符,如上面在PowerShell for Active Directory中的输出中提到的那样?

Get-ADUser -Identity john.dow-g -Server 'domaincontroller.com' -Properties * |
    select {n="suffix";e={$_.SamAccountName.Substring(9)}}

2 个答案:

答案 0 :(得分:0)

get-aduser -identity john.dow-g -server 'domaincontroller.com' -properties *| 
    Foreach-object{ 
       $Array = ($_.split('-'))
       '-' + (($Array[1..($Array.count-1)]) -join '-')

    }

你将继续遇到问题。

答案 1 :(得分:0)

我认为你错过了关于这个问题的信息,你要么有一个模板要比较,也就是说。 @(' - ABC-A', - abc-a),或者你检查例如最后2' - '以及它们之间的内容。

我将扩展第二个:

管道:

'paul.douglas-steve-svr-z' | % {$_.Substring($_.Substring(0,$_.LastIndexOf('-')).lastIndexOf('-'),$_.Length-($_.Substring(0,$_.LastIndexOf('-')).lastIndexOf('-')))}

正如你所看到的那样,少数几个可以扩展到尽可能多的' - '。

更好的方式(IMO):

$text='paul.douglas-steve-svr-z'

if($text.Split('-').Count -ge 3){

    $lastSymbolPosition = $text.LastIndexOf('-')
    $secondLastSymbilPosition = $text.Substring(0,$lastSymbolPosition).LastIndexOf('-')
    $prefix=$text.Substring($secondLastSymbilPosition,$text.Length-$secondLastSymbilPosition)

    $prefix

}else{

    'Out of the solution scope'

}

虽然我不能给你一个确定的答案,因为我不知道这个文本处理的目的。

希望这有帮助。