将信息追加'Telephone'选项卡 - Powershell



我尝试使用Powershell在AD中的"电话"选项卡的"信息"字段中添加一些信息。

以下是我编写的脚本:

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

问题是它不起作用。然而,我在谷歌周围发现了以下脚本,它运行得很好:

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

为什么?。。。你们谁能澄清一下吗?

谢谢,;)

我发布了另一个答案,因为虽然我的答案有效,但我想更多地解释一下你找到的脚本,以及为什么它有效而你的脚本无效,我认为这是你最初的问题。

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

当我平淡无奇的时候:

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循环似乎有一种特殊的关系。我知道我遇到过其他尝试使用管道变量的例子,发现我必须使用foreach循环才能使其工作。

因此,在你的脚本中,你没有管道任何东西,这就是为什么你不能使用"$($.info…"管道变量尚未建立,"$"为空,并且没有foreach循环。当你运行脚本时,用户对象中应该有"[space]noAGD"。

您发布了完整的脚本吗?实际上,您不提供SAMACCOUNTNAME的值。您找到的脚本将对象从CSV导入到pipleline中,并将其管道传输到两个foreach循环中(这是不必要的)。写你发现的更好的方法是:

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

追加是完全不同的事情,并且确实需要变量。见下文:

$UsersInfo = Import-Csv C:UsersMyIDDesktoptest.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"}
}

如果没有更多的了解,这应该会让你真正接近。

最新更新