脚本中的“读取主机”变量存在问题(Active Directory筛选器)

时间:2019-11-19 08:59:48

标签: powershell scripting

我已经在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 : Cannot validate argument on parameter 'SearchBase'. The argument is
null. Provide a valid value for the argument, and then try running the command
again.
At line:13 char:34
+ Get-ADUser -Filter * -SearchBase $OUNAME | Export-Csv

$OUNAME内容放入Get-ADUser时出现错误:

Get-ADUser : Cannot bind parameter because parameter 'Filter' is specified more
than once. To provide multiple values to parameters that can accept multiple
values, use the array syntax. For example, "-parameter value1,value2,value3"

如果我直接在脚本中输入一个数字(而不是使用变量$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放到脚本中,结果是可以接受的。 谁能告诉我如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

这种类型的过滤器对我有用,没有括号,外面没有双引号。必须使用双引号将外部解释为$ abc变量。同样,除非在双引号之前加了美元符号,否则括号是没有意义的。 $( )

-filter "Name -like '*$abc*'" 

答案 1 :(得分:0)

好的。我发现了问题。 撇号和引号应该颠倒。

    **WRONG**
Get-ADOrganizationalUnit -filter 'Name -like "*($abc)*"' | select -ExpandProperty DistinguishedName**strong text**

 **CORRECT*
Get-ADOrganizationalUnit -filter "Name -like '*($abc)*'" | select -ExpandProperty DistinguishedName

答案 2 :(得分:-1)

将$ NUMBER的变量类型定义为[String],它可能会起作用。

[String]$NUMBER = Read-Host 'Enter the number of Organizational Unit (without parentheses)'