Powershell:如何正确地将变量传递给命令

时间:2014-01-27 23:51:20

标签: powershell activesync ems

如果我为此剔除了术语,我很抱歉,并且理解我对PowerShell很新。我已经阅读了一些指南,这个概念显然没有传达给我。

概念: 我想从Exchange 2010中删除用户的移动设备

  1. 从输入中识别用户

  2. 根据PhoneID的输入创建变量

  3. 使用phoneID变量删除电话

  4. 我相信我的问题在于如何将此数据传递给下一个命令。我知道附加的“@ [Identity”应该被删除,我记得读过一些关于如何传递数据的话,这样Powershell没有上下文?这是我非常简单的脚本。


    脚本

    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
    . $env:ExchangeInstallPath\bin\RemoteExchange.ps1
    Connect-ExchangeServer -auto
    
    $PU = Read-Host "Enter Username"
    
    $did = get-activesyncdevice -mailbox $PU | Select-Object identity
    
    Remove-ActiveSyncDevice -Identity $did
    

    错误

    我的错误如下,我试图研究我做错了什么,但我只是没有得到它:-(,我用XX取代了帐户的实际输出。

    Remove-ActiveSyncDevice : Cannot bind parameter 'Identity'. Cannot convert value "@{Identity=XX" to type 
    "Microsoft.Exchange.Configuration.Tasks.ActiveSyncDeviceIdParameter". Error: "Cannot convert the "@{Identity=XX}" value of type 
    "Selected.Microsoft.Exchange.Data.Directory.SystemConfiguration.ActiveSyncDevice" to type "Microsoft.Exchange.Configuration.Tasks.ActiveSyncDeviceIdParameter"."
    At line:1 char:35
    + Remove-ActiveSyncDevice -Identity $did
    +                                   ~~~~
        + CategoryInfo          : InvalidArgument: (:) [Remove-ActiveSyncDevice], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchange.Management.Tasks.RemoveMobileDevice
    

    任何关于此的帮助或建议都会令人惊叹!

1 个答案:

答案 0 :(得分:4)

当您使用Select-Object并仅为其提供一个属性名称时,您只需使用一个属性即可获得对象。但即使它只有一个属性,你仍然需要按名称引用一个属性:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
. $env:ExchangeInstallPath\bin\RemoteExchange.ps1
Connect-ExchangeServer -auto

$PU = Read-Host "Enter Username"

$did = get-activesyncdevice -mailbox $PU | Select-Object identity

Remove-ActiveSyncDevice -Identity $did.identity