我的计算机列表是一个包含3列(计算机名称,New_AU和New_State)的CSV文件。
我正在尝试将计算机列表中的每台计算机移至TargetOU。每台计算机的TargetOU基于New_AU和New_State。我不确定如何从CSV文件中获取此信息。这是我到目前为止所拥有的。感谢您在此问题上提供的所有帮助。
Import-Module ActiveDirectory
$ComputerList = Import-Csv -Path "C:\Temp\Scripts\AUchange\Computerlist.csv"
$TargetOU = "OU=$New_AU,OU=$New_State,OU=ST,OU=EN,DC=en,DC=wb,DC=bk,DC=cp"
foreach ($Computer in $ComputerList) {
Get-ADComputer $Computer |
Move-ADObject -Server AD-server.en.wb.bk.cp -TargetPath $TargetOU
}
答案 0 :(得分:1)
好的,让我们来回顾一下问题所在。
脚本中未定义变量 $ New_AU 和 $ New_State ,因此现在在 Null 中。
$ComputerList = Import-Csv -Path C:\Temp\Scripts\AUchange\Computerlist.csv
$TargetOU = "OU=$New_AU,OU=$New_State,OU=ST,OU=EN,DC=en,DC=wb,DC=bk,DC=cp"
解决方案:我要回答的事实是,您说您的$ ComputerList应该是一个对象数组,其中包含具有New_AU,New_State和MachineName属性的多个对象
在这种情况下,您可以使用:
Import-Module ActiveDirectory
Import-Csv -Path C:\Temp\Scripts\AUchange\Computerlist.csv | %{
$TargetOU = "OU=$($_.New_AU),OU=$($_.New_State),OU=ST,OU=EN,DC=en,DC=wb,DC=bk,DC=cp"
Get-ADComputer $_.Machinename | Move-ADObject -Server AD-server.en.wb.bk.cp -TargetPath $TargetOU
}
发生了什么
在powershell中, | 表示管道。这会将上一个命令中的数据发送到管道 | 中的下一个命令,并且该数据的变量将为 $ _
因此,我们使用Import-CSV将文件转换为Powershell对象。然后,我们将该对象的 | 管道传输到%{} ,它是 ForEach-Object
的简写我们使用 $()用字符串设置 $ TargetOU ,这意味着表达式(这意味着以脚本而不是字符串的形式运行此部分。然后调用对象数据使用$ _从导入CSV 传递,然后调用所需的每个属性 $ _。PropertyName 。
然后,我们使用从 Import-csv <获得的属性 MachineName 的管道 | 数据$ _ Get-AdComputer / strong>。我们将 Get-AdComputer 对象传送到 Move-ADObject ,在其中将 -TargetPath 参数设置为 $ TargetOU < / p>