2016-02-16 39 views
8

このエラーが実際に意味するものを理解しようとしています。これまでのところ、このエラーに対する同様のヘルプ要求の検索には、パラメータの欠落、パイプの不足、単一行または複数行の使用、連結問題などがありますが、答えのどれも決定的な理由がありません。だから、私は問題がコードフォーマットであると仮定します(これは、追跡するのをより困難にします)。Powershell: "xxx"という引数を受け付ける位置パラメータが見つかりません

これは、ターゲットOUごとにアクティブなディレクトリユーザーの名前を変更するために作成したスクリプトです。どのような形式であっても、現在はfirstname.surname形式です。

私は、一部のユーザーがエラーをトリガするテストOUを作成しました。しかし、私にエラーを与えてはならないユーザは、「引数を受け入れる位置パラメータが見つからない」というメッセージが表示されます。

私はスクリプトに何が間違っているのかは分かりませんが、 。

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 
    } 
} 

}

+2

私たちに推測させる代わりに、エラーが発生した場所が参考になります。これは、 'Set-ADUser $ user -userPrincipalName = $ newname'という誤りです。削除する等号記号 – Matt

答えて

6

レットPowerShellでの引数の束を受け入れる。これらの引数が定義されている場合は、あなたがそれらのそれぞれの位置を定義することができます。

これは、あなたがspecifせずにコマンドレットを呼び出すことができますパラメータ名を入力してください。したがって、次のコマンドレットの場合、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 

$ユーザーのためのパラメータ名を指定し、=

+0

アレクシスの説明に感謝します。 –

2

を削除してください私はWrite-Informationに私のWrite-Hostコマンドレットを変換して、私はパラメータの前後に引用符や括弧を逃した後、この問題を持っていました。コマンドレットのシグネチャは明らかに同じではありません。

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

+1

これは非常に役に立ちました。私はこのエラーを受けていましたが、どこから投げられたのか分かりませんでした。ありがとうございました! – dstepan

0

私の場合のように完全に正常示した(コマンドレットは、 "get-AzureStorageKey" のための "-StorageAccountName")という名前のparamsのいずれかで、破損した文字があった私エディタ(SublimeText)でもWindows Powershellは解析できませんでした。

エラーメッセージの冒頭の行を別の.ps1ファイルに移動して実行したところ、「-StorageAccountName」パラメータの先頭にエラーが表示されました。

実際のエディタでは通常のように見える文字を削除して再入力すると、この問題が解決されます。

関連する問題