2013-07-09 29 views
2

我正在做AD提取,並對字段「distinguishedname」進行排序,我只想保留表示用戶本身的「父OU」值的特定部分。Powershell - 保留字符串中的特定字

我運行這個命令來完成所有用戶的附加提取物:

import-module activedirectory 
get-aduser -filter * -properties *| Select-Object -Property SamAccountName,CN,co,ExtensionAttribute10,extensionAttribute11,extensionAttribute12,EmailAddress,whenCreated,Enabled,LastLogonDate,accountexpirationdate,distinguishedname |Sort-Object -Property Name | Export-Csv -Delimiter ";" -path "u:\theOutFile_NOFILTER_July.txt" 

"distinguishedname"這個樣子的:

distinguishedname 
CN=familly\, user,OU=Remote Users,OU=New York,OU=My,DC=Company,DC=Local 
CN=nameless\, cat,OU=Remote Users,OU=Ottawa,OU=My,DC=Company,DC=Local 
CN=Cameron\, James,OU=Regular Users,OU=Hollywood,OU=My,DC=Company,DC=Local 
CN=Bon\, Jean,OU=regular Users,OU=Springfield,OU=My,DC=Company,DC=Local 

注7月10日 一段時間,我會擊中那些線:

CN=Dog\, Cesar,OU=Special Accounts,OU=Regular Users,OU=Alma,OU=My,DC=Company,DC=Local 
CN=keys\, Alicia,OU=Special Accounts,OU=Regular Users,OU=Paris,OU=My,DC=Company,DC=Local 
CN=Clansy\, Door,OU=Map Drives,OU=Remote Users,OU=Rome,OU=My,DC=Company,DC=Local 

在這種情況下,我得到的結果是Remote UsersRegular Users而不是城市。我嘗試了一些修改,但是徒勞無功。

但我想第一個命令,而不是返回這個結果:

distinguishedname 
New York 
Ottawa 
Hollywood 
Springfield 

我不能努力尋找如何。

在此先感謝

回答

2

選擇,對象有一個非常靈活的功能來創建一個屬性名稱,其中關鍵的「名稱」設置爲計算屬性的名稱的地方使用哈希計算性能(有效地,列標題),並且「表達式」被設置爲用於確定管道中的每個對象的屬性的值的代碼塊。這將做你想要什麼:

Get-Aduser -Filter * -Properties * | Select-Object -Property SamAccountName,CN,co,ExtensionAttribute10,extensionAttribute11,extensionAttribute12,EmailAddress,whenCreated,Enabled,LastLogonDate,accountexpirationdate,@{Name='distinguishedname'; Expression={[regex]::match($_.distinguishedname,'OU=.+?OU=(.+?),(OU|DC)=').Groups[1].Value}} | Sort-Object -Property Name | Export-Csv -Delimiter ";" -Path "u:\theOutFile_NOFILTER_July.txt" 

這裏有一個故障發生了什麼事情:

  • Name='distinguishedname'告訴它創建一個名爲「distinguishedName來」新列。我使用該名稱來匹配您要查找的輸出示例,但它不一定是現有屬性的名稱。將名稱改爲更具描述性的值可能更有意義,例如, Name="parentOU"
  • [regex]::match用於使用正則表達式OU=.+?OU=(.+?),(OU|DC)=$ _。distinguishedname中提取所需部分,該正則表達式使用匹配組分隔列表中第二個OU的名稱。
  • .Groups[1].Value返回第一個匹配組(與第一組圓括號內容匹配的部分)的值。自身。價值而不.Groups [1]將返回整個匹配的字符串,從所述第一OU =到父OU的=以下名稱。下面的方法同樣適用,使用零寬度斷言而不是匹配組:[regex]::match($_.distinguishedname,'(?<=OU=.+?OU=).+?(?=,(OU|DC)=)').Value
+0

我已經更新了我的初始文章,我跑過了一些可能需要您的幫助來解決的exe文件。你的解釋很好,但我沒有看到我需要進行更改以提取OU =和「OU = MY」之間的刺激以獲取城市字段 – lotirthos227

+0

我不確定我明白你在問什麼。你需要做的改變是用'@ {Name ='distinguishedname'替換單個單詞** distinguishedname **; Expression = {[regex] :: match($ _。distinguishedname,'OU =。+?OU =(。+?),(OU | DC)=')。 -ADUser命令。只需將我的答案中的Get-ADUser命令替換爲修訂版本即可。 (我還建議將'Name ='distinguishedname''更改爲'Name ='parentOU''或'Name ='City'',因爲該列不再包含可分辨名稱)。 –

+0

順便說一句,如果你問什麼是從可分辨的名稱中提取城市(父OU)的名稱,它是正則表達式。 [[regex] :: match($ _。distinguishedname,'OU =。+?OU =(。+?),(OU | DC)=')組[1] .Value或[regex]: :match($ _。distinguishedname,'(?<= OU =。+?OU =)。+?(?=,(OU | DC)=)')。Value將評估爲第二個OU的名稱由Get-ADUser傳遞的每個對象的distinguishedname屬性的值。 –

相關問題