Powershell: Er kan geen positionele parameter worden gevonden die argument xxx accepteert

Ik probeer te begrijpen wat deze fout eigenlijk betekent. Tot dusverre varieert een zoektocht naar soortgelijke hulpverzoeken voor deze fout van ontbrekende parameters, ontbrekende leidingen, gebruik van enkele of meerdere regels en ook aaneenschakelingsproblemen, maar geen van de antwoorden lijkt een definitieve reden te geven. Dus ik neem aan dat het probleem de code-indeling is (wat het een stuk moeilijker maakt om op te sporen).

Dit is mijn script dat ik aan het schrijven ben om Active Directory-gebruikers per doel-OE te hernoemen van welk formaat dan ook, naar een voornaam.achternaam-formaat.

Ik heb een test-OE in AD gemaakt met sommige gebruikers die fouten zullen veroorzaken en sommige niet. De gebruikers die me geen foutmelding zouden moeten geven, geven me echter de “een positionele parameter kan niet worden gevonden die het argument “voornaam.achternaam” accepteert

Ik kan niet zien wat er mis is met het script, maar hopelijk kan iemand me wat tips geven.

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

Antwoord 1, autoriteit 100%

Cmdlets in powershell accepteren een heleboel argumenten. Wanneer deze argumenten zijn gedefinieerd, kunt u voor elk ervan een positie definiëren.

Hiermee kunt u een cmdlet aanroepen zonder de parameternaam op te geven. Dus voor de volgende cmdlet is het path-attribuut gedefinieerd met een positie van 0, zodat u het typen van -Path kunt overslaan wanneer u het aanroept en als zodanig zullen beide volgende werken.

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

Als u echter meer argumenten opgeeft dan er positionele parameters zijn gedefinieerd, krijgt u de foutmelding.

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

Omdat deze cmdlet niet weet hoe de tweede positionele parameter moet worden geaccepteerd, krijgt u de foutmelding. U kunt dit oplossen door te vertellen wat de parameter moet zijn.

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

Ik neem aan dat je de foutmelding krijgt op de volgende regel code, omdat dit de enige plek lijkt te zijn waar je de parameternamen niet correct specificeert, en misschien behandelt het = als een parameter en $username als een andere parameter.

Set-ADUser $user -userPrincipalName = $newname

Probeer de parameternaam voor $user op te geven en de =

. te verwijderen


Antwoord 2, autoriteit 69%

Ik had dit probleem na het converteren van mijn Write-Hostcmdlets naar Write-Informationen ik miste aanhalingstekens en haakjes rond de parameters. De cmdlet-handtekeningen zijn duidelijk niet hetzelfde.

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

Dit is de cmdlet-handtekening die is gecorrigeerd na 20-30 minuten te hebben besteed aan het doorzoeken van de functiestapel…

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


Antwoord 3, autoriteit 19%

In mijn geval was het het onderscheidtussen (En-streepje) en -(Hyphen) zoals in:

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

en:

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

streepjes, Afbreekstreepjesen Minustekensoh mijn!


Antwoord 4, autoriteit 8%

Ik had dit probleem bij het veranderen van directory, met het teken _. De oplossing was om een ​​string te gebruiken om van directory te veranderen.

C:\> cd "my_new_dir"

Antwoord 5, autoriteit 4%

In mijn geval was er een beschadigd teken in een van de genoemde params (“-StorageAccountName” voor cmdlet “Get-AzureStorageKey”) dat als volkomen normaal werd weergegeven in mijn editor (SublimeText), maar Windows Powershell kon het niet ontleden.

Om het tot op de bodem uit te zoeken, heb ik de beledigende regels van de foutmelding naar een ander .ps1-bestand verplaatst, dat uitgevoerd, en de fout vertoonde nu een mislukt teken aan het begin van mijn parameter “-StorageAccountName”.

p>

Het verwijderen van het teken (wat er weer normaal uitziet in de eigenlijke editor) en het opnieuw typen verhelpt dit probleem.


Antwoord 6, autoriteit 4%

Ik moest

. gebruiken

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

om voorbij deze fout te komen


Antwoord 7

In mijn geval had ik geprobeerd de code leesbaarder te maken door:

"LONGTEXTSTRING " +
"LONGTEXTSTRING" +
"LONGTEXTSTRING"

Zodra ik het heb gewijzigd in

LONGTEXTSTRING LONGTEXTSTRING LONGTEXTSTRING 

Toen werkte het


Antwoord 8

Ik had een soortgelijke uitdaging bij het schrijven van een Powershell-script voor interactie met AWS CLImet behulp van de AWS Powershell Tools

Ik heb het commando uitgevoerd:

Get-S3Bucket // List AWS S3 buckets

En toen kreeg ik de foutmelding:

Get-S3Bucket: er kan geen positionele parameter worden gevonden die de argumentenlijst accepteert

Zo heb ik het opgelost:

Get-S3Bucketaccepteert // List AWS S3 bucketsniet als attribuut.

Ik had het daar als commentaar geplaatst, maar het wordt niet geaccepteerd door de AWS CLIals commentaar. AWS CLIziet het eerder als een parameter.

Ik moest het op deze manier doen:

#List AWS S3 buckets
Get-S3Bucket

Dat is alles.

Ik hoop dat dit helpt

LEAVE A REPLY

Please enter your comment!
Please enter your name here

one × 5 =

Other episodes