2017-10-29 144 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