web-dev-qa-db-ja.com

引数「xxx」を受け入れる定位置パラメーターが見つかりません

このエラーの実際の意味を理解しようとしています。これまで、このエラー範囲に対する同様のヘルプ要求の検索は、パラメーターの欠落、パイプの欠落、単一または複数行の使用、さらに連結の問題から始まりましたが、決定的な理由を与える答えはありません。そのため、問題はコード形式であると推測します(これにより、追跡が非常に困難になります)。

これは、ターゲットOUごとにActive Directoryユーザーの名前を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
        }
    }
}
18
David Hirst

PowerShellのコマンドレットは、一連の引数を受け入れます。これらの引数を定義すると、それぞれの位置を定義できます。

これにより、パラメーター名を指定せずにコマンドレットを呼び出すことができます。そのため、次のコマンドレットでは、path属性は0の位置で定義されており、呼び出し時に-Pathの入力をスキップできるため、次の両方が機能します。

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

ただし、定位置パラメーターが定義されているよりも多くの引数を指定すると、エラーが発生します。

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

このコマンドレットは2番目の定位置パラメーターを受け入れる方法を知らないため、エラーが発生します。これを修正するには、パラメーターの意味を伝えます。

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

パラメーター名を正しく指定していない唯一の場所であると思われるため、次のコード行でエラーが発生していると仮定します。

Set-ADUser $user -userPrincipalName = $newname

$ userのパラメーター名を指定して、=を削除してみてください

13
Alexis Coles

_Write-Host_コマンドレットを_Write-Information_に変換した後にこの問題が発生し、パラメーターの周りに引用符と括弧がありませんでした。コマンドレットの署名は明らかに同じではありません。

_Write-Host this is a good idea $here_
_Write-Information this is a good idea $here_ <= BAD

これは、関数スタックを20〜30分掘り下げて修正したコマンドレットの署名です...

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

7

私の場合、それはおよび-のように:

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"
0
Nae

私の場合、次のようにコードを読みやすくしようとしました。

"LONGTEXTSTRING " +
"LONGTEXTSTRING" +
"LONGTEXTSTRING"

に変更したら

LONGTEXTSTRING LONGTEXTSTRING LONGTEXTSTRING 

それは働いた

0
Frostiness

私は使わなければなりませんでした

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

このエラーを乗り越えるには

0
Bbb

私の場合、名前付きパラメーターの1つ(コマンドレット "Get-AzureStorageKey"の "-StorageAccountName")に破損した文字があり、エディター(SublimeText)で完全に正常であると表示されましたが、Windows Powershellは解析できませんでした。

一番下に戻るために、エラーメッセージから別の.ps1ファイルに問題のある行を移動して実行しましたが、「-StorageAccountName」パラメーターの先頭にエラーが表示されました。

キャラクターを削除し(これも実際のエディターでは正常に見えます)、再度入力すると、この問題が修正されます。

0
starmandeluxe