如何修复PowerShell脚本的二义性参数

mfuanj7w  于 2022-11-10  发布在  Shell
关注(0)|答案(4)|浏览(368)

我正在尝试使用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
xqnpmsa8

xqnpmsa81#

那么,让我们来讨论一下错误模糊是什么意思。
在PowerShell中,您可以写下速记

Get-ChildItems -path C:\Test

与之相同

Get-ChildItems -pat C:\Test

如果我们查看Microsoft在Add-AdGroupMember上的文档
我们可以看到,该命令有两个参数,其中有成员**-MemberTimeToLive-Members**
错误的意思是它不知道**-Members是在调用-Members还是-MemberTimeToLive**
这叫做模棱两可
解决办法是

Add-ADGroupMember -Members user22
6vl6ewon

6vl6ewon2#

错误消息非常清楚。PowerShell执行参数名称的部分匹配,如果部分参数名称足以唯一标识,则将接受该名称。在您的例子中,部分参数-Member不唯一匹配;它可能引用-Members-MemberTimeToLive。要修复它,您应该使用-Members而不是-Member

c7rzv4ha

c7rzv4ha3#

它应该是Add-ADGroupMember-Members User22
请注意,该参数的末尾有一个S。当你只使用Members时,PowerShell无法计算出你指的是MemberTimeToLive。

您尚未定义应将用户添加到哪个组。您的代码需要是
Add-ADGroupMember-Members用户22-身份(组ID)
您可以通过以下方式之一定义组标识:可分辨名称GUID(对象GUID)安全标识符(对象SID)安全帐户管理器帐户名(SAMAccount)

vbkedwbf

vbkedwbf4#

当调用调用可执行文件的第二个脚本时,我遇到了参数模糊性的问题。在这里,它变得很麻烦,因为解释器无法识别哪个参数是预期的,并立即假设它是与PowerShell关联的参数。例如,使用类似以下的呼叫:

powershell MyPowershellCall.ps1 $ExecutableName "-Usr User `
-XML -O c:\temp\xmlout\my.xml -SQL `"where Entry %like 'Fix-it'`" `
-Err c:\temp\ErrorLog\$ExecutableName.log"

在本例中,-O和-err是与PowerShell参数变量(即$ErrorAction和$ErrorValue)匹配的不明确调用,但是-O是与$ExecuableName文件相关的参数,-err是可执行文件的日志。
解决方案是使用‘字符定义字符串的文字部分,并按如下方式打包字符串:

powershell MyPowershellCall.ps1 $ExecutableName "-Usr User `
-XML '-O' c:\temp\xmlout\my.xml -SQL `"where Entry %like 'Fix-it'`" `
'-Err' c:\temp\ErrorLog\$ExecutableName.log"

希望这对你们中的一些人有帮助,
波奇

相关问题