首页 > 解决方案 > Powershell - 无法将变量传递给命令行开关

问题描述

当我持有一个变量并将其传递给命令行开关时,我得到的结果不一致。也许我只是在powershell中错误地使用变量?如果有办法准确查看我的 Visual Studio Code 在运行时发送的代码行,那将会很有帮助。

我的代码在执行前两个过滤器时返回一个 $null 对象。我已经确认 $username 实际上确实包含字符串“userLoginName”,但它似乎没有正确传递给 Get-ADUser 命令行开关。

PS C:\> $username = "userLoginName"

PS C:\> Get-ADUser -Filter {SAMAccountName -eq "$($username)"}
PS C:\> Get-ADUser -Filter {SAMAccountName -eq "$username"}
PS C:\> Get-ADUser -Filter {SAMAccountName -eq "userLoginName"}

为什么只有第三个 -filter 命令运行成功?前两个返回 $null,而不是 UserNotFound 类型的异常或任何东西。我在这里做错了什么?我只是不知道如何在 powershell 中使用变量(是的)?很抱歉成为菜鸟,但感谢您抽出宝贵的时间。

标签: powershellvariables

解决方案


看到这个帖子。出于某种原因,AD 调用的-Filter参数不喜欢将字符串变量作为 ScriptBlock 的一部分(您可以阅读该帖子以获取更多信息)。-Filter但是作为字符串传递应该可以。

Get-ADUser -Filter "SAMAccountName -eq '$username'"

或者,如果您只想使用 SAMAccountName 查找 AD 用户,您可以执行Get-ADUser -Identity $username. 这可能更容易。使用该-Filter参数的好处(或有时后果)是,就像您发现的那样,如果找不到用户,它不会引发异常。如果您使用该-Identity参数,如果找不到用户,它将引发异常。


推荐阅读