我正在尝试使用Powershell将组成员身份从一个用户复制到AD中的另一个用户。我收到下面的错误。似乎想不通。
Get-ADUser -server "test.server.com" -Identity user11 -Properties memberof |
Select-Object -ExpandProperty memberof
Add-ADGroupMember -Member user22
我收到的错误是
Add-ADGroupMember : Parameter cannot be processed because the parameter name 'Member' is ambiguous. Possible matches include:
-Members
-MemberTimeToLive. At line:3 char:19
+ Add-ADGroupMember -Member user22
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Add-ADGroupMember], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameter,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
因此,让我们谈谈错误模棱两可的含义。
在Powershell中,你可以写速记
Get-ChildItems -path C:Test
与
Get-ChildItems -pat C:Test
如果我们查看来自 Microsoft 关于 Add-AdGroupMember 的文档
我们可以看到该命令有 2 个参数,其中包含MemberTimeToLive和-Members
错误的意思是它不知道您是在调用-Member还是-MemberTimeToLive。
这称为模棱两可
修复将是
Add-ADGroupMember -Members user22
错误消息非常清楚。PowerShell 对参数名称进行部分匹配,如果部分参数名称足以唯一标识,则会接受该名称。在您的情况下,部分参数-Member
不唯一匹配;它可能是指-Members
或-MemberTimeToLive
。要修复它,您应该使用-Members
而不是-Member
.
应该是添加-ADGroup成员-成员用户22
请注意,参数末尾有一个 S。 PowerShell无法确定您指的是成员还是MemberTimeToLive,当您仅使用member时。
但
尚未定义应将用户添加到哪个组。您的代码需要
添加-ADGroup成员 -成员用户22 -标识(组 ID(
您可以通过以下方法之一定义组标识: 尊贵名称 A GUID (objectGUID( 安全标识符 (objectSid( 安全帐户管理器帐户名称(sAMAccountName(
我遇到参数歧义的地方是一个问题,那就是当调用可执行文件的辅助脚本被调用时。 在这里,它变成了一个小提琴,因为解释器无法识别哪个参数是预期的,并立即假设它是与PowerShell关联的参数。例如,使用如下调用:
powershell MyPowershellCall.ps1 $ExecutableName "-Usr User `
-XML -O c:tempxmloutmy.xml -SQL `"where Entry %like 'Fix-it'`" `
-Err c:tempErrorLog$ExecutableName.log"
在这种情况下,-O 和 -Err 是与PowerShell 参数变量(即 $ErrorAction 和 $ErrorValue(匹配的不明确调用,但是 -O 是与$ExecutableName文件相关的参数,而 -Err 是可执行文件的日志。
解决方案是使用 ' 字符定义字符串的文字部分,并按如下方式打包字符串:
powershell MyPowershellCall.ps1 $ExecutableName "-Usr User `
-XML '-O' c:tempxmloutmy.xml -SQL `"where Entry %like 'Fix-it'`" `
'-Err' c:tempErrorLog$ExecutableName.log"
希望这对你们中的一些人有所帮助,
波奇