Powershell 从CSV文件创建变量
我的计算机列表是一个CSV文件,有3列(Machinename、New_AU和New_State) 我正试着把我电脑列表中的每台机器移到它的目标位置。每台机器的TargetOU基于新的_AU和新的_状态。我不确定如何从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
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!不仅是为了回答这个问题,还为了补充说明和教育。