我在PowerShell(v. 5.1.17763.592)中创建了一个脚本,但它无法正常工作。
$NUMBER = Read-Host 'Enter the number of Organizational Unit (without parentheses)'
$TMPFILENAME = Get-ADOrganizationalUnit -filter 'Name -like "*($NUMBER)*"' | select -ExpandProperty Name
$FILENAME = $TMPFILENAME | Out-String
$FILENAME = $FILENAME + ".csv"
$FILENAME = $FILENAME -replace 's',''
$FILENAME = $FILENAME -replace '&',''
$OUNAME = Get-ADOrganizationalUnit -Filter 'Name -like "*($NUMBER)*"' |
select -ExpandProperty DistinguishedName
New-Item -Path "c:Raports" -ItemType Directory -ErrorAction SilentlyContinue
Get-ADUser -Filter * -SearchBase $OUNAME | Export-Csv "C:Raports$FILENAME"
运行此程序后,我收到错误:
Get-ADUser:无法验证参数"SearchBase"上的参数。参数是 零。为参数提供有效值,然后尝试运行该命令 再。 行:13 字符:34 + 获取ADUser -过滤器 * -搜索库 $OUNAME |导出-csv
当我在Get-ADUser
中放入$OUNAME
内容时,出现错误:
Get-ADUser:无法绑定参数,因为参数"过滤器"被指定了更多 不止一次。为可以接受多个参数的参数提供多个值 值,使用数组语法。例如,"-参数值1,值2,值3">
如果我直接将一个数字放入脚本中(而不是使用变量$NUMBER
),它工作正常,但我想允许用户自己输入这个数字。
编辑(几个小时后:))
我刚刚意识到这个问题属于可变变速器。
Get-ADOrganizationalUnit -filter 'Name -like "*(202)*"' | select -ExpandProperty DistinguishedName
Get-ADOrganizationalUnit -filter 'Name -like "*($abc)*"' | select -ExpandProperty DistinguishedName
也就是说,如果我们的变量$abc等于 202(无论我们是否将其定义为:
$abc=202 or
$abc="202" or
$abc=Read-Host
)
它不会给出任何结果, 但是如果我直接把202放到脚本中,结果是可以接受的。 谁能告诉我如何解决这个问题?
这种类型的过滤器对我有用,没有括号,外面有双引号。 双引号需要位于外部,以便解释$abc变量。 此外,括号在双引号内毫无意义,除非前面有美元符号。$( )
-filter "Name -like '*$abc*'"
好吧。我发现了问题。 撇号和引号应颠倒。
**WRONG**
Get-ADOrganizationalUnit -filter 'Name -like "*($abc)*"' | select -ExpandProperty DistinguishedName**strong text**
.
**CORRECT*
Get-ADOrganizationalUnit -filter "Name -like '*($abc)*'" | select -ExpandProperty DistinguishedName
将$NUMBER的变量类型定义为 [字符串],它可能会起作用。
[String]$NUMBER = Read-Host 'Enter the number of Organizational Unit (without parentheses)'