繁体   English   中英

创建属性get-mailbox cmdlet时使用Office365 a / c连接到联机交换时出错

[英]Error connect to exchange online using of Office365 a/c whencreated property get-mailbox cmdlet

错误:WinRM客户端无法在指定的时间内完成操作。 检查计算机名称是否有效并且可以通过网络访问,并且启用了Windows远程管理服务的防火墙例外。 错误编号:-2144108250

ps1代码:

param
(
[Parameter(Mandatory=$true)][System.Management.Automation.PSCredential]$credentials
)

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $credentials -Authentication Basic –AllowRedirection
Import PSSession $Session
Get-Mailbox

C#代码:

PSCredential credential;
private Runspace runspace;
private string UserName = ConfigurationManager.AppSettings["office365username"];
private string Password = ConfigurationManager.AppSettings["office365password"];

internal PSHelper()
{
    //Create the object of PSCredentials class
    credential = new PSCredential(this.UserName, CreateSecurePassword(this.Password));
    InitialSessionState SessionState = InitialSessionState.CreateDefault();
    SessionState.ImportPSModule(new[] { "MSOnline" });
    InitialSessionState Session = InitialSessionState.CreateDefault();
    SessionState.ImportPSModule(new[] { "PSSession" });
    //Create new runspace
    runspace = RunspaceFactory.CreateRunspace(SessionState);
    runspace.Open();
}

public GetRecentUsersCountResponse GetRecentUserCount()
{
    GetRecentUsersCountResponse Response = new GetRecentUsersCountResponse();
    try
    {

    int CountValue = 0;
    DateTime BeginDateForWeek;
    DateTime EndDateForWeek;
    string script = ReadPowerShellScript("GetRecentUserCount.ps1");
    Command cmd = new Command(script, true);
    cmd.Parameters.Add(new CommandParameter("credentials", credential));
    Pipeline pipeline = runspace.CreatePipeline();
    pipeline.Commands.Add(cmd);
    pipeline.Input.Close();
    Collection<PSObject> collectionPSObject = pipeline.Invoke();
    if (collectionPSObject.Count > 0)
    {
        foreach (PSObject itemUser in collectionPSObject)
        {
            //check if the user if licensed,IsActive,WhenCreated
            if (itemUser.Properties["IsLicensed"] != null && itemUser.Properties["IsActive"] != null && itemUser.Properties["WhenCreated"] != null)
            {
                if (Convert.ToBoolean(itemUser.Properties["IsLicensed"].Value) && Convert.ToBoolean(itemUser.Properties["IsActive"].Value) && itemUser.Properties["WhenCreated"] != null)
                {
                    BeginDateForWeek = DateTime.Now;
                    EndDateForWeek = Convert.ToDateTime(itemUser.Properties["WhenCreated"].Value);
                    TimeSpan DifferenceofWeekDate = BeginDateForWeek - EndDateForWeek;
                    int DiffernceofDays = Convert.ToInt32(DifferenceofWeekDate.Days);
                    //Count only if  recently created users from last 7 days
                    if (DiffernceofDays <= 30)
                    {
                        CountValue++;
                    }

                }

            }
        }
    }
    pipeline.Stop();
    if (pipeline.Error.Count > 0)
    {
        StringBuilder builder = new StringBuilder();

        foreach (object item in pipeline.Error.ReadToEnd())
        {
            builder.Append(item.ToString());
            builder.Append(" - ");
        }
        Response.ErrorMessage = builder.ToString();
    }

    if (CountValue <= 7)
    {
        Response.RecentUserCountWeek = CountValue;
    }

    if (CountValue <= 30)
    {
        Response.RecentUserCountMonth = CountValue;
    }
    }

    catch (Exception ex)
    {
    Response.ErrorMessage = ex.Message;
    }
    finally
    {
    runspace.Dispose();
    }
    //return Response;
    return Response;
}

我想连接交流并返回过去7天和30天的最近用户。

我已经开发了一个Powershell脚本来执行此操作。 如果需要,还可以将WhenCreated属性更改为另一个日期属性。 我通常将命令与这些命令分开远程运行

$cred = Get-Credential
(enter full email address and password)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange 
  -ConnectionUri https://ps.outlook.com/powershell/ 
  -Credential $cred -Authentication Basic -AllowRedirection
Import-PSSession $Session

但是您可以根据需要将它们放在脚本中。 我通常手动运行此脚本。 您只需要更改天数(确保它保持负数),输入正确的文件路径并添加要获取的任何其他属性即可。

$fpath = "c:\users\(currentuser)\desktop\UserCreateDates.csv"
$numdays = -30

$logfilePath = (Test-Path $fpath)
if (($logFilePath) -ne "True")
{
    New-Item $fpath -ItemType File
    Add-Content $fpath "Name,EmailAddress,Created"
}
else
{
    Clear-Content $fpath
    Add-Content $fpath "Name,EmailAddress,Created"
}

$date1 = [DateTime]::Today.AddDays($numdays)
$Mailboxes = Get-Mailbox -ResultSize Unlimited -filter {RecipientType -eq "UserMailbox"} 

ForEach ($Mailbox In $Mailboxes) {
$DisplayName = """" + $Mailbox.DisplayName + """"
$UPN = """" + $Mailbox.UserPrincipalName + """"
$mailboxCreated = $Mailbox.WhenCreated
if ($mailboxCreated -gt $date1)
    {
        $DisplayName + "," + $UPN + ",""" + 
        $mailboxCreated + """" | Out-File -FilePath $fpath -Append
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM