使用Powershell将计算机从csv文件移动到正确的OU

使用Powershell将计算机从csv文件移动到正确的OU,powershell,csv,active-directory,ou,Powershell,Csv,Active Directory,Ou,继续获取“移动ADObject:无法验证参数“TargetPath”上的参数。该参数为null或空。”尝试将计算机移动到各自的OU时 尝试了以下代码集来实现它,但不起作用: PS C:\temp> cat .\OUs.csv OUName,Server AD-DNS,AD-DNS-Server Apps,App-Server DBs,DB-Server1 DBs,DB-Server2 Utilities-Servers,Utils-Server PS C:\temp> PS C:\t

继续获取
“移动ADObject:无法验证参数“TargetPath”上的参数。该参数为null或空。”
尝试将计算机移动到各自的OU时

尝试了以下代码集来实现它,但不起作用:

PS C:\temp> cat .\OUs.csv
OUName,Server
AD-DNS,AD-DNS-Server
Apps,App-Server
DBs,DB-Server1
DBs,DB-Server2
Utilities-Servers,Utils-Server
PS C:\temp>
PS C:\temp> $CSVFile = Import-Csv ".\OUs.csv"
PS C:\temp> foreach ($item in $CSVFile){
>> $computer = (Get-ADComputer $item.Server).DistinguishedName
>> $targetOU = (Get-ADOrganizationalUnit -filter "name -eq '$item.OUName'")
>>     Move-ADObject -Identity $computer -TargetPath $targetOU.DistinguishedName -Confirm:$false
>>     Write-Host "Computer $computer has been moved successfully to $targetOU"
>> }
但如果我改变

$targetOU = (Get-ADOrganizationalUnit -filter "name -eq '$item.OUName'")
对于特定的OU,如下所示:

$targetOU = (Get-ADOrganizationalUnit -filter "name -eq 'AD-DNS'")
所有计算机都转到AD-DNS OU。 下面是我执行代码时的会话捕获:

PS C:\temp>
PS C:\temp> cat .\OUs.csv
OUName,Server
AD-DNS,AD-DNS-Server
Apps,App-Server
DBs,DB-Server1
DBs,DB-Server2
Utilities-Servers,Utils-Server
PS C:\temp>
PS C:\temp> $CSVFile = Import-Csv ".\OUs.csv"
PS C:\temp> foreach ($item in $CSVFile){
>> $computer = (Get-ADComputer $item.Server).DistinguishedName
>> $targetOU = (Get-ADOrganizationalUnit -filter "name -eq '$item.OUName'")
>>     Move-ADObject -Identity $computer -TargetPath $targetOU.DistinguishedName -Confirm:$false
>>     Write-Host "Computer $computer has been moved successfully to $targetOU"
>> }
Move-ADObject : Cannot validate argument on parameter 'TargetPath'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:4 char:51
+ ... t -Identity $computer -TargetPath $targetOU.DistinguishedName -Confir ...
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Move-ADObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

Computer CN=AD-DNS-Server,CN=Computers,DC=msoc,DC=local has been moved successfully to
Move-ADObject : Cannot validate argument on parameter 'TargetPath'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:4 char:51
+ ... t -Identity $computer -TargetPath $targetOU.DistinguishedName -Confir ...
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Move-ADObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

Computer CN=App-Server,CN=Computers,DC=msoc,DC=local has been moved successfully to
Move-ADObject : Cannot validate argument on parameter 'TargetPath'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:4 char:51
+ ... t -Identity $computer -TargetPath $targetOU.DistinguishedName -Confir ...
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Move-ADObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

Computer CN=DB-Server1,CN=Computers,DC=msoc,DC=local has been moved successfully to
Move-ADObject : Cannot validate argument on parameter 'TargetPath'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:4 char:51
+ ... t -Identity $computer -TargetPath $targetOU.DistinguishedName -Confir ...
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Move-ADObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

Computer CN=DB-Server2,CN=Computers,DC=msoc,DC=local has been moved successfully to
Move-ADObject : Cannot validate argument on parameter 'TargetPath'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:4 char:51
+ ... t -Identity $computer -TargetPath $targetOU.DistinguishedName -Confir ...
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Move-ADObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

Computer CN=Utils-Server,CN=Computers,DC=msoc,DC=local has been moved successfully to
PS C:\temp>
我们期望
服务器
应该移动到它相应的
OU

谢谢你的帮助!多谢各位

更新1: 我尝试将代码更改为以下内容:

$CSVFile = Import-Csv ".\OUs.csv"
foreach ($item in $CSVFile){
$computer = (Get-ADComputer $item.Server).DistinguishedName
$targetOU = (Get-ADOrganizationalUnit -filter "name -eq '$item.OUName'").DistinguishedName
    Move-ADObject -Identity $computer -TargetPath $targetOU -Confirm:$false
    Write-Host "Computer $computer has been moved successfully to $targetOU"
}
还是有同样的错误

更新2: 这项工作:

$CSVFile = Import-Csv ".\OUs.csv"
foreach ($item in $CSVFile){
    $computer = (Get-ADComputer $item.Server).DistinguishedName
    $targetOU = Get-ADObject -Filter "Name -eq '$($item.OUName)'"
    Move-ADObject -Identity $computer -TargetPath $targetOU.DistinguishedName -Confirm:$false
    Write-Host "Computer $computer has been moved successfully to $targetOU"
}

访问带引号字符串内变量中的属性时,必须使用
$(…)
对其进行转义,才能将其作为一个变量进行计算。因此,您的代码变成:

$targetOU = (Get-ADOrganizationalUnit -filter "name -eq '$($item.OUName)'")

访问带引号字符串内变量中的属性时,必须使用
$(…)
对其进行转义,才能将其作为一个变量进行计算。因此,您的代码变成:

$targetOU = (Get-ADOrganizationalUnit -filter "name -eq '$($item.OUName)'")