[英]Error connect to exchange online using of Office365 a/c whencreated property get-mailbox cmdlet
Error : The WinRM client cannot complete the operation within the time spe cified.
错误:WinRM客户端无法在指定的时间内完成操作。 Check if the machine name is valid and is reachable over the network and firewall exception for Windows Remote Management service is enabled.
检查计算机名称是否有效并且可以通过网络访问,并且启用了Windows远程管理服务的防火墙例外。 Error number: -2144108250
错误编号:-2144108250
ps1 code: 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# code: 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;
}
I want to connect to exchange and return the recent users from past 7 and 30 days. 我想连接交流并返回过去7天和30天的最近用户。
I've developed a powershell script that I run to do this. 我已经开发了一个Powershell脚本来执行此操作。 You can also change the WhenCreated attribute to another date attribute if needed.
如果需要,还可以将WhenCreated属性更改为另一个日期属性。 I usually run the commands to remote in separately with these commands
我通常将命令与这些命令分开远程运行
$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
But you could put them in your script if you want. 但是您可以根据需要将它们放在脚本中。 I usually run this script manually.
我通常手动运行此脚本。 You just need to change the number of days (make sure it stays negative), put in the correct file path and add any other attributes you want to get.
您只需要更改天数(确保它保持负数),输入正确的文件路径并添加要获取的任何其他属性即可。
$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.