脚本中的读取主机变量(活动目录筛选器)出现问题



我在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)'

最新更新