希望您能幫忙!
在我工作的地方,当我们创建一个用户时,对象被放入“CN=>用户的全名<,OU=Something1,OU=Something2,DC=SomethingElse,DC=local”。
从那里,用户对象需要被移动到他们所处的OU的两个后续OU中的一个中(比如OU=Region1和OU=Region2)。
因此,用户对象的最终“目的地”是:OU=Region1,OU=Something1,OU=Something2,DC=SomethingElse,DC=local
或OU=Region2,OU=Something1,OU=Something2,DC=SomethingElse,DC=local
使用 PowerShell cmdlet“Move-ADObject”即可实现。输入Move-ADObject -identity "CN=CannonicalName,OU=OU2,OU=OU1,DC=Something,DC=local" -targetpath "OU=Region1/2,OU=OU2,OU=OU1,DC=Something,DC=local"
(您可能都很清楚)。
在创建过程中,我们使用.csv 文件输入我们创建的用户的详细信息 - 我们输入的详细信息如下:Name,SamAccountName,displayName,givenName,title,surname,initials,EmailAddress,UserPrincipalName,HomeDrive,HomeDirectory,Company,PostalCode,City,StreetAddress,OfficePhone,country
我想要做的是,我想在同一个文件夹中创建两个 .PS1 文件 - 一个将 CSV 文件中的“名称”参数(因为新用户的名称已经存在)带到 Region1“子”-OU,另一个用于 Region2“子”-OU - 但是当我创建仅包含以下代码的文件时,它会失败:
Import-CSV C:\Path\To\CSV\file.csv | Move-ADObject -identity "CN=$_.Name,OU=OU2,OU=OU1,DC=Something,DC=local" -targetpath "OU=Region1/2,OU=OU2,OU=OU1,DC=Something,DC=local"
是不是这样,Move-ADObject
无法从 CSV 文件获取输入 - 或者我犯了一个错误(如果是 - 我的错误是什么)?我对 PowerShell 脚本绝对不是初学者,因此我希望这里有人可以提供帮助。
有关显示版本信息以及我收到的错误消息的屏幕截图,请参阅http://i211.photobucket.com/albums/bb33/DKDexter999/SS_HostInfo_ErrorMsg.png
答案1
我发现获取对象比移动对象更容易。使用管道时,您需要将 AD 对象传递给 Move-ADObject,或者您可以传递完整的身份。因此,您将检索 ADUser,然后对其执行操作,即将其传递给 Move-ADOject。
Import-CSV C:\Path\To\CSV\file.csv | ForEach-Object { Get-ADUser -Identity $_.Name | Move-ADObject -targetpath "OU=Region1/2,OU=OU2,OU=OU1,DC=Something,DC=local" }
如果您能保证可以即时构建整个身份字符串,那么您的方法就是可行的。但是 CSV 必须包含身份字符串,“CN=Test User,OU=OU2,OU=OU1,DC=Something,DC=local”
我似乎无法对另一个答案添加评论,但我可以解释为什么您遇到字符串问题。这与引号字符串内的 $_ 变量扩展有关。您可以在此处看到此演示。
PS C:\> Import-Csv .\test.csv | %{$_.name}
Test User
PS C:\> Import-Csv .\test.csv | %{"$_.name"}
@{Name=Test User; SamAccountName=TU; displayName=Test User}.name
PS C:\> Import-Csv .\test.csv | %{"$($_.name)"}
Test User
我的 test.csv 文件包含:
Name,SamAccountName,displayName
Test User,TU,Test User
字符串扩展只是解析字符串内的 $_,使用 $( [variable] ) 告诉 powershell 扩展字符串内的变量。
所以使用这个应该可以
Import-CSV C:\Path\To\CSV\file.csv | %{ Move-ADObject -identity "CN=$($_.Name),OU=OU2,OU=OU1,DC=Something,DC=local" -targetpath "OU=Region1/2,OU=OU2,OU=OU1,DC=Something,DC=local" }
答案2
认为您想将 move-adobject 包装在 %{} 中
导入 CSV C:\Path\To\CSV\file.csv | %{Move-ADObject -identity "CN=$_.Name,OU=OU2,OU=OU1,DC=Something,DC=local" -targetpath "OU=Region1/2,OU=OU2,OU=OU1,DC=Something,DC=local" }
听起来也不是那么刻薄,我希望你有一个测试\开发环境域来开发\测试这些东西。
答案3
好吧,我遇到了同样的错误,强迫我的大脑仔细检查“OU”路径。我确信它是正确的;直到我再次检查并意识到我在目标路径中遗漏了整个 OU。快速修复,确保您提供对象移动的准确路径。相信我,仔细检查您的路径。我浪费/花费了 30 分钟。不必要的,因为我的路径是错误的。
例子:
我输入了“OU=_Staging,OU=CHA,OU=Delegated OUs,DC=,DC=,DC==”
我必须添加缺失的“工作站”OU,如下所示:
然后我输入:“OU=_Staging,OU=Workstations,OU=CHA,OU=Delegated OUs,DC=,DC=,DC===”
希望这对其他人有帮助!