我试图了解这个错误究竟意味着什么。到目前为止,对此错误的类似帮助请求的搜索范围包括缺少参数,缺少管道,使用单行或多行以及连接问题,但没有一个答案似乎给出明确的理由。所以我认为问题是代码格式(这使得追踪更加困难)。
这是我编写的脚本,用于将每个目标OU的活动目录用户从现在的任何格式重命名为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
}
}
}
答案 0 :(得分:12)
powershell中的Cmdlet接受一堆参数。定义这些参数后,您可以为每个参数定义一个位置。
这允许您在不指定参数名称的情况下调用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 "*"
我假设您在以下代码行中收到错误,因为它似乎是您没有正确指定参数名称的唯一地方,也许它将=作为参数和$ username作为另一个参数。
Set-ADUser $user -userPrincipalName = $newname
尝试为$ user指定参数名称并删除=
答案 1 :(得分:5)
将我的core@philtest ~ $ curl https://MYIP.118.240.122:443/api/v1/namespaces/kube-system/secrets/default-token-93sd7 --insecure
Unauthorized
cmdlet转换为Write-Host
之后,我遇到了此问题,并且我在参数周围缺少引号和parens。 cmdlet签名显然不一样。
Write-Information
Write-Host this is a good idea $here
< = BAD
这是在花费20-30分钟挖掘功能堆栈后纠正的cmdlet签名...
Write-Information this is a good idea $here
< = GOOD
答案 2 :(得分:2)
在尝试使用字符_
更改目录时遇到此问题。解决方案是使用字符串更改目录。
C:\> cd "my_new_dir"
答案 3 :(得分:0)
在我的情况下,其中一个命名参数中有一个损坏的字符(“-StorageAccountName”代表cmdlet“Get-AzureStorageKey”)在我的编辑器(SublimeText)中显示完全正常,但Windows Powershell无法解析它。
为了找到它的底部,我将错误消息中的违规行移动到另一个.ps1文件中,运行它,现在错误显示在我的“-StorageAccountName”参数的开头有一个拙劣的字符。
删除角色(在实际编辑器中看起来很正常)并重新输入它可以解决这个问题。
答案 4 :(得分:0)
在我的情况下,–
和-
之间的区别如下:
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"
答案 5 :(得分:0)
我不得不使用
powershell.AddCommand("Get-ADPermission");
powershell.AddParameter("Identity", "complete id path with OU in it");
克服此错误
答案 6 :(得分:0)
就我而言,我试图通过以下方式使代码更具可读性:
"LONGTEXTSTRING " +
"LONGTEXTSTRING" +
"LONGTEXTSTRING"
一旦我将其更改为
LONGTEXTSTRING LONGTEXTSTRING LONGTEXTSTRING
然后它起作用了
答案 7 :(得分:0)
在使用 AWS Powershell 工具
编写 Powershell 脚本以与 AWS CLI 交互时,我遇到了类似的挑战我运行了命令:
Get-S3Bucket // List AWS S3 buckets
然后我得到了错误:
<块引用>Get-S3Bucket : 无法找到接受参数列表的位置参数
这是我修复它的方法:
Get-S3Bucket
不接受 // List AWS S3 buckets
作为属性。
我已将其作为评论放在那里,但 AWS CLI 不接受它作为评论。 AWS CLI 而是将其视为参数。
我不得不这样做:
#List AWS S3 buckets
Get-S3Bucket
仅此而已。
我希望这会有所帮助