找不到接受争论的位置参数" xxx"

时间:2016-02-16 12:51:43

标签: powershell active-directory

我试图了解这个错误究竟意味着什么。到目前为止,对此错误的类似帮助请求的搜索范围包括缺少参数,缺少管道,使用单行或多行以及连接问题,但没有一个答案似乎给出明确的理由。所以我认为问题是代码格式(这使得追踪更加困难)。

这是我编写的脚本,用于将每个目标OU的活动目录用户从现在的任何格式重命名为firstname.surname格式。

我在AD中创建了一个测试OU,其中一些用户将触发错误,而另一些用户则不会。但是,不应该给我错误的用户给了我"无法找到接受争论的位置参数" firstname.surname"

我看不出脚本有什么问题,但希望有人可以给我一些指示。

Import-Module ActiveDirectory

$users = $null

$users = Get-ADUser -SearchBase "ou=Testing,ou=Users,dc=my,dc=domain" -Filter * -Properties *
foreach ($user in $users) {
    Write-Host "Processing... $($user)"
    $newname = $null

    # Check first/last name is set
    if (!$user.givenName -or !$user.Surname) {
        Write-Host "$($user) does not have first name or last name set. Please correct, skipping user."
        continue
    } else {
        $newname = ("$($user.givenName).$($user.Surname)")

        #Check if new username already exists
        if (dsquery user -samid $newname) {
            Write-Host "$($user) requires altered username with initial."

            if (!$user.Initials) {
                Write-Host "$($user) does not have any initials set. Please correct, skipping user."
                continue
            }

            $newname = ("$($user.givenName)$($user.Initials).$($user.Surname)")

            #Check if altered new username already exists
            if (dsquery user -samid $newname) {
                Write-Host "$($user) requires manual change. Please correct, skipping user."
                continue
            }
        }

        try {
            #Change UPN
            Set-ADUser $user -userPrincipalName = $newname
            #Change DN
            Rename-ADObject -identity $user -Newname $newname
        } catch {
            Write-Host "Error when renaming $($user). Error is: $($_.Exception.Message). User requires manual change. Please correct, skipping user."
            continue
        }
    }
}

8 个答案:

答案 0 :(得分:12)

powershell中的Cmdlet接受一堆参数。定义这些参数后,您可以为每个参数定义一个位置。

这允许您在不指定参数名称的情况下调用cmdlet。因此,对于以下cmdlet,路径属性的位置为0,允许您在调用时跳过键入-Path,因此以下两者都可以。

Get-Item -Path C:\temp\thing.txt
Get-Item C:\temp\thing.txt

但是,如果您指定的参数多于定义的位置参数,那么您将收到错误。

Get-Item C:\temp\thing.txt "*"

由于此cmdlet不知道如何接受第二个位置参数,因此会出现错误。您可以通过告诉它参数是什么来解决这个问题。

Get-Item C:\temp\thing.txt -Filter "*"

我假设您在以下代码行中收到错误,因为它似乎是您没有正确指定参数名称的唯一地方,也许它将=作为参数和$ username作为另一个参数。

Set-ADUser $user -userPrincipalName = $newname

尝试为$ user指定参数名称并删除=

答案 1 :(得分:5)

将我的core@philtest ~ $ curl https://MYIP.118.240.122:443/api/v1/namespaces/kube-system/secrets/default-token-93sd7 --insecure Unauthorized cmdlet转换为Write-Host之后,我遇到了此问题,并且我在参数周围缺少引号和parens。 cmdlet签名显然不一样。

  

Write-Information
  Write-Host this is a good idea $here< = BAD

这是在花费20-30分钟挖掘功能堆栈后纠正的cmdlet签名...

  

Write-Information this is a good idea $here< = GOOD

答案 2 :(得分:2)

在尝试使用字符_更改目录时遇到此问题。解决方案是使用字符串更改目录。

C:\> cd "my_new_dir"

答案 3 :(得分:0)

在我的情况下,其中一个命名参数中有一个损坏的字符(“-StorageAccountName”代表cmdlet“Get-AzureStorageKey”)在我的编辑器(SublimeText)中显示完全正常,但Windows Powershell无法解析它。

为了找到它的底部,我将错误消息中的违规行移动到另一个.ps1文件中,运行它,现在错误显示在我的“-StorageAccountName”参数的开头有一个拙劣的字符。

删除角色(在实际编辑器中看起来很正常)并重新输入它可以解决这个问题。

答案 4 :(得分:0)

在我的情况下,-之间的区别如下:

Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"

和:

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"

答案 5 :(得分:0)

我不得不使用

powershell.AddCommand("Get-ADPermission");
powershell.AddParameter("Identity", "complete id path with OU in it");

克服此错误

答案 6 :(得分:0)

就我而言,我试图通过以下方式使代码更具可读性:

"LONGTEXTSTRING " +
"LONGTEXTSTRING" +
"LONGTEXTSTRING"

一旦我将其更改为

LONGTEXTSTRING LONGTEXTSTRING LONGTEXTSTRING 

然后它起作用了

答案 7 :(得分:0)

在使用 AWS Powershell 工具

编写 Powershell 脚本以与 AWS CLI 交互时,我遇到了类似的挑战

我运行了命令:

Get-S3Bucket // List AWS S3 buckets

然后我得到了错误:

<块引用>

Get-S3Bucket : 无法找到接受参数列表的位置参数

这是我修复它的方法

Get-S3Bucket 不接受 // List AWS S3 buckets 作为属性。

我已将其作为评论放在那里,但 AWS CLI 不接受它作为评论。 AWS CLI 而是将其视为参数。

我不得不这样做:

#List AWS S3 buckets
Get-S3Bucket

仅此而已。

我希望这会有所帮助