【问题标题】:simple powershell variable not being stored for use later in script未存储简单的 powershell 变量以供稍后在脚本中使用
【发布时间】:2019-05-01 19:52:28
【问题描述】:

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

如果我用实际的城市名称替换脚本而不是变量,它会按预期工作,所以我一定会遗漏一些有范围的东西吗?

$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 命令中的城市输入返回结果,但我却从多个城市获取用户。如果我按名称(无变量)指定城市,它将按预期工作。

【问题讨论】:

标签: powershell variables scope


【解决方案1】:

花了我一分钟,但我想我发现了你的错误。请记住,变量实际上并不作为命令执行,而是仅在调用时执行。即

$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."

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

【讨论】:

  • 你说的有道理,但我无法弄清楚如何调整我的脚本以使变量“活动”。我已经尝试过调用表达式,但这似乎也不起作用。也许我需要完全重写它。
  • 这个怎么样。发布您遇到问题的脚本部分(确保您取出敏感信息),我会修改它以便您理解。
  • 所以我尝试创建一个不依赖于 O365 的示例来简化测试,它实际上正在工作 $a = Read-Host -Prompt "Type the service name e.g. WinRM" $b = Get-Service | Where-Object {($_.Status -eq "Running") -and ($_.ServiceName -eq $a)} $b 也许原始代码块中的 -filter 是问题?
【解决方案2】:

所以我现在终于有了这个工作。问题在于我尝试按类型和城市过滤邮箱的方式:

-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)}

感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多