2017-10-29 204 views
0

我試圖在我的AD中使用Powershell從'電話'選項卡的字段'信息'中添加一些信息。附加信息「電話」選項卡 - Powershell

這裏是我的腳本是:

ipmo ActiveDirectory 
Set-ADUser SAMACCOUNTNAME -Replace @{info="$($_.info) noAGD"} 

的事情是,它不會工作。 但是我發現圍繞谷歌以下腳本完美的作品:

ipmo ActiveDirectory 
Import-Csv C:\Users\MyID\Desktop\test.txt | foreach { 
    Get-ADUser $_.sAMAccountname -Properties info} | foreach { 
     Set-ADUser $_ -Replace @{info="$($_.info) noAGD" 
    } 
} 

怎麼會......你們可以的任何澄清?

謝謝,;)

回答

0

我發佈了另一個答案,因爲雖然我的工作,我想解釋更多關於你找到的腳本,爲什麼它的作品和你的不,我認爲這是你的原始問題。

因此,在您找到的腳本中,您會看到它從CSV文件獲取信息,然後將管道(「|」字符)傳遞給Get-ADUser cmdlet(以及隨後的Set-ADUser cmdlet)。我被絆倒的原因是它使用了兩個foreach循環。但經過進一步調查,我發現了原因。

當我運行只是簡單:

Get-ADUser SAMACCOUNTNAME -Properties info | Set-ADUser -Replace @{info="$($_.info) noAGD"}" 

它的確空出什麼是「信息」,並寫上「noAGD」。然而,當我跑同樣的事情,但把我的「SET-ADUser便有」 foreach循環裏面,這個時候包括-Identity參數

Get-ADUser SAMACCOUNTNAME -Properties info | foreach { Set-ADUser $_.SamAccountName -Replace @{info="$($_.info) noAGD"}" } 

它並追加「noAGD」什麼是在那裏。看來,管道變量和foreach循環有特殊的關係。我知道我已經遇到了其他我試圖使用pipeline變量的實例,並發現我必須使用foreach循環來使其工作。

因此,在你的腳本中,你沒有輸送任何東西,這就是爲什麼你不能使用「$($ .info ...」管道變量尚未建立,「$」爲空並且沒有foreach循環,當你運行你的腳本時,用戶對象應該有「[空格] noAGD」

0

您是否發佈了完整的腳本?事實上,您不提供SAMACCOUNTNAME的值。您找到的腳本將CSV對象導入到pipleline中,並將其導入兩個foreach循環(這是不必要的)。更好的方法來寫你發現的是:

Import-Csv C:\Users\MyID\Desktop\test.txt | foreach {Get-ADUser $_.sAMAccountname -Properties info | Set-ADUser $_.SamAccountName -Replace @{info="$($_.info) noAGD"}} 

追加是一個完全不同的問題,並且需要變量真的。請看下圖:

$UsersInfo = Import-Csv C:\Users\MyID\Desktop\test.txt 
foreach ($Userinfo in $UsersInfo) { 
    $info = Get-ADUser $UserInfo.SamAccountName -Properties Info | Select -ExpandProperty Info 
    $info += $Userinfo.info 
    Set-ADUser $UserInfo.SamAccountName -Replace @{info="$info noAGD"} 
} 

沒有了解更多,應該讓你非常接近。

+0

是的,我做到了。 'SAMACCOUNTNAME'這個詞只是通用的...你的腳本也不會工作,我只是測試了它,它取代了整個信息,但並沒有附加到 – Charlypop

+0

順便說一下,有些人檢查了我的帖子,並給出了修正。 @Manu,'information'在英語中總是單數(只是你知道寶貝) – Charlypop

+0

啊,追加是不同的,爲了做到這一點,你必須首先捕捉變量中的內容並追加。將更新我的答案 – Joseph

0

好吧,我明白了!非常感謝你的調查,你做得很好,我很好真的很感謝。

說到'foreach'循環。我碰到下面的腳本來了,而我一直在尋找一個解決我的問題(Technet上):

Import-Module ActiveDirectory 
foreach($j in Get-Content c:\userdata.txt) 
{ 

$i = Get-ADUser $j -Properties info | %{ $_.info} 
Set-ADUser $j -Replace @{info="$($i) `r`n Account Disabled for O365  Cleanup"} 

} 

下面是如果需要的鏈接:

https://gallery.technet.microsoft.com/scriptcenter/Powershell-Append-Info-5f613638

正如你所看到的這個人通過foreach循環結束變量$ i,在測試之後,它返回一個普通信息的值(沒有標題和內容......)。 我以前從未見過。

現在我想知道這種使用foreach循環。你能告訴我更多關於它嗎?

事情是我有點扔掉說實話。

+0

他在做什麼基本上與「$ i = Get-ADUser $ j -Properties info |選擇-ExpandProperty info「他們執行foreach作爲訪問管道變量的一種方式,它只會運行一次,這有點奇怪,我不推薦使用它,lol。使用Select -ExpandProperty來獲取Powershell的原因,也是。 ,您能否將我的答案標記爲正確的答案?幫助。 – Joseph

+0

非常感謝您對Joseph的所有澄清!); – Charlypop