如何修复Powershell脚本的不明确参数



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

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

波奇

最新更新