【问题标题】:How to use a value as a variable?如何将值用作变量?
【发布时间】:2019-02-12 23:00:30
【问题描述】:

我正在创建一个 Powershell 脚本,可用于将邮箱转换为 Office 365 中的共享邮箱。但首先我想检查邮箱的状态是否为共享。

如果我运行这个命令,我会得到答案:

Get-Mailbox -identity $user | select-object IsShared

IsShared
--------
   False

所以我想使用这个在这种情况下为 False 的值。

$user = Read-Host -Prompt "What mailbox to check?"
$status = Get-Mailbox -identity $user | select-object IsShared 

If ($status -eq "false") 
    {Write-Host "$user status is NOT shared"}
Else 
    {write-host "$user status is shared"}

问题是我只收到最后一条消息作为回报。即使我更改此代码:

If ($status -eq true) 

所以显然我需要改变一些东西。但是什么?

【问题讨论】:

  • 这不是一个字符串"true"/"false"(注意引号)它是一个布尔值$true/$false所以你需要像这样检查它:$status -eq $false
  • 好的,谢谢您的意见。我更改了它,现在删除了引号并在前面添加了 $-sign: If ($status -eq $false) 但我仍然得到相同的输出。而不是正确的输出
  • 您将遇到另一个问题。在进行比较之前,您需要先扩展对象的值。 ...| select-object -ExpandProperty IsShared
  • @Matt 谢谢,这似乎成功了

标签: powershell office365


【解决方案1】:

即使它只显示False 的输出,它也不是字符串"true" / "false"(注意引号)它是boolean $true/$false

要检查IsShared,而不是使用Select-Object(还需要ExpandProperty 才能正常工作),您可以使用$status.IsShared 来引用该属性。如果您希望稍后在代码中使用它的任何其他属性,这会使原始对象保持不变。

(关于对象属性和值的小blog post。)

放在一起给出:

$user = Read-Host -Prompt "What mailbox to check?"
$status = Get-Mailbox -identity $user

if ($status.IsShared -eq $false) { Write-Host "$user status is NOT shared" }
else { Write-Host "$user status is shared" }

您也可以翻转if,因为它会默认检查$true

if ($status.IsShared) { Write-Host "$user status is shared" }
else { Write-Host "$user status is NOT shared" }

【讨论】:

    【解决方案2】:

    您必须将 Get-Mailbox -identity $user | select-object IsShared 替换为 Get-Mailbox -identity $user | select -ExpandProperty IsShared 前者不完全返回 false,而后者返回 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2013-12-23
      • 2016-03-01
      • 1970-01-01
      • 2020-10-03
      • 2023-04-09
      • 2011-01-16
      相关资源
      最近更新 更多