2014-12-23 102 views
1

問題如果這很簡單,我很抱歉,但我一直在研究幾天,無法自行解決或找到另一條探索路線。試圖將變量傳遞給[adsisearcher]

基本上我有低於這個工作,準確地返回我需要什麼:

([adsisearcher]'(&(objectClass=user (samaccountname='*dland*'))').FindOne().Properties['samaccountname']  

返回包含在它dland的用戶名。我想用一個變量($ usrNme1)替換dland,但它在表達式或語句中使用「Unexpected token」$ usrNme1'))''出錯。

我能得到它使用的ActiveDirectory模塊採用當地工作如下:

Get-ADUser -Filter {SAMAccountName -like $usrNme1} | select-object -Property SAMAccountName  

但遺憾的是我不能使用,對其他計算機在這種環境下,不得不另謀出路,這是因爲就像我已經找到替代品一樣。

在這裏的任何幫助將不勝感激:)這是對我來說最後一塊拼圖,它的令人沮喪的是如此接近,無法弄清楚!預先感謝您抽出時間:)

編輯:忘了發表評論,這個腳本將被推出並在Windows 7機器上本地運行,這是我無法使用Get-ADUser的原因之一。

感謝,

大衛

回答

0

您所查詢的是因爲它是user後失蹤的支架有點畸形,但你可以把變量在字符串中容易像下面的例子。置於內的變量將會很好地展開*(大部分時間。對象參數需要子表達式)。

$accountname = "mcame*" 
$query = "(&(objectClass=user)(samaccountname=$accountname))" 
([adsisearcher]$query).FindOne().Properties['samaccountname'] 

注:如果你看一下this question你會看到問題做通配符搜索你的ARE。如果你有一個大型組織,你可能需要重新考慮使用前導和尾隨星座或任何複數。

你原來的查詢

從支架上它不工作的原因是因爲你用單引號

除了。如果你看看這個resource它可以繼續說

比較字符串不會出現在引號中。displayName'Philipp Foeckeler'的過濾器的內容如下: (displayName = Philipp Foeckeler)。

查詢應該沒有這些內部引號的工作。

+0

嗨馬特,謝謝,工作得很好。我最初使用的查詢有)用戶之後,它仍然無法正常工作。是因爲我想要一行嗎?我猜是什麼讓我失望的是,它沒有使用dland *的變量,但一旦我介紹它失敗(原始錯誤是「無法索引到一個空數組」。只是試圖瞭解這裏的區別,所以我不會被抓到它再次... –

+0

@DavidVenthe看到更新的答案,涵蓋了你的問題。 – Matt

0

試試這個:

$foo = '*jsm*' 
([adsisearcher]"(&(objectClass=user) (samaccountname=$foo))") 
+0

這不幸的是沒有工作,但謝謝你。 –

+0

什麼不適用於此?有錯誤嗎?我測試了它,這種方法起作用。 – jbsmith

+0

這返回所有帳戶屬性,而不僅僅是帳戶名稱,這不是我想要做的。我想說它「不起作用」是不恰當的,但不是我需要:) –