Microsoft Teams network assessment tool

If you are in the process of migrating from Skype for Business to Microsoft Teams for the first time, in that case, always is a best practice to execute the network assessment tool to identify any possible bottleneck in your internal network.

Sometimes, even when you have excellent network switches, the problem can be wireless clients’ access points.
When there is a branch office in the company, because they don’t have the same infrastructure as in the headquarter, this kind of tool will help you identify possible network problems before implementing Microsoft Teams.

Suppose you are already using Microsoft Teams, and you have bad quality in either voice or video. In that case, this tool is a good resource to identify what device or configuration is causing these failures.
When I say failures in your network, maybe it is just the quality of service configuration or adjustments that will allow using the same network. Still, with some improvements for the voice or video, in the same way, you will find some delays in your network or jitters, but again, if you don’t have this kind of tools, it will be hard to be 100% sure about what is going on in your internal network.

For all the messaging administrators that were using the same tool but for the Sky for business, this new version is exclusively for Microsoft Teams.

You can get that tool from this link Download Microsoft Teams Network Assessment Tool from Official Microsoft Download Center, download and install it on a computer.

Accept the license terms and click on Install
The progress bar will appears and also another window to install the program
Click on Next
Be careful of the path, you will need this information later
Click install and this is the last step.
Using a windows explorer, go to the installation path and double click on NetworkAssessmentTool.exe
You will see the tool validating the ports, IP’s to start the performance check.

Where you can see the results?

Open the file NetworkAssessmentTool.exe.config and you will find these configuration, you can modify if needed.

  <!-- Audio: 50000-50019
       Video: 50020-50039
       VBSS:  50040-50059 -->
  <add key="MinimumSourcePort" value="50000"/>
  <add key="MaximumSourcePort" value="50019"/>

  <!-- Duration of media flow for the quality checker, in seconds                               -->
  <!-- Note that Ctrl+C can be pressed at any time to stop the quality check                    -->
  <add key="MediaDuration" value="300"/>

  <!-- File name of where detailed service connectivity check results are stored                -->
  <!-- Directory: %appdata%\..\Local\Microsoft Teams Network Assessment Tool                    -->
  <add key="OutputFileName" value="service_connectivity_check_results.txt"/>

  <!-- File name of where quality check results are stored                                      -->
  <!-- Directory: %appdata%\..\Local\Microsoft Teams Network Assessment Tool                    -->
  <add key="ResultsFileName" value="quality_check_results.csv"/>

Thanks for reading, I hope it helps.

Tony Gonzalez

New feature in M365 to avoid email flow issues

I do remember in the past, when I started having issues with email been rejected, obviously we got a spike on tickets because this problem was affecting the whole company. After checking the NDR (Non-delivery report) and different workarounds, I realize that a certificate for exchange has expired.

There are different approaches to identify whether a certificate is about to expire; in this article https://tonygonzalez0379.com/2020/05/25/how-to-check-certificates-expiration-date-using-powershell, you can find how to use PowerShell to identify proactively if a certificate will expire in a period of time, in my case, I use 30 days in advance, so this script is being executed on weekends. You have plenty of time to renew the certificate before you significantly impact all end users.

Another common issue that affects the email flow is when a domain name is about to expire; sometimes, we get a domain name only for a year, and then when this domain expires, Exchange can’t continue delivering email to those users that contain the specific domain in the email address.

It is common that a user has different SMTP addresses, because those accounts need to receive emails using other domains, the same approach as the certificate, you could create a PowerShell script to validate the expiration date using The Who is information for those domains.

The good news is that Microsoft 365 now has a solution that can help the administrators to proactively identify if a certificate or domain name that is part of the registered domains in M365 is about to expire; this feature is new, and you will be able to see this notification in the insight area.

Also, the administrator will receive an email with this notification. I believe that this is great for all the messaging administrators in the company, because if you are not proactive, there is a high risk of having a problem like everyone can’t send or receive emails, and the business impact could be huge.

Below you can see an example of the domain expiration. You can find this in the exchange ministration console on Office 365, in the inside tab. In the same way, you will find the information about the certificates here. Nonetheless, it is better to have a solution like PowerShell, this is the old school, and pretty much all the Administrators are familiar with this process.

Here you can see the domains that will expire soon

Thanks for reading.

Tony Gonzalez

The new Microsoft 365 defender and security center

I was researching the ATP policies in Office 365 when I saw a message about the new features in Office 365 defender, as sometimes it happens when you start reading about a specific topic. You find different links to other various topics, and at the end, you finish reading about something different as you started. This is the case.

I would like to mention some benefits that Microsoft 365 security center and Microsoft 365 defender have to protect the information that is hosted in your M365 tenant.

The new M365 security center it’s similar to having a SIEM (Security Information and Event Management) because it provides detection, analytics, and response to different events in your organization.

In the Microsoft 365 Security Center, you can get alerts and notifications about incidents regarding security breaches.

Incident dashboard

For example, when a computer is detected sending unusual traffic, using a different port to connect applications, sites, or protocols, or if a mailbox has received malicious content like malware, virus, or phishing.

The security defender solution, besides detecting all of these attacks, also gives some playbooks to mitigate the incident and make sure that the security breach is mitigated.

In the situation where a user receives malware, the incident dashboard contains all the information regarding the computer infected, IP address, location, user details, mailboxes, and the level of the risk.

In our experience as messaging administrators, we know that regardless of all the technologies or systems that we have to identify and block malware, sometimes some emails pass through. Therefore, we need to purge the delivered emails.

Now, Office 365 can identify those emails and delete them from the mailbox, even when they have been delivered; this is known as ZAP (Zero-Hour Auto Purge). Once Office 365 identifies this problem, an alert is triggered, and the alert is correlated with an incident. Therefore, in the dashboard, we can see an investigation related to this event.

Office 365 security can act immediately without any human intervention.

NOTE: It’s important to mention that ZAP does not work in a standalone exchange Online Protection (EOP) environment that protects an On-prem exchange environment.

Report of all emails that were zapped

You can see how many emails have been Zapped, how many mailboxes have been affected, and the status of the purge; that means you can double-check that no one has that malicious email in the mailbox.

In the Microsoft 365 security center, we can see not only the email threats but their kind of alert and their status; meaning, whether that alert has been mitigated or it is in process, and you can drill down to see all details.

Part of the information that contains the alerts, you can see the user name, title, department, computer name, IP address, location, and much more data that is helpful to the administrator to review if the user was trying to log in on different computers that might be at risk.

Details about a user with a high risk score

As you can see from this figure, we could identify how risky a user is. In this example, the user is a high priority to investigate due to all the different events that her account had. Also, we can see all the various activities the user had in previous days or weeks.

Office 365 provides a score where we can quickly identify the top users where you need to take action because they can be compromised.

With the advanced hunting tool, you are able to query different system applications from Office 365 such as Defender for Office 365, Defender for EndPoint, Defender for Identity, Cloud App Security (CAS), ATP, EOP, and then use a query to get information from all this telemetry.

Advance hunting console

The output of these queries can give us more valuable information about an incident. For example, if there is a situation where the user account is compromised, we are talking that these credentials were trying to be stolen. Therefore we can identify if those credentials were used to try to access other computers.

As we know, some attackers start with a typical user and then, they move laterally until they find an admin user that can have access to any domain controller in the network.

After reviewing all the different capabilities that Microsoft Office 365 security provides, the solution can automatically detect anomalies, gathering formation from other Office 365 security products; as I stated before, now Office 365 has a kind of SIEM product where the security team is able to control all the different security incidents.

Alert when credentials were stolen or theft

Furthermore, we can see alerts regarding inbox forwarding rules to external email addresses, this is a common method the attackers use to extract information from users or companies, M365 defender creates an alert to notify the administrator that there is a suspicious rule in a mailbox, and then, a security administrator must take a look at this configuration and start an investigation.

I am stunned that Microsoft now has this kind of solution working towards having a cloud environment more secure.

 There is something that I always tell other skeptical engineers about migrating to the cloud, is that Office 365 and Microsoft Azure provide all the tools to make a secure environment.

 There are many different tools, policies, services, products, and solutions that we can implement to have a secure environment in the cloud. For example, ATP (Azure Threat Protection) policies where we can configure antimalware, Anti-Spam policies, safe attachments, safe links, data loss prevention (DLP), information protection (AIP), cloud application security (CAS), and much more security configurations!

This topic has much more to cover; this is only scratching the surface. I want to continue talking about this in other posts.

Thanks for reading

source: https://docs.microsoft.com/en-us/microsoft-365/security/mtp/microsoft-threat-protection?view=o365-worldwide

coffee_or_beer

Thanks for reading, if this article was helpful or interesting, you can buy me either a coffee or beer.

Buy a coffee or beer to Tony, in that way he will continue working towards new article.

$1.00

How to use open file dialog in PowerShell

When you are working with files sometimes is easier use the open file dialog or select the files.

For example when you use the Import-Csv cmdlet to retrieve data from a csv you can use these lines:

$File = New-Object System.Windows.Forms.OpenFileDialog -Property @{

    InitialDirectory = [Environment]::GetFolderPath(‘Desktop’)

}

$null = $File.ShowDialog()

$FilePath = $File.FileName

Import-Csv $FilePath

Then work with all data in the Csv file.

The most important part of this code is the class System.Windows.Forms.OpenFileDialog that allows create the object $File

I have another post working with .csv files to see how process the records but for now I want to show you this nice feature.

Thanks – Gracias  – Dhanyavaad

How to purge emails

this only apply for exchange on-prem, can be exchange 2010, 2013 or 2016

Search-Mailbox tony@tonyexchange.com -SearchQuery ‘from:”brannon@companyx.net” subject:”December Unpaid Invoice” sent:10/11/2017’ -TargetMailbox “Exch Admin” -TargetFolder “Purged01″ -LogLevel full

The switches –LogLevel full mean that the result of the search will be copied to the folder Purged01 into the mailbox Exch Admin.

If we don’t want to copy put the switches -LogLevel full –logonly and the end of the above command.

Example:

Search-Mailbox tony@tonyexchange.com -SearchQuery ‘from:”brannon@companyx.net” subject:”December Unpaid Invoice” sent:10/11/2017’ -TargetMailbox “Exch Admin” -TargetFolder “Purged01″ -LogLevel full –logonly

If we want to delete the content just put the switch –DeleteContent.

Example:

Search-Mailbox tony@tonyexchange.com -SearchQuery ‘from:”brannon@companyx.net” subject:”December Unpaid Invoice” sent:10/11/2017’ –DeleteContent.

How to get all users in Active directory and Exchange using PowerShell

When we are using Exchange PowerShell and we want to retrieve all mailboxes we can use
Get-mailbox –resultsize unlimited otherwise you will get only 10000 mailboxes.
PS C:\> Get-Mailbox -ResultSize Unlimited
Name    Alias  Database      ProhibitSendQuota   ExternalDirectoryObjectId                
—-    —-   ——-        —————–    ———————
If you want to filter the query you can use
PS C:\> Get-Mailbox | ?{$_.Office -eq ‘US’}
The question mark stands for “where-object” and it’s a way to short the query.
For Active Directory is a quite different, if you want to retrieve all users you have to use
  Get-AdUser –Filter * -Properties *
If you want to filter the query you can use
Get-AdUser –Filter * -Properties Department | where-object {$_.Department –eq “IT”}
In the same way as before, you can use ? also
  Get-AdUser –Filter * -Properties Department | ?{$_.Department –eq “IT”}

Using $? And !$? in PowerShell

 

   This is very helpful when you need to validate the last operation if it has information (values), in other words, if the last command was successfully.
For example, I want to validate if a folder exists in my computer:
PS C:\> $Folder = Get-ChildItem -Path c:\temp
if($?)
{
    Write-Host “The folder Temp already exists” -ForegroundColor Yellow
}
else
{
    Write-Host “The folder Temp does not exists” -ForegroundColor Yellow
}
The folder Temp already exists
PS C:\> 
Let’s give it a try with a folder that doesn’t exist
PS C:\> $Folder = Get-ChildItem -Path c:\temp\NewOne
if($?)
{
    Write-Host “The folder Temp already exists” -ForegroundColor Yellow
}
else
{
    Write-Host “The folder Temp does not exists” -ForegroundColor Yellow
}
Get-ChildItem : Cannot find path ‘C:\temp\NewOne’ because it does not exist.
At line:1 char:11
+ $Folder = Get-ChildItem -Path c:\temp\NewOne
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\temp\NewOne:String) [Get-Chil
   dItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChi
   ldItemCommand
The folder Temp does not exists
PS C:\> 
Yo can use !$?also, just change the order in the if-else. I mean first the validation if the result will be false, it’s easier if we see this example:
PS C:\> $Folder = Get-ChildItem -Path c:\temp
if(!$?)
{
    Write-Host “The folder Temp does not exists” -ForegroundColor Yellow
}
else
{
    Write-Host “The folder Temp already exists” -ForegroundColor Yellow
}
The folder Temp already exists
PS C:\> 
Now let’s try with a folder that does not exist
PS C:\> $Folder = Get-ChildItem -Path c:\temp\NewOne
if(!$?)
{
    Write-Host “The folder Temp does not exists” -ForegroundColor Yellow
}
else
{
    Write-Host “The folder Temp already exists” -ForegroundColor Yellow
}
Get-ChildItem : Cannot find path ‘C:\temp\NewOne’ because it does not exist.
At line:1 char:11
+ $Folder = Get-ChildItem -Path c:\temp\NewOne
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\temp\NewOne:String) [Get-Chil
   dItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChi
   ldItemCommand
The folder Temp does not exists
PS C:\>
Thanks for reading

 

How to get the folders size in windows

   Sometimes when we have some space problems, we need to know what information ewe must delete. The first step is get the folders with more space in the disk.
   There is not a fast way to know that, worst-case scenario you have to go through all folders one by one and right click to see the size used on disk.
   Researching on internet I found some PowerShell scripts to get folders details like name and size, but taking information from different sources I have created a script and even when I don’t get any error it takes more than an hour to finish, this is not a good idea for desperate people like me…. ¯\_()_/¯
This is the script… Not sure if it works because after an hour running  without any error, it never finishes.
But as part of the research I found a very interesting site with a bunch of Microsoft tools, one of them is “Disk Usage”  a very fast and reliable tool
After download and unzip the tool, this is the result:
You can copy and paste the information in a spreadsheet and you will be able to see the information as follow:
Adding a column to convert the Size on Disc to MB

How to see Windows time settings

   The command W32tm /query /configuration works in all windows versions and its helpful when a server takes another timeserver and can be different from other servers or computers running an application or service and there is a time discrepancy.
   There are more tools and different parameters to use with that command but sometimes with /query /configuration are enough.  

for more details you can visit https://docs.microsoft.com/en-us/windows-server/networking/windows-time-service/windows-time-service-tools-and-settings

How to connect powershell to Skype for business online

To use all cmdlets for Skype, you must install the module, first download from Microsoft:

Click on the .exe file to install
Basically, is Next – Next – Finish
Once the module is installed, open your powershell as administrator.
To Create the session type these lines:
#only once
#Set-ExecutionPolicy RemoteSigned
$Cred = Get-Credential
$Session = New-CsOnlineSession -Credential$Cred
Import-PSSession $Session
NOTE: only the first time delete # in order to uncomment the second line to allow execute scripts. After that, you can comment this line again, is not needed the next time you execute this script to create the session.
Input the credentials to open the session
Once the session is established, the prompt will appear
And, you can type get-CsOnlineUser UserName and you will see all the user properties.

And that’s it. You can start using all cmdlets for Skype online.