0

Follow 脚本在 win 7 下运行良好,没有任何问题,但是当我在 windows 8 上加载我的应用程序以查看所有问题时,我发现该脚本将不再正常工作。它是一个非常简单的脚本,用于加载用户交换邮箱以搜索用户是否在更大的应用程序中拥有邮箱。它实际上是用 python 编写的,因为我使用 IronPython 作为插件系统。

    password = SecureString()
    str_password = "PASSWORD"
    str_user = "EXCHUSER"
    uri = "http://" + exchangeServerIP + "/PowerShell"

    for c in str_password:
        password.AppendChar(c)

    creds = PSCredential(str_user, password)

    connectionInfo = WSManConnectionInfo(Uri(uri), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", creds)

    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic

    runspace = RunspaceFactory.CreateRunspace(connectionInfo)

    runspace.Open()

    powershell = PowerShell.Create()
    powershell.AddCommand("Get-Mailbox")
    if self.txtUsername.Text != "*":
        powershell.AddParameter("Identity", self.txtUsername.Text)

    powershell.AddParameter("ResultSize", "Unlimited")
    powershell.Runspace = runspace

    results = powershell.Invoke()

    if results == None or results.Count <= 0:
        MessageBox.Show("No mailboxes can be found!")
        runspace.Close()
        runspace.Dispose()
        powershell.Dispose()
        return

    self.dataGridView1.Rows.Clear()

    for result in results:
    >>>>>>> if result.Properties != None:   (ERROR HERE)  <<<<<<<
                if result.Properties["Name"] != None:
                    if result.Properties["Name"].Value != None:
                        System.Console.WriteLine(result.Properties["Name"].Value.ToString())

    runspace.Dispose()
    runspace.Close()
    runspace = None

    powershell.Dispose()
    powershell = None

    connectionInfo = None

我已经标记了我得到错误的地方,说 result.Properties 是 NoneType ,在调试时我可以看到它已被填充并且正确的结果在那里。不确定 Windows 8 / .net 4.5 是否是问题的原因,但在 win 7 确切代码无空值下工作正常。任何建议都会有很大帮助。

更新(答案):

经过不断的挖掘,我终于发现问题出在 Powershell 3 上。使用 Powershell 2 和 IronPython 访问成员我可以使用 result.Members["Name"].Value 但是使用 Powershell 3 和 DLR,IronPython 将返回 null 值result.Members Collection,所以我必须将其称为 result.Name。(其中结果 = PSObject)

4

1 回答 1

0

让我知道您在编译上述代码时遇到了什么错误。

1.首先检查您的代码sdk版本是否与您当前的软件版本匹配。

2.使用Visual Studio 2008/09/10/11开发的代码/应用程序不能在Visual Studio 2012中运行。

3.如果你复制了windows 7应用程序文件在win8下编译,它不会工作。只需在vs 2012中从头开始创建/编码。

于 2012-12-01T21:56:36.423 回答