Error : The WinRM client cannot complete the operation within the time spe cified. Check if the machine name is valid and is reachable over the network and firewall exception for Windows Remote Management service is enabled. Error number: -2144108250
ps1 code:
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:
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.
I've developed a powershell script that I run to do this. You can also change the WhenCreated attribute to another date attribute if needed. 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
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.