Powershell 从CSV文件创建变量

Powershell 从CSV文件创建变量,powershell,Powershell,我的计算机列表是一个CSV文件,有3列(Machinename、New_AU和New_State) 我正试着把我电脑列表中的每台机器移到它的目标位置。每台机器的TargetOU基于新的_AU和新的_状态。我不确定如何从CSV文件中获取此信息。这是我到目前为止所拥有的。我感谢在这件事上给予的一切帮助 Import-Module ActiveDirectory $ComputerList = Import-Csv -Path "C:\Temp\Scripts\AUchange\Computerli

我的计算机列表是一个CSV文件,有3列(Machinename、New_AU和New_State)

我正试着把我电脑列表中的每台机器移到它的目标位置。每台机器的TargetOU基于新的_AU和新的_状态。我不确定如何从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
}

好的,让我们再看看有什么问题

脚本中未定义变量$New\u AU$New\u 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中,|表示管道。这将把上一个命令中的数据发送到管道中的下一个命令,并且该数据的变量将为$\uu

因此,我们导入CSV,它将文件转换为Powershell对象。然后,我们将|该对象输送到%{},这是每个对象的缩写

我们使用$()设置$TargetOU字符串,这意味着表达式(这意味着将此部分作为脚本而不是字符串运行。然后我们使用$调用从导入CSV传来的对象数据,然后调用所需的每个属性$.PropertyName

$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"

然后,我们使用从导入csv中获得的属性为MachineName的管道化数据$获取AdComputer。我们将获取AdComputer对象的管道化,将对象移动到中,将-TargetPath<参数设置为$targetTou

$TargetOu=
移动到ForEach内部,并更改为
$TargetOu=“OU=$Computer.New\u AU,OU=$Computer.New\u State,OU=ST,OU=EN,DC=EN,DC=wb,DC=bk,DC=cp”
感谢ArcSet!不仅是为了回答这个问题,还为了补充说明和教育。