从CSV文件创建变量

时间:2018-10-09 17:50:13

标签: powershell

我的计算机列表是一个包含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
}

1 个答案:

答案 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>