附加信息'电话'标签 - Powershell

时间:2017-10-29 08:09:44

标签: powershell scripting

我试图在字段中添加一些信息' info'从标签'电话'在我的广告中使用Powershell。

以下是我编写脚本的方式:

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

事情是,它不会起作用。 但是我发现Google下面的脚本完美无缺:

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

为什么?......你们中的任何人都可以澄清一下吗?

谢谢,;)

3 个答案:

答案 0 :(得分: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"}
}

如果不了解更多,那应该会让你非常接近。

答案 1 :(得分:0)

我发布了另一个答案,因为虽然我可以使用,但我想更多地解释一下你找到的脚本及其工作原理,而你的脚本没有,我认为是你原来的问题。

因此,在您找到的脚本中,您将看到它从CSV文件中获取信息,然后将管道(" |"字符)传递给Get-ADUser cmdlet(以及随后Set-ADUser cmdlet)。我被绊倒的原因是为什么它使用了两个foreach循环。但经过进一步调查,我发现了原因。

当我跑得很简单时:

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

它确实消除了" info"写" noAGD&#34 ;.但是,当我运行相同的东西,但把我的" Set-ADUser"在foreach循环中,这次包括-Identity参数

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

它会附加" noAGD"在那里。管道变量和foreach循环似乎有一种特殊的关系。我知道我遇到了其他尝试使用管道变量的实例,并发现我必须使用foreach循环才能使其工作。

因此,在您的脚本中,您不能管理任何事情,这就是为什么您无法使用" $($ .info ..." The管道变量尚未建立且" $ "为空且没有foreach循环。当您运行脚本时,用户对象应该具有" [空格] noAGD"在其中。

答案 2 :(得分: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循环的这种用法。你能告诉我更多关于它的事吗?

事实上,我实在是有点被抛弃了。