我已经在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放到脚本中,结果是可以接受的。
谁能告诉我如何解决这个问题?
答案 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)'