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
'prosource' 카테고리의 다른 글
XmlSerializer: 불필요한 xsi 및 xsd 네임스페이스 제거 (0) | 2023.09.10 |
---|---|
일반 함수를 명시적으로 전문화할 수 없습니다. (0) | 2023.09.10 |
Oracle 11g 파티션 테이블에서 동시 통계 수집 (0) | 2023.09.10 |
자바스크립트에서 언제, 왜 '거짓'을 반환해야 합니까? (0) | 2023.09.10 |
저장 프로시저의 조건부 간격 (0) | 2023.09.05 |