不存储简单的Powershell变量以供以后在脚本中使用

时间:2019-05-01 19:52:28

标签: powershell variables scope

我是PowerShell的新手,正在尝试构建一个简单的脚本。虽然我可以使用read-host命令设置变量,但调用时它确实会返回结果。

如果我用实际的城市名称代替脚本而不是varial,那么脚本会按预期工作,所以我一定缺少带范围的东西?

$location = Read-Host -Prompt "enter the city name"
#get a list of users who have mailboxes in a specific city
$cityusers = Get-User -ResultSize unlimited -Filter {(RecipientType -eq 'UserMailbox') -and (City -eq $location)}

我希望脚本返回基于read-host命令中城市输入的结果,但我会从多个城市获得用户。如果我按名称指定城市(无变量),它将按预期运行。

2 个答案:

答案 0 :(得分:0)

花点时间,但我想我发现了您的错误。请记住,变量实际上并不作为命令执行,而是仅在被调用时执行。 I.E

$dont_execute = 10+20
echo "Only this line shows."

这样做的时候:

$execute = 10+20
echo $execute
#Should show 30
echo "Oh hey, now you have two lines, but only because you used the variable."

请注意我如何使用变量而不是让它坐在那里。确保您的脚本没有做同样的事情。

答案 1 :(得分:0)

所以我现在终于可以工作了。问题在于我尝试按类型和城市筛选邮箱的方式:

-User -ResultSize unlimited -Filter {(RecipientType -eq 'UserMailbox') -and (City -eq $location)} 

这需要使用$ _这样的变量来完成:

#prompt for a city
$location = Read-Host -Prompt "enter the city"

#get a list of users who have mailboxes in a specific city
$cityusers = Get-User -ResultSize unlimited | Where-Object {($_.RecipientTypeDetails -eq 'UserMailbox') -and ($_.city -eq $location)}

感谢您的帮助