prosource

Powershell: 인수 "xxx"를 사용하는 위치 매개 변수를 찾을 수 없습니다.

probook 2023. 9. 10. 12:21
반응형

Powershell: 인수 "xxx"를 사용하는 위치 매개 변수를 찾을 수 없습니다.

저는 이 오류가 실제로 무엇을 의미하는지 이해하려고 합니다.지금까지 매개 변수 누락, 파이프 누락, 단일 또는 다중 라인 사용, 연결 문제에 이르기까지 이 오류에 대한 유사한 도움말 요청을 검색했지만 어떤 답변도 명확한 이유를 제공하지는 않는 것 같습니다.그래서 문제는 코드 형식이라고 생각합니다. (이것은 추적하기를 훨씬 더 어렵게 만듭니다.)

이 스크립트는 활성화된 디렉토리 사용자의 이름을 대상 OU별로 현재 어떤 형식이든 이름으로 바꾸기 위해 작성하는 스크립트입니다.성 형식.

AD에서 오류를 유발하는 사용자와 그렇지 않은 사용자로 테스트 OU를 만들었습니다.그러나 오류를 주면 안 되는 사용자는 "first name" 인수를 받아들이는 위치 매개변수를 찾을 수 없습니다.성씨"

대본에 뭐가 문제인지는 잘 모르겠지만 누군가 나에게 조언을 해줄 수 있기를 바랍니다.

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

파워셸의 cmdlets는 많은 논쟁을 받아들입니다.이러한 인수를 정의하면 각 인수에 대한 위치를 정의할 수 있습니다.

이렇게 하면 매개 변수 이름을 지정하지 않고 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 "*"

당신이 파라미터 이름을 정확하게 지정하지 않은 유일한 곳인 것 같고, 아마도 =를 파라미터로, $1600를 다른 파라미터로 취급하고 있는 것 같습니다.

Set-ADUser $user -userPrincipalName = $newname

$user에 대한 매개 변수 이름을 지정하고 =을(를) 제거해 봅니다.

는 제 한 에 가 을 는 가 는 을 에 한 Write-Host에서 ≥ cmdlet입니다.Write-Information매개변수에 대한 인용문과 부모를 놓쳤어요cmdlet 서명은 분명히 동일하지 않습니다.

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

이것은 20-30분 동안 함수 스택을 파서 수정한 cmdlet 서명입니다.

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

디렉토리를 변경할 때 문자를 사용할 때 이 문제가 발생했습니다._. 해결책은 문자열을 사용하여 디렉토리를 변경하는 것이었습니다.

C:\> cd "my_new_dir"

내 경우에는 그것은 두 사람 사이의 구별이었습니다.(인덴시) 및-(하이픈) 다음과 같습니다.

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"

대시, 하이픈, 마이너스가 이런 식으로 표시됩니다!

제 경우 이름이 지정된 매개변수 중 하나("-StorageAccountName" for cmdlet "Get-AzureStorageKey")에 손상된 문자가 있었는데, 이는 편집기(SublimeText)에서 완벽하게 정상적으로 표시되었지만 Windows Powershell에서는 이를 구문 분석할 수 없었습니다.

이 문제를 해결하기 위해 오류 메시지에서 다른 .ps1 파일로 문제의 행을 이동하여 실행한 결과, "-StorageAccountName" 매개 변수의 시작 부분에 오류 문자가 표시되었습니다.

문자를 삭제하고(실제 편집기에서 정상으로 보이는) 다시 입력하면 이 문제가 해결됩니다.

나는 사용해야만 했습니다.

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

이 오류를 극복하기 위해

AWS Powershell Tools를 사용하여 AWS CLI와 상호 작용하기 위해 Powershell 스크립트를 작성할 때도 비슷한 문제가 있었습니다.

명령을 실행했습니다.

Get-S3Bucket // List AWS S3 buckets

그리고 오류가 발생했습니다.

Get-S3Bucket : 인수 목록을 받아들이는 위치 매개 변수를 찾을 수 없습니다.

제가 고친 방법은 이렇습니다.

Get-S3Bucket승낙하지 않음// List AWS S3 buckets속성으로서

댓글로 달았는데 AWS CLI에서 댓글로 허용하지 않습니다.AWS CLI에서는 오히려 매개 변수로 보고 있습니다.

저는 이런 식으로 해야 했습니다.

#List AWS S3 buckets
Get-S3Bucket

그게 전부입니다.

이게 도움이 됐으면 좋겠습니다.

제 경우에는 다음과 같이 코드를 좀 더 가독성 있게 만들기 위해 노력했습니다.

"LONGTEXTSTRING " +
"LONGTEXTSTRING" +
"LONGTEXTSTRING"

한번 바꿔봤더니.

LONGTEXTSTRING LONGTEXTSTRING LONGTEXTSTRING 

그 다음에 효과가 있었습니다.

언급URL : https://stackoverflow.com/questions/35433151/powershell-a-positional-parameter-cannot-be-found-that-accepts-argument-xxx

반응형