このエラーの実際の意味を理解しようとしています。これまで、このエラー範囲に対する同様のヘルプ要求の検索は、パラメーターの欠落、パイプの欠落、単一または複数行の使用、さらに連結の問題から始まりましたが、決定的な理由を与える答えはありません。そのため、問題はコード形式であると推測します(これにより、追跡が非常に困難になります)。
これは、ターゲット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
}
}
}
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のパラメーター名を指定して、=を削除してみてください
_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
私の場合、それは–
および-
のように:
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"
私の場合、次のようにコードを読みやすくしようとしました。
"LONGTEXTSTRING " +
"LONGTEXTSTRING" +
"LONGTEXTSTRING"
に変更したら
LONGTEXTSTRING LONGTEXTSTRING LONGTEXTSTRING
それは働いた
私は使わなければなりませんでした
powershell.AddCommand("Get-ADPermission");
powershell.AddParameter("Identity", "complete id path with OU in it");
このエラーを乗り越えるには
私の場合、名前付きパラメーターの1つ(コマンドレット "Get-AzureStorageKey"の "-StorageAccountName")に破損した文字があり、エディター(SublimeText)で完全に正常であると表示されましたが、Windows Powershellは解析できませんでした。
一番下に戻るために、エラーメッセージから別の.ps1ファイルに問題のある行を移動して実行しましたが、「-StorageAccountName」パラメーターの先頭にエラーが表示されました。
キャラクターを削除し(これも実際のエディターでは正常に見えます)、再度入力すると、この問題が修正されます。