blog.atwork.at - Microsoftnews and infos about microsoft, technology, cloud and morehttps://blog.atwork.at/
http://www.rssboard.org/rss-specificationBlogEngine.NET 3.3.5.0de-DEhttps://blog.atwork.at/opml.axdhttps://blog.atwork.at/syndication.axdatworkblog.atwork.at0.0000000.000000Delegate365 changelog version 8.2<p>After the major update that came with <a href="https://blog.atwork.at/post/2018/10/22/Delegate365-changelog-version-8-1-new-features" target="_blank">Delegate365 v8.1</a>, v8.2 brings various improvements and fixes to optimize daily tasks in Delegate365. See the details here.</p><ul><li><strong>Run a setup:</strong> Admins need to run the Delegate365 setup after the upgrade process from <a href="https://blog.atwork.at/post/2018/10/22/Delegate365-changelog-version-8-1-new-features" target="_blank">v8.1</a> to v8.2. See the How-To at <a href="https://blog.atwork.at/post/2017/06/27/Delegate365-Re-run-the-setup" target="_blank">(Re)run the setup</a>.</li><li><strong>User license quick info:</strong> When hovering over a license checkbox in the user license panel, a new quick info informs about the license numbers that are available in the Office 365 tenant. This brings more transparency for admins to see if a license might be inactive because all licenses are assigned.<br><a href="http://blog.atwork.at/image.axd?picture=image_4375.png"><img width="600" height="248" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3321.png" border="0"></a><br>In this sample above, there are 25 E5 licenses available, and only 3 licenses are left (which means that 22 licenses are already assigned to users). In that OU, there are 7 E5 licenses used, and there is no quota defined.</li><li><strong>Distribution groups including other distribution group:</strong> Now, a distribution group can be member of another distribution group as shown here. This works for distribution groups only.<br><a href="http://blog.atwork.at/image.axd?picture=image_4378.png"><img width="600" height="309" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3324.png" border="0"></a><br><strong>Important:</strong> Due to the nature of Office 365 groups, only users can be added to an Office 365 group, no other groups.</li><li><strong>Reports:</strong> The different boxes were summarized. When a report is submitted, now there's one box <em>Scheduled reports</em> that shows reports waiting for generation, and one single box showing all <em>Completed reports</em>, regardless when they are scheduled.<br><a href="http://blog.atwork.at/image.axd?picture=image_4368.png"><img width="600" height="341" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3314.png" border="0"></a></li><li><strong>New report Groups Governance:</strong> This report in the <em>Delegate365</em> category at the end of the report list creates an overview of the entitled Office 365 groups in the tenant with the number of for each group.<br><a href="http://blog.atwork.at/image.axd?picture=image_4369.png"><img width="400" height="163" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3315.png" border="0"></a><br>The generated report delivers the following data: OU, GroupDisplayName, Classification, ObjectId, Mail, OwnerCount, GuestsCount, MembersCount, RenewedDate, Visibility, IsTeam, Owners, InternalMembers, ExternalMembers<br><a href="http://blog.atwork.at/image.axd?picture=image_4370.png"><img width="600" height="124" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3316.png" border="0"></a><br>So, the Groups Governance report informs about the number of group owners (to comply with any organization policies), external guests, members and group properties as the visibility and classification (if set) and the renew date and the type of a group.</li><li><strong>Message Trace:</strong> This has been extended, so that Distribution Groups, Shared Mailboxes, Resource Mailboxes and Contacts can be used. <br><a href="http://blog.atwork.at/image.axd?picture=image_4371.png"><img width="600" height="366" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3317.png" border="0"></a></li><li><strong>User field validation:</strong> The validation method has been extended for modifying the user properties, so that more special character are allowed. (Before, a validation error occurred and did not allow to save that content when entering data as below.)<br><a href="http://blog.atwork.at/image.axd?picture=image_4372.png"><img width="600" height="428" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3318.png" border="0"></a></li><li><strong>Copy a policy:</strong> An existing permission policy and a license policy can now be copied with the new menu to minimize the management effort. Confirm the message, and a copy with the name "Copy – [name]" policy is created, here it would be named "Copy - Scopeadministrator".<br><a href="http://blog.atwork.at/image.axd?picture=image_4379.png"><img width="600" height="245" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3325.png" border="0"></a><br>If a policy is copied, multiple times, the name is always "Copy – [name]". It makes sense to rename the policy then anyways. </li><li><strong>Administrator send API key per email:</strong> A link<em> Send API key to Admin</em> has been added to directly send an API key to the administrator. This is useful to hand over that key when the administrator shall be able to use the Delegate365 PowerShell module.<br><a href="http://blog.atwork.at/image.axd?picture=image_4373.png"><img width="600" height="399" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3319.png" border="0"></a><br>A notification in the bottom right corner informs when the email has been sent. The recipient gets an email that looks as here:<br><a href="http://blog.atwork.at/image.axd?picture=image_4374.png"><img width="298" height="400" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3320.png" border="0"></a><br>For more information about using the Delegate365 PowerShell module, see <a title="https://github.com/delegate365/PowerShell" href="https://github.com/delegate365/PowerShell" target="_blank">github.com/delegate365/PowerShell</a>.</li><li><strong>PowerShell:</strong> The command Set-DAdmin now allows to overwrite existing OU`s, Domains, Policy and the Active flag, see <a title="https://github.com/delegate365/PowerShell/blob/master/Set-DAdministrator.md" href="https://github.com/delegate365/PowerShell/blob/master/Set-DAdministrator.md#set-dadministrator" target="_blank">Set-DAdministrator</a>. There's a new command <a href="https://github.com/delegate365/PowerShell/blob/master/Delete-DAdministrator.md#delete-dadministrator" target="_blank">Delete-DAdmin</a> that allows to delete Delegate365 administrators. Fixed: <a href="https://github.com/delegate365/PowerShell/blob/master/Get-DAADUser.md" target="_blank">Get-DAADUser –All</a> and <em>Get-DAADUser -UnAssigned –All</em> delivered the same result. This has been fixed and the command returns all assigned or all unassigned users (for PowerShell Admins) . If the user is not a Powershell Admin, this commands always returns an empty list.</li><li><strong>Improvements and fixes:</strong> The internal webjobs have been reorganized for using LogicApps and small adaptions have been made.</li></ul><p>We hope you like the improvements. New Delegate365 demos automatically get the latest version, productive tenants will be upgraded by appointment.</p>https://blog.atwork.at/post/2019/03/10/Delegate365-changelog-version-8-2
https://blog.atwork.at/post/2019/03/10/Delegate365-changelog-version-8-2#commenthttps://blog.atwork.at/post.aspx?id=414131bd-e40d-42af-99bb-b87836fc63adSun, 10 Mar 2019 15:00:00 +0000Delegate365EnglishMicrosoftOffice365Microsoft365atworktphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=414131bd-e40d-42af-99bb-b87836fc63ad0https://blog.atwork.at/trackback.axd?id=414131bd-e40d-42af-99bb-b87836fc63adhttps://blog.atwork.at/post/2019/03/10/Delegate365-changelog-version-8-2#commenthttps://blog.atwork.at/syndication.axd?post=414131bd-e40d-42af-99bb-b87836fc63adSecure a web on Azure with an Azure Active Directory Multi-Tenant App<p>Azure offers a great platform for multiple types of apps and services, Web Apps are one of the PaaS service, we are using much. In some scenarios, it makes sense to host a static website on Azure, but to restrict access just for authenticated users. Well, AAD can help you with that by demanding a successful login with an Office 365 account. See how this works here.</p><h2>My sample static website</h2><p>My sample works with an <a href="https://azure.microsoft.com/en-us/services/devops/" target="_blank">Azure DevOps</a> task that automatically generates a HTML website from a source control repository, processes the web with <a href="https://jekyllrb.com/" target="_blank">Jekyll</a> in a container and saves the generated HTML artifacts to an <a href="https://azure.microsoft.com/en-us/services/app-service/" target="_blank">Azure website</a>. So, I picked a <a title="http://jekyllthemes.org/" href="http://jekyllthemes.org/" target="_blank">Jekyll Theme</a> and started a documentation with Markdown files in <a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a>. Then, I push the changes to my Azure DevOps repository and the build process generates the web in Azure. (That's material for another article sometime.) Anyway, in the end there exists a static HTML website in an Azure web app that can be accessed with the https://&lt;website&gt;.azurewebsites.net/ address.</p><p>My generated static website looks as here, you can see it's *.html files only (along with some .js, .css and images) and no dynamic webpages.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4358.png"><img width="600" height="399" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3304.png" border="0"></a></p><p>The goal is to protect that website so that users need to login with their Office 365 login. </p><h2>Secure it with AAD and create an app</h2><p>So, let's create an app in my Azure Active Directory (AAD). The app type is "Web App/API", with a custom URI and the home page URL pointing to the Azure website as here. I need to set Multi-tenanted to "On".</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4363.png"><img width="222" height="600" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3309.png" border="0"></a></p><p>Also, the Reply URL must be provided in the Settings. I added <code>/.auth/login/aad/callback</code> to the web URL as here. This means that, after a successful login, a redirection to that URL is happening.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4364.png"><img width="600" height="159" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3310.png" border="0"></a></p><p>When created, I need the Application ID. The app properties overview shows the most relevant data and the Application ID can be copied from here.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4365.png"><img width="400" height="179" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3311.png" border="0"></a></p><h2>Secure the web</h2><p>In the web`s <a href="https://portal.azure.com/#">Authentication / Authorization</a> page, we set the App Service Authentication to "On" and configure the web app to use AAD with our Application as here.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4361.png"><img width="600" height="484" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3307.png" border="0"></a></p><p>The registered Application ID from above must be provided here. Open the "Advanced" mode and paste it in the "Client ID" field.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4362.png"><img width="400" height="397" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3308.png" border="0"></a></p><p>Ok. We`re done with the configuration in Azure.</p><h2>Agree to the consent as Administrator</h2><p>This step is important (and this was my stumbling block). Since I did not consent as Administrator, other users could authenticate, but could not open the website. Google and my colleague <a href="https://twitter.com/waldekm" target="_blank">Waldek Mastykarz</a> helped out with the article <a title="https://blog.mastykarz.nl/configuring-multi-tenant-authentication-azure-app-service-authentication-options/" href="https://blog.mastykarz.nl/configuring-multi-tenant-authentication-azure-app-service-authentication-options/" target="_blank">Configuring multi-tenant authentication with Azure App Service authentication options</a>. In that article from 2016, Waldek pointed out – if not automatically asked for consent – that you can force that behavior. So, this sentence solved my issue: "The consent flow can be triggered by adding <strong>&amp;prompt=consent</strong> to the Azure login URL." Thanks a lot, Waldek!</p><p>So, in my case I had to add that parameter to the generated login URL which started similar as here:<br> <a href="https://login.microsoftonline.com/common/oauth2/authorize?&hellip;.&amp;prompt=consent">https://login.microsoftonline.com/common/oauth2/authorize?….</a><strong><a>&amp;prompt=consent</a> </strong></p><p><a href="http://blog.atwork.at/image.axd?picture=image_4366.png"><img width="600" height="379" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3312.png" border="0"></a></p><p>Then I signed in with an Administrator and accepted the consent on behalf of my organization.</p><h2>The website is secured now</h2><p>NOW, users with <em>any Office 365 account</em> can open that website. So, when a user opens the website, he gets redirected to the sign-in page. Once signed-in with a personal Office 365 account, the app asks for permission to sign-in. As we see here, <em>PattiF</em> with <em><strong>her </strong></em>Office 365 tenant needs to grant access to the Multi tenant app "d365docs" that is stored in the "atwork.at" AAD and wants to sign-in.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4367.png"><img width="600" height="467" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3313.png" border="0"></a></p><p>So, the user needs to accept that consent to continue. Now, the website is shown. Otherwise, the user does not get access to that website.</p><p>Mission accomplished to secure a static website without any custom development! Another benefit of working with Azure.</p>https://blog.atwork.at/post/2019/03/01/Mult-Tenant-AAD-App-for-appweb-in-Azure
https://blog.atwork.at/post/2019/03/01/Mult-Tenant-AAD-App-for-appweb-in-Azure#commenthttps://blog.atwork.at/post.aspx?id=571edb3e-adc6-430e-a2d0-6d2d79c3bb39Fri, 1 Mar 2019 09:00:00 +0000AzureAppCloudDeveloperEnglishMicrosoftToolstphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=571edb3e-adc6-430e-a2d0-6d2d79c3bb390https://blog.atwork.at/trackback.axd?id=571edb3e-adc6-430e-a2d0-6d2d79c3bb39https://blog.atwork.at/post/2019/03/01/Mult-Tenant-AAD-App-for-appweb-in-Azure#commenthttps://blog.atwork.at/syndication.axd?post=571edb3e-adc6-430e-a2d0-6d2d79c3bb39Working with the new Azure PowerShell Az module<p>PowerShell is both a command-line shell and scripting language and perfect for automating administrative tasks. When working with Microsoft Azure, Microsoft recommends to use the new Azure PowerShell Az module. See how to uninstall the outdated Azure PowerShell AzureRM , how to install the new Az module for PowerShell 5.x and 6.x and how to connect and to get a inventory of your resources and a little bit of Cloud Shell here.</p><h2>Azure PowerShell "Az" is the successor of "AzureRM"</h2><p>For working with Azure PowerShell, the AzureRM module is outdated. AzureRM is still officially maintained and will get bug fixes up through December 2020, but Microsoft strongly recommends to switch to the Az module.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4357.png"><img width="600" height="107" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3303.png" border="0"></a></p><p>The new Azure PowerShell Az module is available since December 2018 and, as the <a href="https://docs.microsoft.com/en-us/powershell/azure/new-azureps-module-az?view=azps-1.3.0" target="_blank">documentation</a> says, offers shorter commands, improved stability, and cross-platform support since it's running on the .NET Standard library which means it runs on PowerShell 5.x and PowerShell 6.x (PS 6.x can run on Linux, macOS, and Windows). I see, "Az" is shorter than "AzureRM"… <img class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://blog.atwork.at/image.axd?picture=wlEmoticon-winkingsmile_273.png">&nbsp;</p><p>Anyway, Az also offers feature parity and an easy migration path from AzureRM. See more at <a title="https://docs.microsoft.com/en-us/powershell/azure/new-azureps-module-az?view=azps-1.3.0" href="https://docs.microsoft.com/en-us/powershell/azure/new-azureps-module-az?view=azps-1.3.0" target="_blank">Introducing the new Azure PowerShell Az module</a>.</p><h2>Uninstall Azure PowerShell AzureRM </h2><p>If you installed the Azure PowerShell AzureRM modules on your computer using the MSI package, you must uninstall through the Windows system rather than PowerShell in Start / Settings / Apps (or with CTRL + X, Aps and Features). See more at <a title="https://docs.microsoft.com/en-us/powershell/azure/uninstall-az-ps?view=azps-1.3.0#uninstall-the-azurerm-module" href="https://docs.microsoft.com/en-us/powershell/azure/uninstall-az-ps?view=azps-1.3.0#uninstall-the-azurerm-module" target="_blank">Uninstall the Azure PowerShell module</a>.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4346.png"><img width="600" height="534" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3292.png" border="0"></a></p><p>Uninstall the Azure PowerShell and confirm the questions to remove the module from your machine. If installed with PowerShell, run <code>Uninstall-AzureRm</code> as Administrator.</p><h2>Install the Azure PowerShell Az module</h2><p>To see what PowerShell version is installed on your computer, type <code>$PSVersionTable.PSVersion</code></p><p><a href="http://blog.atwork.at/image.axd?picture=image_4347.png"><img width="400" height="164" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3293.png" border="0"></a></p><p><a title="https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-1.3.0" href="https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-1.3.0" target="_blank">Install the Azure PowerShell module</a> informs about all requirements. For PowerShell 5.x on Windows, the <a href="https://docs.microsoft.com/en-us/dotnet/framework/install" target="_blank">.NET Framework 4.7.2</a> must be installed. So, the quickest way is to run the Windows PowerShell as Administrator…</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4348.png"><img width="205" height="240" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3294.png" border="0"></a></p><p>…and install the Az module from the the PowerShell Gallery with the that command:</p><p><code>Install-Module -Name Az -AllowClobber</code></p><p>(To install it just for the current user, add the <code>-Scope CurrentUser</code> parameter.) If you already have the Az module installed, you can update with <code>Update-Module -Name Az</code>.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4349.png"><img width="600" height="119" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3295.png" border="0"></a></p><p>When done, the new module is ready to use on your computer.</p><h1>Connect to Azure</h1><p>When installed, we can start connecting to Azure in Windows PowerShell with the command</p><p><code>Connect-AzAccount</code></p><p>Sign-in with your account credentials (and always use MFA).</p><p>When working with multiple subscriptions as I do, you need to see the existing subscriptions and then select the desired Azure subscription, as here:</p><p><code>Get-AzSubscription<br>Set-AzContext -Subscription 'S6'</code><p>First, we list all subscriptions, then we select a specific one by name here "S6". Now we can start working with that subscription resources.</p><h2>Create a subscription inventory</h2><p>After the authentication was successful and the subscription was selected, we can generate a list of all resources and write to a CSV file like in the following script "get-subscription-inventory.ps1" here.</p>
<p><code># Get all resources in the selected subscription<br>
$result = "C:\Temp\subscription-resources.csv"<br>"SubscriptionName,SubscriptionId,Resource,Name,ResourceGroupName,ResourceId" `<br>
| out-file $OutFilePath -encoding utf8
<br>
# Loop through the resources and add to the output file<br>
ForEach ($resource in Get-AzResource) <br>
{<br>&nbsp;&nbsp;&nbsp;&nbsp; $AzureSubscription.Name + "," + `<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $AzureSubscription.SubscriptionId + "," + `<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $resource.ResourceType + "," + `<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $resource.Name + "," + `<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $resource.ResourceGroupName + "," + `<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $resource.ResourceId `<br>
| out-file $result -encoding utf8 -append<br>
}
</code></p>
<p>You can see the result and the script and a short description also on my <a href="https://github.com/tonipohl/AzureManagement" target="_blank">GitHub AzureManagement repository</a>.</p><h2>Working with the Cloud Shell</h2><p>BTW, you can use the Az cmdlets in the Azure Cloud Shell as well… </p><p>Azure Cloud Shell is a browser-based shell experience to manage and develop Azure resources that runs on Ubuntu 16.04 LTS. When opening in the Azure Portal, your Azure Cloud Shell session is already authenticated for the environment, subscription, and tenant that launched the Cloud Shell session.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4350.png"><img width="600" height="314" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3296.png" border="0"></a></p><p>After selecting PowerShell, a subscription must be selected for a storage (see <a title="https://aka.ms/file-pricing" href="https://aka.ms/file-pricing" target="_blank">https://aka.ms/file-pricing</a>).</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4351.png"><img width="600" height="181" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3297.png" border="0"></a></p><p>This provisioning process takes about a minute. Then, the Cloud Shell can be used.</p><p>&lt;<a href="http://blog.atwork.at/image.axd?picture=image_4352.png"><img width="600" height="314" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3298.png" border="0"></a></p><p>Now we can directly runs commands, like <code>Get-AzureRmSubscription</code> to list all subscriptions, <code>Set-AzureRmContext –SubscriptionId ...</code> to set the work subscription, etc.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4353.png"><img width="600" height="118" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3299.png" border="0"></a></p><p>But: Since we have access to the Azure "drives" and we start in drive (<code>Azure:</code>), we can use simple commands as <code>dir</code> and <code>cd</code>, see <a title="https://docs.microsoft.com/en-us/azure/cloud-shell/quickstart-powershell?view=azps-1.3.0" href="https://docs.microsoft.com/en-us/azure/cloud-shell/quickstart-powershell?view=azps-1.3.0" target="_blank">Navigate Azure resources</a>.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4354.png"><img width="600" height="136" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3300.png" border="0"></a></p><p>The TAB key works to autocomplete. And since it's an Ubuntu system commands as <code>ls – lisa</code> work… (flashback from my Unix time). Anyway, to enter subscription "S6" and then to list the Resource groups, this works very straight forward…</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4356.png"><img width="373" height="400" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3302.png" border="0"></a></p><p>Etc… <code>Get-Help</code> and <code>Get-AzCommand</code> help as well. See more at <a title="https://docs.microsoft.com/en-us/azure/cloud-shell/overview?view=azps-1.3.0" href="https://docs.microsoft.com/en-us/azure/cloud-shell/overview?view=azps-1.3.0" target="_blank">Overview of Azure Cloud Shell</a> and a helpful quickstart at <a title="https://docs.microsoft.com/en-us/azure/cloud-shell/features#tools" href="https://docs.microsoft.com/en-us/azure/cloud-shell/features#tools" target="_blank">Features &amp; tools for Azure Cloud Shell</a>.</p><p>I hope this short intro helps for getting familiar with automating tasks in Microsoft Azure. Happy PowerShell-ing!</p>https://blog.atwork.at/post/2019/02/26/The-new-Azure-PowerShell-Az-module
https://blog.atwork.at/post/2019/02/26/The-new-Azure-PowerShell-Az-module#commenthttps://blog.atwork.at/post.aspx?id=e6fc690c-e02a-4b99-8718-14b430012637Tue, 26 Feb 2019 13:45:00 +0000AzureCloudDeveloperEnglishMicrosoftPowerShellToolstphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=e6fc690c-e02a-4b99-8718-14b4300126370https://blog.atwork.at/trackback.axd?id=e6fc690c-e02a-4b99-8718-14b430012637https://blog.atwork.at/post/2019/02/26/The-new-Azure-PowerShell-Az-module#commenthttps://blog.atwork.at/syndication.axd?post=e6fc690c-e02a-4b99-8718-14b430012637Detect sentiment with Text Analytics<p>Azure Cognitive Services offer a bunch of services. One is the <a href="https://westus.dev.cognitive.microsoft.com/docs/services/TextAnalytics.V2.0/operations/56f30ceeeda5650db055a3c9" target="_blank">Sentiment Analysis API</a> that allows to analyze unstructured text for tasks such as sentiment analysis based on Microsoft machine learning algorithms. See the first steps how to use that here.</p><p>The test works in the same way with <a href="https://www.getpostman.com/" target="_blank">Postman</a> as in the previous article.The goal here is to analyze some text to get a positive or negative result of the meaning.</p><p>So, we just need some Azure logic and a tool to send and get the data. <a title="https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-sentiment-analysis" href="https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-sentiment-analysis" target="_blank">How to detect sentiment with Text Analytics</a> informs about the service we want to consume. Again, we need to create a new Cognitive Service and to get our own access data from the <a href="https://portal.azure.com/" target="_blank">Azure Portal</a>. Once created, we get that data in the service overview and in the keys menu.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4343.png"><img width="600" height="197" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3289.png" border="0"></a></p><p><br></p><p>Then, calling the Computer Vision API is easy: We need a HTTP POST request against the API and modify just the region and the subscription key.</p><p><code>https://&lt;region&gt;.api.cognitive.microsoft.com/analytics/v2.0/sentiment?subscription-key=&lt;subscription-key&gt;</code></p><p>So, my sample starts with <code>https://westeurope.api.cognitive.microsoft.com/analytics/v2.0/sentiment…</code></p><p>In <a href="https://www.getpostman.com/" target="_blank">Postman</a>, we just create a new POST request with that URL and some parameters as here:</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4344.png"><img width="600" height="363" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3290.png" border="0"></a></p><p>As Headers we add a key "Content-Type" with value "application/json" and the body text that shall be uploaded with that post.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4345.png"><img width="400" height="92" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3291.png" border="0"></a></p><p>As defined, the data we want to submit can be formatted JSON type, as here. First, there's a positive, then there's a negative text, in english language.</p><p><code>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "documents": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "language": "en",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "id": "1",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "text": "We love this trail and make the trip every year. The views are breathtaking and well worth the hike!"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "language": "en",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "id": "2",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "text": "Poorly marked trails! I thought we were goners. Worst hike ever."<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br>
}</code></p><p>See <a title="https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/language-support" href="https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/language-support" target="_blank">Language and region support for the Text Analytics API</a> for more info.</p><p>When clicking on the "Send" button, the request should be sent to the API. After some seconds of analyzing, the result will be shown as body, similar as here. Here's the output in JSON format.</p><p><code>{<br>&nbsp;&nbsp;&nbsp;&nbsp; "documents": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "id": "1",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "score": 0.92014169692993164<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "id": "2",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "score": 0.05087512731552124<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; ],<br>&nbsp;&nbsp;&nbsp;&nbsp; "errors": []<br>
}</code>
<p>The return data says, that the first text with id 1 is positive (92%), the second text with id 2 is very negative (5%). A neutral value would be 0.5 (50%). </p><p>Happy analyzing your text with the <a href="https://westus.dev.cognitive.microsoft.com/docs/services/TextAnalytics.V2.0/operations/56f30ceeeda5650db055a3c9" target="_blank">Sentiment Analysis API</a>!</p>https://blog.atwork.at/post/2019/02/25/Detect-sentiment-with-Text-Analytics
https://blog.atwork.at/post/2019/02/25/Detect-sentiment-with-Text-Analytics#commenthttps://blog.atwork.at/post.aspx?id=943b314d-2391-4bd6-9006-1eebde39bc51Mon, 25 Feb 2019 09:00:00 +0000AIAzureCloudCognitive ServicesDeveloperEnglishMicrosoftToolstphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=943b314d-2391-4bd6-9006-1eebde39bc510https://blog.atwork.at/trackback.axd?id=943b314d-2391-4bd6-9006-1eebde39bc51https://blog.atwork.at/post/2019/02/25/Detect-sentiment-with-Text-Analytics#commenthttps://blog.atwork.at/syndication.axd?post=943b314d-2391-4bd6-9006-1eebde39bc51First steps with the Microsoft Vision API<p>Cloud services help to automate simple and complex processes. For analyzing a picture, the <a href="https://docs.microsoft.com/en-us/azure/cognitive-services/" target="_blank">Microsoft Cognitive Services</a> offer a bunch of services like the Vision API, (Custom) Computer Vision, Face API, Video Indexer an more. Follow this first sample with Postman to start with the Vision API.</p><p>Azure Cognitive Services can be integrated easily in custom processes and apps. A good starting point is <a title="https://docs.microsoft.com/en-us/azure/cognitive-services/" href="https://docs.microsoft.com/en-us/azure/cognitive-services/" target="_blank">Cognitive Services APIs web page on Azure</a>.</p><p><a href="https://docs.microsoft.com/en-us/azure/cognitive-services/" target="_blank"><img width="600" height="327" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_4338.png" border="0"></a></p><p>The goal here is to analyze the content of a picture, in this sample a shiny motorcycle photo.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4339.png"><img width="400" height="225" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3285.png" border="0"></a></p><p>So, we just need some Azure logic and a tool to send and get the data. Let's start.</p><p><a title="Cognitive Services" href="https://westus.dev.cognitive.microsoft.com/docs/services/56f91f2d778daf23d8ec6739/operations/56f91f2e778daf14a499e1fa" target="_blank">Computer Vision API - v1.0</a> informs about the service we want to consume (even if we are using v2). First, we need to create a new Cognitive Service and to get our own access data from the <a href="https://portal.azure.com/" target="_blank">Azure Portal</a>. Once created, we get that data in the service overview and in the keys menu.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4340.png"><img width="600" height="200" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3286.png" border="0"></a></p><p>Then, calling the Computer Vision API is easy: We need a HTTP POST request against the API and modify just the region and the subscription key.</p><p><code>https://&lt;region&gt;.api.cognitive.microsoft.com/vision/v2.0/analyze?visualFeatures=Description,Tags&amp;subscription-key=&lt;subscription-key&gt;</code></p><p>So, my sample starts with <code><a href="https://westeurope.api.cognitive.microsoft.com/vision/v2.0/analyze">https://westeurope.api.cognitive.microsoft.com/vision/v2.0/analyze</a>…</code></p><p><a href="https://www.getpostman.com/" target="_blank">Postman</a> is an excellent and free tool for testing. Here, we just create a new POST request with that URL and some parameters as here:</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4341.png"><img width="600" height="363" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3287.png" border="0"></a></p><p>As Headers we add a key "Content-Type" with value "application/octet-stream" and the image that shall be uploaded with that post.</p><p><a href="http://blog.atwork.at/image.axd?picture=image_4342.png"><img width="400" height="91" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="http://blog.atwork.at/image.axd?picture=image_thumb_3288.png" border="0"></a></p><p>When clicking on the "Send" button, the request should be sent to the API. After some seconds of analyzing, the result will be shown as body, similar as here. The return data says, it's a 99% chance that the photo shows a motorcycle, it's 95% outdoor, it's 94% parked, a description "a motorcycle parked on the side" and more details. Here's the full output in JSON format.</p><p><code>{<br>&nbsp;&nbsp;&nbsp;&nbsp; "tags": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name": "motorcycle",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "confidence": 0.99943739175796509<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name": "outdoor",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "confidence": 0.95531386137008667<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name": "parked",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "confidence": 0.84835320711135864<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name": "motorbike",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "confidence": 0.84835320711135864<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; ],<br>&nbsp;&nbsp;&nbsp;&nbsp; "description": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "tags": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "motorcycle",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "outdoor",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "parked",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sitting",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "standing",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "field",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "black",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "side",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "man",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "people",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "woman",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "old",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "group",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "table",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "red",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "plate",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "display",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "blue"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "captions": [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "text": "a motorcycle parked on the side",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "confidence": 0.86568715712148681<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br>&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp; "requestId": "4870258f-f470-4520-8806-9ec23a30bb35",<br>&nbsp;&nbsp;&nbsp;&nbsp; "metadata": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "width": 3072,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "height": 1728,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "format": "Jpeg"<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>
}</code></p><p>The Vision API understands more <a href="https://westus.dev.cognitive.microsoft.com/docs/services/56f91f2d778daf23d8ec6739/operations/56f91f2e778daf14a499e1fa" target="_blank">visualFeatures</a>. So we can extend that parameter with these values – what are you interested in?</p><ul><li>Categories - categorizes image content according to a taxonomy defined in documentation.</li><li>Tags - tags the image with a detailed list of words related to the image content.</li><li>Description - describes the image content with a complete English sentence.</li><li>Faces - detects if faces are present. If present, generate coordinates, gender and age.</li><li>ImageType - detects if image is clipart or a line drawing.</li><li>Color - determines the accent color, dominant color, and whether an image is black&amp;white.</li><li>Adult - detects if the image is pornographic in nature (depicts nudity or a sex act). Sexually suggestive content is also detected.<br>
</li></ul><p>Also, <a href="https://westus.dev.cognitive.microsoft.com/docs/services/56f91f2d778daf23d8ec6739/operations/56f91f2e778daf14a499e1fa" target="_blank">details</a> can deliver more information.</p><ul><li>Celebrities - identifies celebrities if detected in the image.</li><li>Landmarks - identifies landmarks if detected in the image.<br>
</li></ul><p>To get all these information, use the parameters as here:</p><p><code>?visualFeatures=Categories,Tags,Description,Faces,ImageType,Color,Adult&amp;details=Celebrities</code></p><p>Then, we get back information as e.g. "dominantColorForeground": "Black", "isRacyContent": false and "adultScore": 0.01571008563041687, which means, that the percentage of&nbsp; adult content included in that picture is only 1 percent. </p><p>So, the services delivers a lot of useful information with a simple call to the API. The next steps are to integrate that service in custom processes or apps! The playground is open!</p>https://blog.atwork.at/post/2019/02/25/First-steps-with-the-Microsoft-Vision-API
https://blog.atwork.at/post/2019/02/25/First-steps-with-the-Microsoft-Vision-API#commenthttps://blog.atwork.at/post.aspx?id=2ac6e286-90ab-4296-8571-c61be71c4140Mon, 25 Feb 2019 08:00:00 +0000AzureAICognitive ServicesCloudDeveloperEnglishMicrosoftToolstphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=2ac6e286-90ab-4296-8571-c61be71c41400https://blog.atwork.at/trackback.axd?id=2ac6e286-90ab-4296-8571-c61be71c4140https://blog.atwork.at/post/2019/02/25/First-steps-with-the-Microsoft-Vision-API#commenthttps://blog.atwork.at/syndication.axd?post=2ac6e286-90ab-4296-8571-c61be71c4140Troubleshooting Delegate365-Login<p>Sometimes support cases are opened because users cannot login to Delegate365 with their Office 365 account. In most cases, the browser cache automatically signs-in a user with wrong credentials. Please follow these simple steps to see how to achieve a successful login to the Delegate365 portal in such scenarios.</p><h2>1. Use a browser in Private mode</h2><p>The most common stumbling block is that web browser log in users automatically. Also, often users are working with multiple accounts. Thus, there is a high probability that an incorrect sign-in will occur when opening the Delegate365 portal.</p><p>To avoid such a behavior, open a new browser window in "private mode". Every modern browser supports that mode to ensure that you start with a "fresh" browser without automatic login. You can do so as follows.</p><ul><li>In <strong>Google Chrome</strong>, press <strong>Ctrl + Shift + N</strong>, or open the menu "New incognito window" as here.<br><a href="https://blog.atwork.at/image.axd?picture=image_4320.png"><img width="600" height="116" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3267.png" border="0"></a></li><li>In <strong>Mozilla Firefox</strong>, press <strong>Ctrl + Shift + P</strong>, or open the menu "New Private Window" as here.<br><a href="https://blog.atwork.at/image.axd?picture=image_4321.png"><img width="600" height="169" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3268.png" border="0"></a></li><li>In <strong>Microsoft Edge</strong>, press <strong>Ctrl + Shift + P</strong>, or open the menu "New InPrivate window" as here.<br><a href="https://blog.atwork.at/image.axd?picture=image_4322.png"><img width="600" height="109" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3269.png" border="0"></a></li><li>In <strong>Microsoft Internet Explorer</strong>, press <strong>Ctrl + Shift + P</strong>, or open the menu "Safety" and "InPrivate Browsing".</li></ul><p>It works similarly in other browsers. In case of any login issues, please use the private mode! </p><h2>2. Check your Office 365 account</h2><p>Just to mention… check your Office 365 account. Open a browser in private mode and login to <a href="https://portal.office.com/" target="_blank">https://portal.office.com</a> and see, if the login works. If yes, the predefined Office 365 page will follow.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4324.png"><img width="400" height="179" title="image" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3271.png" border="0"></a></p><p>A valid Office 365 account is required to sign-in to Delegate365. If the login worked, you can open a new tab and open the Delegate365 URL.</p><h2>3. Check the Delegate365 URL: <u>https://&lt;customer&gt;.delegate365.com</u></h2><p>Ensure that you have the <strong>correct Delegate365 URL</strong>, especially when using bookmarks! Type or paste the URL into the address field.</p><p><a href="https://blog.atwork.at/image.axd?picture=SNAGHTMLbc42e49.png"><img width="600" height="52" title="SNAGHTMLbc42e49" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="SNAGHTMLbc42e49" src="https://blog.atwork.at/image.axd?picture=SNAGHTMLbc42e49_thumb.png" border="0"></a></p><p>Usually, the portal URL looks as here: <strong>https://&lt;company&gt;.delegate365.com</strong></p><p>Sometimes, wrong bookmarks are stored which results in an issue when signing-in. Avoid that by typing or verifying the Delegate365 URL.</p><h2>4. Ensure you are using the correct Office 365 account</h2><p>If you sign-in with an Office 365 account that is not allowed to open the Delegate365 portal…</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4323.png"><img width="600" height="412" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3270.png" border="0"></a></p><p>… you are automatically logged-out and this information follows: "You have successfully signed out."</p><p><a href="https://blog.atwork.at/image.axd?picture=SNAGHTMLbe19cb5.png"><img width="600" height="243" title="SNAGHTMLbe19cb5" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="SNAGHTMLbe19cb5" src="https://blog.atwork.at/image.axd?picture=SNAGHTMLbe19cb5_thumb.png" border="0"></a></p><p>This occurs, when the sign-in process was successful - with a valid Office 365 username and password - but this account is not a valid Delegate365 app user.</p><p>In that case, start over with the correct user account. Click on the white <em>Delegate365</em> link in the blue menu bar to retry (or close the browser and start over with step 1). Then, if the same behavior follows, please continue as here.</p><h2>5. Ask your Delegate365 Admin to check your access</h2><p>Basically, every user of Delegate365 must be added as Administrator to be able to use the Delegate365 portal. (There are some exceptions for specific URLs that can be used by normal users as <a href="https://blog.atwork.at/post/2015/02/06/How-to-manage-self-service-password-reset-for-users-in-Delegate365" target="_blank">SSPR</a>.)</p><p>So, if your login still does not work, please contact your Delegate365 Portal Admin to check if your account has been added to the Administrators list in Delegate365. A Portal Admin needs to open the <em>Administration / Administrators</em> menu and see if the desired account is in that list and active:</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4325.png"><img width="600" height="265" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3272.png" border="0"></a></p><p>In this sample, only two accounts have access to the Delegate365 portal and are set to Active equals yes: <br>admin@M365x036690.onmicrosoft.com and adelev@M365x036690.onmicrosoft.com .</p><p>Any other account cannot open the Delegate365 portal. So, if meganb@M365x036690.onmicrosoft.com signs-in successfully, she gets this message: "You do not have permission to view this directory or page."</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4326.png"><img width="400" height="83" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3273.png" border="0"></a></p><p>This happens, because MeganB logged-in to the correct Office 365 tenant, but is not listed as Administrator in Delegate365 (see above).</p><h2>Summary</h2><p>Please follow the steps above if you encounter any issues with your login to the Delegate365 portal. Use a browser in private mode, check your Office 365 account and ask your Delegate365 Portal Admin to check your account in the list of the Delegate365 administrators. In most cases, any issue is a (browser) client topic that can be resolved as described. </p><p>If these requirements are fulfilled and your Office 365 account is valid, the login to the Delegate365 portal will work properly.</p>https://blog.atwork.at/post/2019/02/21/Troubleshooting-Delegate365-Login
https://blog.atwork.at/post/2019/02/21/Troubleshooting-Delegate365-Login#commenthttps://blog.atwork.at/post.aspx?id=274ac815-a841-4c5d-8545-65a3313f97b9Thu, 21 Feb 2019 18:00:00 +0000Delegate365EnglishMicrosoftMicrosoft365Office365atworktphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=274ac815-a841-4c5d-8545-65a3313f97b90https://blog.atwork.at/trackback.axd?id=274ac815-a841-4c5d-8545-65a3313f97b9https://blog.atwork.at/post/2019/02/21/Troubleshooting-Delegate365-Login#commenthttps://blog.atwork.at/syndication.axd?post=274ac815-a841-4c5d-8545-65a3313f97b9How to invite external users to your Azure subscription<p>Modern collaboration allows to use shared resources and to give access to external users from other organizations. See how this works for shared Microsoft Azure subscriptions here!</p><p>So, see this step-by-step process here with the following sample of an Admin giving access to an external guest and some troubleshooting tips.</p><h2>Check your source AAD and subscription</h2><p>Signing-in with admin@M365x321500.onmicrosoft.com to the <a href="https://portal.azure.com/" target="_blank">Azure portal</a>. Our source subscription 18e* and it's bound to AAD M365x321500.onmicrosoft.com.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4307.png"><img width="600" height="209" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3254.png" border="0"></a></p><p>We want to invite a guest as contributor from another AAD, that's AlexW@M365x055874.onmicrosoft.com. So, let's paste that email address and click on the found user object.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4308.png"><img width="600" height="323" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3255.png" border="0"></a></p><p>Now we can save that role assignment for AlexW. A quick info in the top right corner informs about the operation.</p><h2>Check on the guest side</h2><p>Currently, AlexW does not have access to any Azure subscription in the <a href="https://portal.azure.com/" target="_blank">Azure portal</a>.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4309.png"><img width="600" height="229" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3256.png" border="0"></a></p><p>When checking the emails, we should see the invitation for the AAD. Click on the "Get Started" button to follow the included hyperlink.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4310.png"><img width="600" height="350" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3257.png" border="0"></a></p><p>The redirection opens the consent. AlexW needs to "Accept" that app permissions. The URL looks similar as<br> https://invitations.microsoft.com/redeem/redeeming?tenant=&lt;tenant-id&gt;&amp;user=&lt;user-id&gt;&amp;ticket&lt;some-id&gt;&amp;ver=2.0</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4311.png"><img width="600" height="350" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3258.png" border="0"></a></p><p>The <a href="https://portal.azure.com/" target="_blank">Azure portal</a> opens and AlexW should now have access to the Azure subscription. Note that AlexW has now two AAD's to switch:<br>His own organization's AAD M365x055874.onmicrosoft.com, and the guest access to M365x321500.onmicrosoft.com.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4312.png"><img width="600" height="323" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3259.png" border="0"></a></p><p>So, Alex needs to switch between the AADs if he wants to access Azure subscriptions (currently there is none) in his home organization or to his guest organization.</p><h2>Full access to the Azure subscription</h2><p>As contributor, AlexW can fully work and manage objects in the Azure subscription. Here's an example for creating a new storage…</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4313.png"><img width="600" height="323" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3260.png" border="0"></a></p><p>Of course, the access can be permitted just to specific Resource Groups or other services if required. It's the same process for giving access to a full Azure subscription or to specific resources.</p><h2>Manage external users</h2><p>The source organization still has full control over such guests. Guest are of user type "Guest" as here (and can be filtered in the AAD portals as well as in Microsoft Graph API).</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4314.png"><img width="600" height="175" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3261.png" border="0"></a></p><p>So, when deleting the user in the organization's AAD, the role assignment is deleted as well.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4315.png"><img width="600" height="374" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3262.png" border="0"></a></p><p>Sure, the guest user can stay and the role assignment can be changed as well, there are a bunch of options, depending on the desired access level.</p><h2>Troubleshooting the invitation</h2><p>What if the guest did not receive the invitation by email? So, we invited another user from a guest AAD: MeganB@M365x055874.onmicrosoft.com</p><p>Until now, she has not clicked on the invitation-link. As inviter, we can see that the user type is "Guest", and the Source shows "Invited user" which means, the user has not confirmed. </p><p><a href="https://blog.atwork.at/image.axd?picture=image_4316.png"><img width="600" height="180" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3263.png" border="0"></a></p><p>Can MeganB access the Azure subscription without email invitation? The answer is No: <br>MeganB does not have access without the consent. Her <a href="https://portal.azure.com/" target="_blank">Azure portal</a> only knows her own organization's AAD.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4317.png"><img width="400" height="176" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3264.png" border="0"></a></p><p>So, the invitation and accepting the consent is required for external guests. </p><h2>Resend the email or use an invitation URL</h2><p>Back to the Admin side: If a guest has not received an invite-email, ask the Admin to resend the invitation to the external user in his AAD as shown below.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4318.png"><img width="600" height="372" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3265.png" border="0"></a></p><p>Thankfully, Microsoft has improved that process and allows to "Resend" an invitation. When clicked, the page shows an invitation URL as well. That can be copied and sent to the user in another form.</p><p>Note that the "Resend" operation creates a new ticket ID in the URL. Anyway, both invitations (the original and the newly created one) work for the guest user. Just, they are not valid forever. If the invitations are expired, the Admin needs to create new invites. See more at <a title="https://docs.microsoft.com/en-us/azure/active-directory/b2b/redemption-experience" href="https://docs.microsoft.com/en-us/azure/active-directory/b2b/redemption-experience" target="_blank">Azure Active Directory B2B collaboration invitation redemption</a></p><h2>Happy contributing</h2><p>Tip: If possible, try to invite work accounts (Office 365 accounts), and not Microsoft accounts (MSA). When working with external Office 365 users, management, security, and governance, etc. is still in the target organization. So, e.g. if the Admins of AlexW's company M365x055874.onmicrosoft.com define conditional access and MFA, this account needs to comply with the policies to access your subscription. Also, if AlexW leaves the organization, and his account is blocked or deleted, he will no longer have access to our Azure subscription (and our AAD).</p><p>I hope this article helps to follow the steps and to clarify the process.. Happy contributing in Azure subscriptions!</p>https://blog.atwork.at/post/2019/02/18/Invite-external-users-to-your-Azure-subscription
https://blog.atwork.at/post/2019/02/18/Invite-external-users-to-your-Azure-subscription#commenthttps://blog.atwork.at/post.aspx?id=d8645b23-f263-4e2a-a54b-86d7f35ba8aaMon, 18 Feb 2019 14:00:00 +0000AzureCloudEnglishMicrosoftOffice365Securitytphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=d8645b23-f263-4e2a-a54b-86d7f35ba8aa0https://blog.atwork.at/trackback.axd?id=d8645b23-f263-4e2a-a54b-86d7f35ba8aahttps://blog.atwork.at/post/2019/02/18/Invite-external-users-to-your-Azure-subscription#commenthttps://blog.atwork.at/syndication.axd?post=d8645b23-f263-4e2a-a54b-86d7f35ba8aaReady for European Collaboration Summit 2019!<p>Join us at the legendary <a href="https://www.collabsummit.eu/" target="_blank">European Collaboration Summit</a> from May 27 to May 29, 2019 in Wiesbaden, Germany! <a href="https://twitter.com/search?q=%23collabsummit&amp;src=typd" target="_blank">#collabsummit</a> is Europe's largest community-driven conference with a focus on modern workplace technologies and digital transformation, with topics such as Microsoft 365, Azure, SharePoint, AWS, and Business Apps. The conference is organized for the community by the community.</p><p>We from <a href="https://www.atwork-it.com/" target="_blank">atwork</a> are honored to be part of&nbsp; <a href="https://www.collabsummit.eu/" target="_blank">CollabSummit.eu</a> as in the past years (see <a title="https://blog.atwork.at/post/2018/06/03/European-Collaboration-Summit-2018" href="https://blog.atwork.at/post/2018/06/03/European-Collaboration-Summit-2018" target="_blank">2018</a> and <a title="https://blog.atwork.at/post/2017/06/01/This-was-European-Collaboration-Summit-2017" href="https://blog.atwork.at/post/2017/06/01/This-was-European-Collaboration-Summit-2017" target="_blank">2017</a>). Check out the first announced sessions at <a href="https://www.collabsummit.eu/news/4" target="_blank">Collabsummit 2019 program is here!</a>!</p><p><a href="https://www.collabsummit.eu/news/4" target="_blank"><img width="600" height="232" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_4293.png" border="0"></a></p><p><a href="https://twitter.com/magrom" target="_blank">Martina</a> is part of the content team and she will deliver a session about "How Yammer Security and management works behind the scenes in a GDPR world".</p><p><a href="https://blog.atwork.at/image.axd?picture=ecs19_martinagrom.png"><img width="400" height="240" title="ecs19_martinagrom" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="ecs19_martinagrom" src="https://blog.atwork.at/image.axd?picture=ecs19_martinagrom_thumb.png" border="0"></a></p><p><a href="https://twitter.com/atwork" target="_blank">I</a> am proud to inform about how to "Develop intelligent apps for the Modern Workplace" at the conference.</p><p><a href="https://blog.atwork.at/image.axd?picture=ecs19_tonipohl.png"><img width="400" height="237" title="ecs19_tonipohl" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="ecs19_tonipohl" src="https://blog.atwork.at/image.axd?picture=ecs19_tonipohl_thumb.png" border="0"></a></p><p>Our colleague <a href="https://twitter.com/DominikHoefling" target="_blank">Dominik</a> will talk about "Password-less Authentication in ADFS 2019".</p><p><a href="https://blog.atwork.at/image.axd?picture=ecs19_dominikhoefling.png"><img width="400" height="240" title="ecs19_dominikhoefling" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="ecs19_dominikhoefling" src="https://blog.atwork.at/image.axd?picture=ecs19_dominikhoefling_thumb.png" border="0"></a></p><p>So, don't miss this conference with great content, international speakers from the community and a lot of networking! </p><p>Get your tickets at <a title="https://www.collabsummit.eu/tickets" href="https://www.collabsummit.eu/tickets" target="_blank">collabsummit.eu/tickets</a> and use the following the promo code COLLABSPEAKER for a 10% discount!</p><p>&nbsp;<a href="https://twitter.com/search?q=%23collabsummit&amp;src=typd" target="_blank">#collabsummit</a> will be a blast (again). <a href="https://www.collabsummit.eu/tickets" target="_blank">Book now</a> and we hope to see you there!</p>https://blog.atwork.at/post/2019/01/25/Ready-for-collabsummit-2019
https://blog.atwork.at/post/2019/01/25/Ready-for-collabsummit-2019#commenthttps://blog.atwork.at/post.aspx?id=42f4b3fd-e063-4768-bb7f-24a6185c27c8Fri, 25 Jan 2019 16:00:00 +0000AzureBlogCloudBusiness IntelligenceDeveloperEnglishEventMicrosoftMVPOffice365atworktphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=42f4b3fd-e063-4768-bb7f-24a6185c27c80https://blog.atwork.at/trackback.axd?id=42f4b3fd-e063-4768-bb7f-24a6185c27c8https://blog.atwork.at/post/2019/01/25/Ready-for-collabsummit-2019#commenthttps://blog.atwork.at/syndication.axd?post=42f4b3fd-e063-4768-bb7f-24a6185c27c8Delegate365-Working with Audit Logs and Power-BI<p><a href="https://delegate365.com/" target="_blank">Delegate365</a> protocols operations in it's audit logs. This log space can be accessed from entitled users and it's simple to create a custom Power BI dashboard for your Delegate365 data. See how this works here step-by-step.</p><p><strong>Tip:</strong> The article <a title="https://blog.atwork.at/post/2017/06/26/Delegate365-Working-with-Audit-Logs" href="https://blog.atwork.at/post/2017/06/26/Delegate365-Working-with-Audit-Logs" target="_blank">Delegate365-Working with Audit Logs</a> covers the methods for accessing the data and working with the audit logs as well. This article informs how to connect to your Delegate365 with Microsoft Power BI step-by-step and how create your custom dashboard. You need to have a Power BI license, see details at <a title="https://powerbi.microsoft.com/en-us/pricing/" href="https://powerbi.microsoft.com/en-us/pricing/" target="_blank">Power BI Pricing</a>.</p><p>Follow these steps to work with Delegate365 audit data with Microsoft Power BI (click on the images to enlarge them).</p><ol><li>If not already installed on you computer, download the free Power BI Desktop client from <a title="https://powerbi.microsoft.com/en-us/desktop/" href="https://powerbi.microsoft.com/en-us/desktop/" target="_blank">powerbi.microsoft.com</a>.<br><a href="https://powerbi.microsoft.com/en-us/desktop/" target="_blank"><img width="600" height="295" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_4270.png" border="0"></a></li><li>When installed, start the Power BI Desktop app and select <em>Get data</em>.<br><a href="https://blog.atwork.at/image.axd?picture=image_4271.png"><img width="400" height="229" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3219.png" border="0"></a></li><li>In the <em>Get Data</em> dialog, select <em>Azure / Azure Table Storage</em> and click <em>Connect</em>.<br><a href="https://blog.atwork.at/image.axd?picture=image_4272.png"><img width="368" height="400" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3220.png" border="0"></a></li><li>Change to your Delegate365 tenant and open<em> Logs / Log Access</em>. Click the <em>Get account</em> button. This opens the access data to your audit logs.<br><a href="https://blog.atwork.at/image.axd?picture=image_4273.png"><img width="600" height="441" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3221.png" border="0"></a></li><li>Copy the <em>Account name</em> (here: d365demotp7) and the <em>Account key</em> (here: lMP1ORItc9...), best to a notepad.</li><li>Change back to Power BI Desktop. Paste the <em>Account name</em> to the dialog box and click <em>OK</em>.<br><a href="https://blog.atwork.at/image.axd?picture=image_4274.png"><img width="400" height="125" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3222.png" border="0"></a></li><li>Do the same with the <em>Account key</em>.</li><li>In the Navigator dialog, select the tables you want to use:<br><em>AuditLogSearch</em> is the "full log" over all times. Additionally, Delegate365 stores audit data in tables named <em>log&lt;year&gt;</em>, as log2018, log2019, etc. and per month, named <em>log&lt;month&gt;</em>, as log201811, log201812, log20191, etc. So, you should select <em>AuditLogSearch</em> and – if you want to speed up performance – the logs for years and or months. Click <em>Load</em>.<br><a href="https://blog.atwork.at/image.axd?picture=image_4275.png"><img width="600" height="477" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3223.png" border="0"></a><br>Power BI now loads the data from the Table storage.</li><li>Back in the editor mode, open the menu <em>Edit Queries</em>.<br><a href="https://blog.atwork.at/image.axd?picture=image_4276.png"><img width="600" height="234" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3224.png" border="0"></a></li><li>In the Power Query Editor, you need to decompose the log data as here. Click on the grey <em>Split </em>icon right of the column header <em>Content</em>. This action discovers the data stored in that column and opens a menu, where all analyzed fields are already selected. Click <em>OK</em>.<br><a href="https://blog.atwork.at/image.axd?picture=image_4277.png"><img width="600" height="250" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3225.png" border="0"></a></li><li>You should see that new columns (yellow column headers) have been added and in the Applied Steps list on the right side, the Expanded Content step has been added. This step splits the JSON formatted log content in single columns. This is required to access the details.<br><a href="https://blog.atwork.at/image.axd?picture=image_4278.png"><img width="600" height="250" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3226.png" border="0"></a></li><li>Then, click the menu <em>Close &amp; Apply</em>. The data modifications will be applied.<br><a href="https://blog.atwork.at/image.axd?picture=image_4279.png"><img width="400" height="169" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3227.png" border="0"></a></li><li>Now you can start designing your dashboard. The <em>AuditLogSearch</em> table can now be expanded. In this sample, a new stacked column chart has been added to the content board and filled with data from Content.Ou and Content.Action. This visualization then shows the number of actions that happened in the OU's in the time frame (since the start of working with Delegate365).<br><a href="https://blog.atwork.at/image.axd?picture=image_4280.png"><img width="600" height="413" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3228.png" border="0"></a></li><li>Design your dashboard(s) as needed with the data provided directly from the audit logs. You can customize the visualizations by selecting the object, switching to another visualization and by clicking on the <em>Format</em> icon as here. <br><a href="https://blog.atwork.at/image.axd?picture=image_4281.png"><img width="600" height="331" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3229.png" border="0"></a></li><li>You can update the data anytime by clicking the <em>Refresh</em> icon in the menu bar. This loads all data directly from the Delegate audit logs – you always get the latest data.</li><li>Save your dashboard to you local computer, e.g. as <em>MyDelegate365.pbix</em></li><li>To make the reports available online, click the <em>Publish</em> menu icon. <br><a href="https://blog.atwork.at/image.axd?picture=image_4282.png"><img width="600" height="333" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3230.png" border="0"></a></li><li>If not already signed-in, you need to enter your Office 365 credentials. <br><a href="https://blog.atwork.at/image.axd?picture=image_4283.png"><img width="400" height="267" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3231.png" border="0"></a></li><li>Select an Office 365 group (a workspace) as destination. You reports will be published to that group.<br><a href="https://blog.atwork.at/image.axd?picture=image_4284.png"><img width="400" height="228" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3232.png" border="0"></a></li><li>You can open the report directly from here now. This opens the browser with your report URL that looks similar as <a title="https://app.powerbi.com/groups/someid/reports/someid/ReportSection" href="https://app.powerbi.com/groups/someid/reports/someid/ReportSection">https://app.powerbi.com/groups/someid/reports/someid/ReportSection</a><br><a href="https://blog.atwork.at/image.axd?picture=image_4285.png"><img width="400" height="233" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3233.png" border="0"></a></li><li>Done. The reports are now available online and can be shared, subscribed, etc.<br><a href="https://blog.atwork.at/image.axd?picture=image_4286.png"><img width="600" height="331" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3234.png" border="0"></a></li></ol><p>These easy steps allow to directly access the Delegate365 audit logs and to customize the visualization depending on your needs.</p>https://blog.atwork.at/post/2019/01/08/Delegate365-Working-with-Audit-Logs-and-Power-BI
https://blog.atwork.at/post/2019/01/08/Delegate365-Working-with-Audit-Logs-and-Power-BI#commenthttps://blog.atwork.at/post.aspx?id=9abdfd5a-d768-4772-a817-6bf53b74dcc0Tue, 8 Jan 2019 19:00:00 +0000Delegate365EnglishMicrosoftMicrosoft365OfficeOffice365ToolsatworkBusiness Intelligencetphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=9abdfd5a-d768-4772-a817-6bf53b74dcc00https://blog.atwork.at/trackback.axd?id=9abdfd5a-d768-4772-a817-6bf53b74dcc0https://blog.atwork.at/post/2019/01/08/Delegate365-Working-with-Audit-Logs-and-Power-BI#commenthttps://blog.atwork.at/syndication.axd?post=9abdfd5a-d768-4772-a817-6bf53b74dcc0Convert a Markdown document to PDF easily<p>I am a big fan of the lightweight and super useful <a title="https://code.visualstudio.com/" href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a> editor. Recently, I discovered another cool extension for creating PDF, HTML, PNG, and JPEG files from a Markdown document.</p><p>Simply install the Markdown PDF extension by <a href="https://github.com/yzane/vscode-markdown-pdf" target="_blank">yzane.markdown-pdf</a>. This cool extension exports a .md file to a PDF file as shown here.</p><p><a href="https://blog.atwork.at/image.axd?picture=image_4269.png"><img width="600" height="354" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://blog.atwork.at/image.axd?picture=image_thumb_3218.png" border="0"></a></p><p>You can even with configure AutoSave by adding the <code>"markdown-pdf.convertOnSave": true</code> option to<em> settings.json</em> and restart Visual Studio Code. Then, when saving, the file gets converted automatically. That's useful especially for documentation. Also, there are much more extensions to discover…</p><p>Hope, this quick tip helps for automating.</p>https://blog.atwork.at/post/2019/01/03/Convert-Markdown-to-PDF
https://blog.atwork.at/post/2019/01/03/Convert-Markdown-to-PDF#commenthttps://blog.atwork.at/post.aspx?id=86d5ed01-0cc7-4e9e-b17c-b42524b67747Thu, 3 Jan 2019 09:00:00 +0000AppDeveloperEnglishMicrosoftToolsVisual Studiotphttps://blog.atwork.at/pingback.axdhttps://blog.atwork.at/post.aspx?id=86d5ed01-0cc7-4e9e-b17c-b42524b677470https://blog.atwork.at/trackback.axd?id=86d5ed01-0cc7-4e9e-b17c-b42524b67747https://blog.atwork.at/post/2019/01/03/Convert-Markdown-to-PDF#commenthttps://blog.atwork.at/syndication.axd?post=86d5ed01-0cc7-4e9e-b17c-b42524b67747