Quantcast
Channel: TechNet Blogs
Viewing all 36188 articles
Browse latest View live

スマートワークの推進: 「GTD」の勧め 【2/7 更新】

$
0
0

(この記事は2017年11月17日にMicrosoft Partner Network blog に掲載された記事 Work smarter, not harder: Getting Things Done の翻訳です。最新情報についてはリンク元のページをご参照ください。)

 

生産性の高さでは右に出る者がいない業界のリーダーたちでさえ、ビジネスが拡大するにつれて、多忙な仕事の管理に苦労することがあります。私たちは目の前のやらなくてはならない仕事をこなすのに精いっぱいで、ポートフォリオの拡充といったビジネスの重要な意思決定など、本当にやりたいことを後回しにしがちです。時間管理に行き詰まる一因は、多くの会議やメール返信などのタスクに追われるあまり、仕事が一向に終わらないと感じていることにあります。

そこで有効なのが、GTD (Getting Things Done) の概念です。GTD は、生産性向上コンサルタントの David Allen 氏がベストセラー『Getting Things Done』 (邦題『仕事を成し遂げる技術』) で紹介した、終わりのない ToDo リストのタスクをうまくこなしていくための手法です。この手法では、タスクを整理することで、仕事の優先度やスケジュールが管理しやすくなります。GTD を使用するメリットとしては、タスクの可視性が高まり、何に時間を使うかをうまくコントロールできるようになることに加え、仕事の効率化を妨げている気がかりな事柄を解消できることなどが挙げられます。

GTD メソッドを活用し、「やらなくてはならない」仕事をやり遂げる方法について考え直してみましょう。

 

 

 

仕事の効率アップのコツをご存じでしたら、ぜひマイクロソフト パートナー コミュニティ (英語) までお寄せください。

 

 

 

 

 

 

 


One stop page for Outlook updates

$
0
0

It’s getting harder and harder to stay up with all the changes in technology, but once in a while, a single landing place appears, which leads to the ever-updating Outlook product page: https://support.office.com/en-us/article/Fixes-or-workarounds-for-recent-issues-in-Outlook-for-Windows-ecf61305-f84f-4e13-bb73-95a214ac1230

The is page is maintained by the Microsoft Outlook support engineers. While there are lots of internet pages to monitor and watch, this one specifically for Outlook is a good resource.

SharePoint Online Active Authentication

$
0
0

This post is a contribution from Vitaly Lyamin, an engineer with the SharePoint Developer Support team

We often see issues that have to do with actively authenticating to SharePoint Online for the purpose of consuming API’s and services (WCF and ASMX). There are 2 flavors of authentication - one with a Custom STS and one without (Using MSO STS only). The end goal is to retrieve the authentication cookie (SPOIDCRL cookie).

Step 1: Getting the Custom STS active endpoint URL
Microsoft Online provides a way to discover the custom STS authentication URL via the “GetUserRealm.srf” endpoint. The “STSAuthURL” node in the XML response contains the value.

Step 2: Authenticating to the STS and Retrieving the BinarySecurityToken
The default MSO endpoint https://login.microsoftonline.com/rst2.srf will either take the *.onmicrosoft.com user credentials or the assertion from the custom STS.

If there’s a custom STS (as discovered in previous step), that endpoint needs to be hit first to retrieve the assertion.

The SAML response from rst2.srf endpoint contains the BinarySecurityToken which is retrieved and used in the next step.

STS Endpoints
https://login.microsoftonline.com/rst2.srf (default MSO endpoint)
https://#ADFSHOST#/adfs/services/trust/2005/usernamemixed (username/password ADFS endpoint)
https://#ADFSHOST#/adfs/services/trust/2005/windowstransport (integrated Windows ADFS endpoint)

Step 3: Get the SPOIDCRL Cookie
Now that we have the BinarySecurityToken, we can pass the value to the https://TENANT.sharepoint.com/_vti_bin/idcrl.svc endpoint in the Authorization header.

Authorization Header with BinarySecurityToken
Authorization: BPOSIDCRL t=*

The response from the idcrl.svc sets the SPOIDCRL cookie which can be programmatically retrieved and used in subsequent API calls.

PowerShell Script

<#
    .Synopsis 
        Retrieve SPOIDCR cookie for SharePoint Online.
    .Description
        Authenticates to the sts and retrieves the SPOIDCR cookie for SharePoint Online.
        Will use the custom IDP if one has been setup.
        Optionally, can use integrated credentials (when integrated is set to true) with ADFS using the windowsmixed endpoint.
        Results are formattable as XML, JSON, KEYVALUE, and by line.
        
        Makes global variables avaiable at the end of the run.
        $spoidcrl contains the SPOIDCRL cookie

    .Example 
        The following returns the SPOIDCRL cookie value provided a username and password.

        PS> .spoidcrl.ps1 -url https://contoso.sharepoint.com -username user@contoso.com -password ABCDEFG
    .Example 
        The following returns the SPOIDCRL cookie value using integrated windows credentials. Applies only to ADFS.

        PS> .spoidcrl.ps1 -url https://contoso.sharepoint.com/sites/site1 -integrated

	.Example 
        The following saves the SPOIDCRL cookie value using integrated windows credentials. Applies only to ADFS.

        PS> .spoidcrl.ps1 -url https://contoso.sharepoint.com/sites/site1 -integrated -format "XML" | Out-File "c:tempspoidcr.txt"

    .PARAMETER url 
        Tenant url (e.g. contoso.sharepoint.com)
    .PARAMETER username
        The username to login with. (e.g. user@contoso.com or user@contoso.onmicrosoft.com)		
    .PARAMETER password
      The password to login with.
    .PARAMETER integrated
      Whether to use integrated credentials (user running PowerShell) instead of explicit credentials.
      Needs to be supported by ADFS.
    .PARAMETER format
      How to format the output. Options include: XML, JSON, KEYVALUE

#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$url,
[Parameter(Mandatory=$false)]
[string]$username,
[Parameter(Mandatory=$false)]
[string]$password,
[Parameter(Mandatory=$false)]
[switch]$integrated = $false,
[Parameter(Mandatory=$false)]
[string]$format
)

$statusText = New-Object System.Text.StringBuilder

function log($info)
{
    if([string]::IsNullOrEmpty($info))
    {
        $info = ""
    }

    [void]$statusText.AppendLine($info)
}

try
{
    if (![uri]::IsWellFormedUriString($url, [UriKind]::Absolute))
    {
        throw "Parameter 'url' is not a valid URI."
    }
    else
    {
        $uri = [uri]::new($url)
        $tenant = $uri.Authority
    }

    if ($tenant.EndsWith("sharepoint.com", [System.StringComparison]::OrdinalIgnoreCase))
    {
        $msoDomain = "sharepoint.com"
    }
    else
    {
        $msoDomain = $tenant
    }

    if ($integrated.ToBool())
    {
        [System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices") | out-null
        [System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement") | out-null
        $username = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.UserPrincipalName
    }
    elseif ([string]::IsNullOrWhiteSpace($username) -or [string]::IsNullOrWhiteSpace($password))
    {
        $credential = Get-Credential -UserName $username -Message "Enter credentials"
        $username = $credential.UserName
        $password = $credential.GetNetworkCredential().Password
    }

    $contextInfoUrl = $url.TrimEnd('/') + "/_api/contextinfo"
    $getRealmUrl = "https://login.microsoftonline.com/GetUserRealm.srf"
    $realm = "urn:federation:MicrosoftOnline"
    $msoStsAuthUrl = "https://login.microsoftonline.com/rst2.srf"
    $idcrlEndpoint = "https://$tenant/_vti_bin/idcrl.svc/"
    $username = [System.Security.SecurityElement]::Escape($username)
    $password = [System.Security.SecurityElement]::Escape($password)

    # Custom STS integrated authentication envelope format index info
    # 0: message id - unique guid
    # 1: custom STS auth url
    # 2: realm
    $customStsSamlIntegratedRequestFormat = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><s:Envelope xmlns:s=`"http://www.w3.org/2003/05/soap-envelope`" xmlns:a=`"http://www.w3.org/2005/08/addressing`"><s:Header><a:Action s:mustUnderstand=`"1`">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action><a:MessageID>urn:uuid:{0}</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand=`"1`">{1}</a:To></s:Header><s:Body><t:RequestSecurityToken xmlns:t=`"http://schemas.xmlsoap.org/ws/2005/02/trust`"><wsp:AppliesTo xmlns:wsp=`"http://schemas.xmlsoap.org/ws/2004/09/policy`"><wsa:EndpointReference xmlns:wsa=`"http://www.w3.org/2005/08/addressing`"><wsa:Address>{2}</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</t:KeyType><t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType></t:RequestSecurityToken></s:Body></s:Envelope>";


    # custom STS envelope format index info
    # {0}: ADFS url, such as https://corp.sts.contoso.com/adfs/services/trust/2005/usernamemixed, its value comes from the response in GetUserRealm request.
    # {1}: MessageId, it could be an arbitrary guid
    # {2}: UserLogin, such as someone@contoso.com
    # {3}: Password
    # {4}: Created datetime in UTC, such as 2012-11-16T23:24:52Z
    # {5}: Expires datetime in UTC, such as 2012-11-16T23:34:52Z
    # {6}: tokenIssuerUri, such as urn:federation:MicrosoftOnline, or urn:federation:MicrosoftOnline-int
    $customStsSamlRequestFormat = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><s:Envelope xmlns:s=`"http://www.w3.org/2003/05/soap-envelope`" xmlns:wsse=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd`" xmlns:saml=`"urn:oasis:names:tc:SAML:1.0:assertion`" xmlns:wsp=`"http://schemas.xmlsoap.org/ws/2004/09/policy`" xmlns:wsu=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd`" xmlns:wsa=`"http://www.w3.org/2005/08/addressing`" xmlns:wssc=`"http://schemas.xmlsoap.org/ws/2005/02/sc`" xmlns:wst=`"http://schemas.xmlsoap.org/ws/2005/02/trust`"><s:Header><wsa:Action s:mustUnderstand=`"1`">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</wsa:Action><wsa:To s:mustUnderstand=`"1`">{0}</wsa:To><wsa:MessageID>{1}</wsa:MessageID><ps:AuthInfo xmlns:ps=`"http://schemas.microsoft.com/Passport/SoapServices/PPCRL`" Id=`"PPAuthInfo`"><ps:HostingApp>Managed IDCRL</ps:HostingApp><ps:BinaryVersion>6</ps:BinaryVersion><ps:UIVersion>1</ps:UIVersion><ps:Cookies></ps:Cookies><ps:RequestParams>AQAAAAIAAABsYwQAAAAxMDMz</ps:RequestParams></ps:AuthInfo><wsse:Security><wsse:UsernameToken wsu:Id=`"user`"><wsse:Username>{2}</wsse:Username><wsse:Password>{3}</wsse:Password></wsse:UsernameToken><wsu:Timestamp Id=`"Timestamp`"><wsu:Created>{4}</wsu:Created><wsu:Expires>{5}</wsu:Expires></wsu:Timestamp></wsse:Security></s:Header><s:Body><wst:RequestSecurityToken Id=`"RST0`"><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference>  <wsa:Address>{6}</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><wst:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</wst:KeyType></wst:RequestSecurityToken></s:Body></s:Envelope>"

    # mso envelope format index info (Used for custom STS + MSO authentication)
    # 0: custom STS assertion
    # 1: mso endpoint
    $msoSamlRequestFormat = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><S:Envelope xmlns:S=`"http://www.w3.org/2003/05/soap-envelope`" xmlns:wsse=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd`" xmlns:wsp=`"http://schemas.xmlsoap.org/ws/2004/09/policy`" xmlns:wsu=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd`" xmlns:wsa=`"http://www.w3.org/2005/08/addressing`" xmlns:wst=`"http://schemas.xmlsoap.org/ws/2005/02/trust`"><S:Header><wsa:Action S:mustUnderstand=`"1`">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</wsa:Action><wsa:To S:mustUnderstand=`"1`">https://login.microsoftonline.com/rst2.srf</wsa:To><ps:AuthInfo xmlns:ps=`"http://schemas.microsoft.com/LiveID/SoapServices/v1`" Id=`"PPAuthInfo`"><ps:BinaryVersion>5</ps:BinaryVersion><ps:HostingApp>Managed IDCRL</ps:HostingApp></ps:AuthInfo><wsse:Security>{0}</wsse:Security></S:Header><S:Body><wst:RequestSecurityToken xmlns:wst=`"http://schemas.xmlsoap.org/ws/2005/02/trust`" Id=`"RST0`"><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference><wsa:Address>{1}</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><wsp:PolicyReference URI=`"MBI`"></wsp:PolicyReference></wst:RequestSecurityToken></S:Body></S:Envelope>"

    # mso envelope format index info (Used for MSO-only authentication)
    # 0: mso endpoint
    # 1: username
    # 2: password
    $msoSamlRequestFormat2 = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><S:Envelope xmlns:S=`"http://www.w3.org/2003/05/soap-envelope`" xmlns:wsse=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd`" xmlns:wsp=`"http://schemas.xmlsoap.org/ws/2004/09/policy`" xmlns:wsu=`"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd`" xmlns:wsa=`"http://www.w3.org/2005/08/addressing`" xmlns:wst=`"http://schemas.xmlsoap.org/ws/2005/02/trust`"><S:Header><wsa:Action S:mustUnderstand=`"1`">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</wsa:Action><wsa:To S:mustUnderstand=`"1`">{0}</wsa:To><ps:AuthInfo xmlns:ps=`"http://schemas.microsoft.com/LiveID/SoapServices/v1`" Id=`"PPAuthInfo`"><ps:BinaryVersion>5</ps:BinaryVersion><ps:HostingApp>Managed IDCRL</ps:HostingApp></ps:AuthInfo><wsse:Security><wsse:UsernameToken wsu:Id=`"user`"><wsse:Username>{1}</wsse:Username><wsse:Password>{2}</wsse:Password></wsse:UsernameToken></wsse:Security></S:Header><S:Body><wst:RequestSecurityToken xmlns:wst=`"http://schemas.xmlsoap.org/ws/2005/02/trust`" Id=`"RST0`"><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference><wsa:Address>sharepoint.com</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><wsp:PolicyReference URI=`"MBI`"></wsp:PolicyReference></wst:RequestSecurityToken></S:Body></S:Envelope>"


    function Invoke-HttpPost($endpoint, $body, $headers, $session)
    {
        log
        log "Invoke-HttpPost"
        log "url: $endpoint"
        log "post body: $body"

        $params = @{}
        $params.Headers = $headers
        $params.uri = $endpoint
        $params.Body = $body
        $params.Method = "POST"
        $params.WebSession = $session

        $response = Invoke-WebRequest @params -ContentType "application/soap+xml; charset=utf-8" -UseDefaultCredentials -UserAgent ([string]::Empty)
        $content = $response.Content

        return $content
    }

    # Get saml Assertion value from the custom STS
    function Get-AssertionCustomSts($customStsAuthUrl)
    {
        log
        log "Get-AssertionCustomSts"

        $messageId = [guid]::NewGuid()
        $created = [datetime]::UtcNow.ToString("o", [System.Globalization.CultureInfo]::InvariantCulture)
        $expires = [datetime]::UtcNow.AddMinutes(10).ToString("o", [System.Globalization.CultureInfo]::InvariantCulture)

        if ($integrated.ToBool())
        {
            log "integrated"

            $customStsAuthUrl = $customStsAuthUrl.ToLowerInvariant().Replace("/usernamemixed","/windowstransport")
            log $customStsAuthUrl

            $requestSecurityToken = [string]::Format($customStsSamlIntegratedRequestFormat, $messageId, $customStsAuthUrl, $realm)
            log $requestSecurityToken

        }
        else
        {
            log "not integrated"

            $requestSecurityToken = [string]::Format($customStsSamlRequestFormat, $customStsAuthUrl, $messageId, $username, $password, $created, $expires, $realm)
            log $requestSecurityToken

        }

        [xml]$customStsXml = Invoke-HttpPost $customStsAuthUrl $requestSecurityToken

        return $customStsXml.Envelope.Body.RequestSecurityTokenResponse.RequestedSecurityToken.Assertion.OuterXml
    }

    function Get-BinarySecurityToken($customStsAssertion, $msoSamlRequestFormatTemp)
    {
        log
        log "Get-BinarySecurityToken"

        if ([string]::IsNullOrWhiteSpace($customStsAssertion))
        {
            log "using username and password"
            $msoPostEnvelope = [string]::Format($msoSamlRequestFormatTemp, $msoDomain, $username, $password)
        }
        else
        {
            log "using custom sts assertion"
            $msoPostEnvelope = [string]::Format($msoSamlRequestFormatTemp, $customStsAssertion, $msoDomain)
        }

        $msoContent = Invoke-HttpPost $msoStsAuthUrl $msoPostEnvelope

        # Get binary security token using regex instead of [xml]
        # Using regex to workaround PowerShell [xml] bug where hidden characters cause failure
        [regex]$regex = "BinarySecurityToken Id=.*>([^<]+)<"
        $match = $regex.Match($msoContent).Groups[1]

        return $match.Value
    }

    function Get-SPOIDCRLCookie($msoBinarySecurityToken)
    {
        log
        log "Get-SPOIDCRLCookie"
        log
        log "BinarySecurityToken: $msoBinarySecurityToken"

        $binarySecurityTokenHeader = [string]::Format("BPOSIDCRL {0}", $msoBinarySecurityToken)
        $params = @{uri=$idcrlEndpoint
                    Method="GET"
                    Headers = @{}
                   }
        $params.Headers["Authorization"] = $binarySecurityTokenHeader
        $params.Headers["X-IDCRL_ACCEPTED"] = "t"

        $resonse = Invoke-WebRequest @params -UserAgent ([string]::Empty)
        $cookie = $resonse.BaseResponse.Cookies["SPOIDCRL"]

        return $cookie
    }

    # Retrieve the configured STS Auth Url (ADFS, PING, etc.)
    function Get-UserRealmUrl($getRealmUrl, $username)
    {
        log
        log "Get-UserRealmUrl"
        log "url: $getRealmUrl"
        log "username: $username"

        $body = "login=$username&xml=1"
        $response = Invoke-WebRequest -Uri $getRealmUrl -Method POST -Body $body -UserAgent ([string]::Empty)

        return ([xml]$response.Content).RealmInfo.STSAuthURL
    }

    [System.Net.ServicePointManager]::Expect100Continue = $true

    #1 Get custom STS auth url
    $customStsAuthUrl = Get-UserRealmUrl $getRealmUrl $username

    if ($customStsAuthUrl -eq $null)
    {
        #2 Get binary security token from the MSO STS by passing the SAML <Assertion> xml
        $customStsAssertion = $null
        $msoBinarySecurityToken = Get-BinarySecurityToken $customStsAssertion $msoSamlRequestFormat2
    }
    else
    {
        #2 Get SAML <Assertion> xml from custom STS
        $customStsAssertion = Get-AssertionCustomSts $customStsAuthUrl

        #3 Get binary security token from the MSO STS by passing the SAML <Assertion> xml
        $msoBinarySecurityToken = Get-BinarySecurityToken $customStsAssertion $msoSamlRequestFormat
    }

    #3/4 Get SPOIDRCL cookie from SharePoint site by passing the binary security token
    #  Save cookie and reuse with multiple requests
    $idcrl = $null
    $idcrl = Get-SPOIDCRLCookie $msoBinarySecurityToken

    if ([string]::IsNullOrEmpty($format))
    {
        $format = [string]::Empty
    }
    else
    {
        $format = $format.Trim().ToUpperInvariant()
    }

    $Global:spoidcrl = $idcrl

    if ($format -eq "XML")
    {
        Write-Output ([string]::Format("<SPOIDCRL>{0}</SPOIDCRL>", $idcrl.Value))
    }
    elseif ($format -eq "JSON")
    {
        Write-Output ([string]::Format("{{`"SPOIDCRL`":`"{0}`"}}", $idcrl.Value))
    }
    elseif ($format.StartsWith("KEYVALUE") -or $format.StartsWith("NAMEVALUE"))
    {
        Write-Output ("SPOIDCRL:" + $idcrl.Value)
    }
    else
    {
        Write-Output $idcrl.Value
    }

}
catch
{
    log $error[0]
    "ERROR:" + $statusText.ToString()
}


SharePoint Online AAD App OAuth

$
0
0

This post is a contribution from Vitaly Lyamin, an engineer with the SharePoint Developer Support team

Accessing SharePoint API’s has never been easier (SPOIDCRL cookie, ACS OAuth, AAD OAuth). Azure AD apps are quickly becoming the standard way of accessing O365 API’s in addition to other API’s. Below are some resources on registering apps and using libraries. Also, there’s a test script that walks through the entire authorization grant flow. The end goal with all OAuth-based authorization is to retrieve the access token to be used in the HTTP request Authorization header (Authorization: Bearer <access token>).

Native Client App
Native app registrations are primarily for devices and services where browser interaction is not needed. One of the biggest benefits is the non-interactive (active) authorization using credentials, Federated IDP assertion or similar.

Links
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-scenarios#native-application-to-web-api
https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-native-headless

Web App / API
Web app registrations are just as they sound – apps on the web. These apps typically use the authorization grant and refresh grant flows and are not intended for devices/services. Once authorized (some permissions scopes require admin consent), the access token is retrieved from the OAuth token endpoint using the authorization code.

Authorization URL
https://login.microsoftonline.com/common/oauth2/authorize?resource=<RESOURCE>&client_id=>CLIENTID>&scope=<SCOPE>&redirect_uri=<REDIRECTURI>&response_type=code&prompt=admin_consent

Access Token URL
https://login.microsoftonline.com/common/oauth2/token

Link
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-scenarios#web-browser-to-web-application

Libraries
ADAL libraries are available in many different flavors and are quick and easy to implement. There primary purpose is to authorize the user/service to a resource (e.g. SharePoint REST API’s, Graph).

Link
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries

Other Resources
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applications
https://msdn.microsoft.com/en-us/office/office365/howto/getting-started-Office-365-APIs

Test Script (Web App)

<#
    .Synopsis
        Get access token for AAD web app.

    .Description
        Authorizes AAD app and retrieves access token using OAuth 2.0 and endpoints.
        Refreshes the token if within 5 minutes of expiration or, optionally forces refresh.
        Sets global variable ($Global:accessTokenResult) that can be used after the script runs.

    .Todo
        Add ability to handle refresh token input and access token retrieval without re-authorization.

    .Example 
        The following returns the access token result from AAD with admin consent authorization and caches the result.

        PS> .aad_web.ps1 -Clientid "" -Clientsecret "" -Resource "https://TENANT.sharepoint.com" -Redirecturi "https://localhost:44385" -Scope "" -AdminConsent -Cache
    
    .Example 
        The following returns the access token result from AAD with admin consent authorization or refreshes the token.

        PS> .aad_web.ps1 -Clientid "" -Clientsecret "" -Resource "https://TENANT.sharepoint.com" -Redirecturi "https://localhost:44385" -Scope "" -AdminConsent
    
    .Example 
        The following returns the access token result from AAD or from cache, forces refresh so the token is good for an hour and outputs to a file

        PS> .aad_web.ps1 -Clientid "" -Clientsecret "" -Resource "https://TENANT.sharepoint.com" -Redirecturi "https://localhost:44385" -Scope "" -Refresh Force | Out-File c:temptoken.txt

    .PARAMETER ClientId 
        The AAD App client id.
    .PARAMETER ClientSecret
        The AAD App client secret.	
    .PARAMETER RedirectUri
        The redirect uri configured for that app.
    .PARAMETER Resource
        The resource the app is attempting to access (i.e. https://TENANT.sharepoint.com)
    .PARAMETER Scope
        Permission scopes for the app (optional).
    .PARAMETER AdminConsent
        Will perform admin consent (optional).
    .PARAMETER Cache
        Cache the access token in the temp directory for subsequent retrieval (optional).
    .PARAMETER Refresh
        Options (Yes, No, Force). Will automatically enabling caching if "Yes" or "Force" are used.
        Yes: Refresh token if within 5 minutes of expiration if cached token found.
        No: Do not refresh and re-authorize.
        Force: Forfce a refresh if cached token found.

#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$ClientId,
[Parameter(Mandatory=$true)]
[string]$ClientSecret,
[Parameter(Mandatory=$true)]
[string]$RedirectUri,
[Parameter(Mandatory=$true)]
[string]$Resource,
[Parameter(Mandatory=$false)]
[string]$Scope,
[Parameter(Mandatory=$false)]
[switch]$AdminConsent,
[Parameter(Mandatory=$false)]
[switch]$Cache,
[Parameter(Mandatory=$false)]
[ValidateSet("Yes","No","Force")]
[ValidateNotNullOrEmpty()]
[string]$Refresh = "Yes"
)

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Web

$isCache = $Cache.IsPresent
$isRefresh = (($Refresh -eq "Yes") -or ($Refresh -eq "Force"))
$refreshForce = $Refresh -eq "Force"

if ($isRefresh)
{
    $isCache = $true
}

# Don't edit variables below (unless there's a bug)
$clientSecretEncoded = [uri]::EscapeDataString($clientSecret)
$redirectUriEncoded = [uri]::EscapeDataString($redirectUri)
$resourceEncoded = [uri]::EscapeDataString($resource)
$accessTokenUrl = "https://login.microsoftonline.com/common/oauth2/token"
$cacheFilePath = [System.IO.Path]::Combine($env:TEMP, "aad_web_cache_$clientId.json")

$accessTokenResult = $null
$adminConsentText =""
if ($adminConsent)
{
    $adminConsentText = "&prompt=admin_consent"
}

$authorizationUrl = "https://login.microsoftonline.com/common/oauth2/authorize?resource=$resourceEncoded&client_id=$clientId&scope=$scope&redirect_uri=$redirectUriEncoded&response_type=code$adminConsentText"

function Invoke-OAuth()
{
    $Global:authorizationCode = $null

    $form = New-Object Windows.Forms.Form
    $form.FormBorderStyle = [Windows.Forms.FormBorderStyle]::FixedSingle
    $form.Width = 640
    $form.Height = 480
    $form.MaximizeBox = $false
    $form.MinimizeBox = $false

    $web = New-Object Windows.Forms.WebBrowser
    $form.Controls.Add($web)

    $web.Size = $form.ClientSize
    $web.DocumentText = "<html><body style='text-align:center;overflow:hidden;background-image:url(https://secure.aadcdn.microsoftonline-p.com/ests/2.1.6856.20/content/images/backgrounds/0.jpg?x=f5a9a9531b8f4bcc86eabb19472d15d5)'><h3 id='title'>Continue with current user or logout?</h3><div><input id='cancel' type='button' value='Continue' /></div><br /><div><input id='logout' type='button' value='Logout' /></div><h5 id='loading' style='display:none'>Working on it...</h5><script type='text/javascript'>var logout = document.getElementById('logout');var cancel = document.getElementById('cancel');function click(element){document.getElementById('title').style.display='none';document.getElementById('loading').style.display='block';logout.style.display='none';cancel.style.display='none';if (this.id === 'logout'){window.location = 'https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=' + encodeURIComponent('$authorizationUrl');}else{window.location = '$authorizationUrl';}}logout.onclick = click;cancel.onclick = click;</script></body></html>"

    $web.add_DocumentCompleted(
    {
        $uri = [uri]$redirectUri
        $queryString = [System.Web.HttpUtility]::ParseQueryString($_.url.Query)

        if($_.url.authority -eq $uri.authority)
        {
            $authorizationCode = $queryString["code"]

            if (![string]::IsNullOrEmpty($authorizationCode))
            {
                $form.DialogResult = "OK"
                $Global:authorizationCode = $authorizationCode
                $Global:authorizationCodeTime = [datetime]::Now
            }

            $form.close()
        }
    })

    $dialogResult = $form.ShowDialog()

    if($dialogResult -eq "OK")
    {
        $authorizationCode = $Global:authorizationCode
        $headers = @{"Accept" = "application/json;odata=verbose"}
        $body = "client_id=$clientId&client_secret=$clientSecretEncoded&redirect_uri=$redirectUriEncoded&grant_type=authorization_code&code=$authorizationCode"

        $accessTokenResult = Invoke-RestMethod -Uri $accessTokenUrl -Method POST -Body $body -Headers $headers
        $Global:accessTokenResult = $accessTokenResult
        $Global:accessTokenResultTime = [datetime]::Now
        $accessTokenResultText = (ConvertTo-Json $accessTokenResult)

        if ($isCache -and ![string]::IsNullOrEmpty($accessTokenResultText))
        {
            [void](Set-Content -Path $cacheFilePath -Value $accessTokenResultText)
        }

        Write-Output (ConvertTo-Json $accessTokenResultText)
    }

    $web.Dispose()
    $form.Dispose()
}

function Get-CachedAccessTokenResult()
{
    if ($isCache -and [System.IO.File]::Exists($cacheFilePath))
    {
        $accessTokenResultText = Get-Content -Raw $cacheFilePath
        if (![string]::IsNullOrEmpty($accessTokenResultText))
        {
            $accessTokenResult  = (ConvertFrom-Json $accessTokenResultText)
            if (![string]::IsNullOrEmpty($accessTokenResult.access_token))
            {
                $Global:accessTokenResult = $accessTokenResult

                return $accessTokenResult
            }
        }
    }

    return $null
}

function Invoke-Refresh()
{
    $refreshToken = $accessTokenResult.refresh_token
    $headers = @{"Accept" = "application/json;odata=verbose"}
    $body = "client_id=$clientId&client_secret=$clientSecretEncoded&resource=$resourceEncoded&grant_type=refresh_token&refresh_token=$refreshToken"
    $accessTokenResult2 = Invoke-RestMethod -Uri $accessTokenUrl -Method POST -Body $body -Headers $headers

    $accessTokenResult.scope = $accessTokenResult2.scope
    $accessTokenResult.expires_in = $accessTokenResult2.expires_in
    $accessTokenResult.ext_expires_in = $accessTokenResult2.ext_expires_in
    $accessTokenResult.expires_on = $accessTokenResult2.expires_on
    $accessTokenResult.not_before = $accessTokenResult2.not_before
    $accessTokenResult.resource = $accessTokenResult2.resource
    $accessTokenResult.access_token = $accessTokenResult2.access_token
    $accessTokenResult.refresh_token = $accessTokenResult2.refresh_token

    $Global:accessTokenResult = $accessTokenResult
    $Global:accessTokenResultTime = [datetime]::Now
    $accessTokenResultText = (ConvertTo-Json $accessTokenResult)

    if (![string]::IsNullOrEmpty($accessTokenResultText))
    {
        [void](Set-Content -Path $cacheFilePath -Value $accessTokenResultText)
    }

    Write-Output (ConvertTo-Json $accessTokenResultText)
}

$accessTokenResult = Get-CachedAccessTokenResult
if ($accessTokenResult -eq $null)
{
    Invoke-OAuth
}
elseif ($refreshForce -or (([datetime]::Parse("1/1/1970")).AddSeconds([int]$accessTokenResult.expires_on).ToLocalTime() -lt ([datetime]::Now).AddMinutes(5)))
{
    if ($isRefresh)
    {
        Invoke-Refresh
    }
    else
    {
        Invoke-OAuth
    }
}
else
{
    Write-Output (ConvertTo-Json $Global:accessTokenResult)
}

『PlayerUnknown’s Battlegrounds』を同梱した『Xbox One S 1 TB (PlayerUnknown’s Battlegrounds 同梱版)』を 2018 年 2 月 20 日 (火) に発売

$
0
0

日本マイクロソフト株式会社 (本社: 東京都港区) は、『Xbox One S 1 TB』に、『PlayerUnknown’s Battlegrounds』ゲーム プレビュー版ダウンロードご利用コードを同梱した『Xbox One S 1 TB (PlayerUnknown’s Battlegrounds 同梱版)』を 2018 年 2 月 20 日 (火) に 29,980 円 (税抜参考価格)※1 で全国の Xbox 製品取り扱い販売店で発売します。

『PlayerUnknown's Battlegrounds』は、最大 100 人のプレイヤーを、ただ 1 人が生き残るまで戦う激しいサバイバル バトルに放り込みます。補給物資を奪い、武器を見つけて、1 人またはチームで戦うマルチプレイヤー シューティング ゲームです。
また、本製品には『Xbox Live ゴールド メンバーシップ 1 ヶ月』通常版を同梱し、購入してすぐに PlayerUnknown’s Battlegrounds をプレイすることができます。さらに毎月無料のゲームを入手できたり Xbox Live Gold メンバーシップ限定の割引販売などのサービスを受けることができます。
『Xbox One S 1 TB』は、4K Ultra HD Blu-ray ディスク ドライブを内蔵し、対応した TV であればストリーミングで 4K 映像を視聴できるだけでなく、4K Ultra HD Blu-ray ディスク プレイヤーとしても楽しむことができます。また、HDR (High Dynamic Range) をサポートするため、HDR 対応のゲームでは、松明に照らされた薄暗いダンジョンの壁から太陽の下でのまぶしい風景まで描き出し、より自然な表現が可能になります。また、Xbox One S は、今まで発売された Xbox One 用周辺機器およびゲームをそのままお使いいただくことができ※2、従来 Kinect センサーに搭載されていた TV の音量などを操作するための IR ブラスターを本体に搭載しています。

製品基本情報

Xbox One S 1 TB (PlayerUnknown’s Battlegrounds 同梱版)

製品名
Xbox One S 1 TB (PlayerUnknown’s Battlegrounds 同梱版)
国内販売元
日本マイクロソフト株式会社
発売予定日
2018 年 2 月 20 日 (火)
参考価格
29,980 円 (税抜)※1
レーティング
CERO D (17 才以上対象)
主な同梱内容物
  • Xbox One S 本体 (1 TB HDD 内蔵、ホワイト)
  • Xbox ワイヤレス コントローラー (Bluetooth 対応)
  • 『PlayerUnknown’s Battlegrounds』ゲーム プレビュー版ダウンロード ご利用コード (CERO D (17 才以上対象))
  • Xbox Live ゴールド メンバーシップ 1 ヶ月 ご利用コード
  • その他付属品
  • ハイスピード HDMI® ケーブル
  • 電源コード
  • 取扱説明書一式
  • 単 3 形乾電池 x 2 (試供品)
製品仕様※3
Xbox One S 本体
外形寸法
295 x 230 x 63 mm
重量
約 2.9 kg
CPU
8 コア x86 AMD
RAM
8 GB
ハードドライブ
内蔵 (1 TB※4)
光学ドライブ
Ultra HD Blu-ray、Blu-ray、DVD、CD
通信
無線 LAN (802.11a/b/g/n/ac)
ギガビット イーサネット
外部インターフェース
HDMI 入力端子
HDMI 出力端子
光デジタル音声出力端子
USB 3.0 端子 x 3
イーサネット端子
IR ブラスター端子
付属品
Xbox ワイヤレスコントローラー
外形寸法:約 153 x 61 x 102 mm
重さ:約 280g
同梱ゲーム
『PlayerUnknown’s Battlegrounds』ゲーム プレビュー版ダウンロードご利用コード (CERO D (12 才以上対象))
その他特典
Xbox Live ゴールド メンバーシップ 1 ヶ月ご利用コード
備考:
  • Xbox One でオンライン マルチプレイをするには Xbox Live ゴールド メンバーシップが必要です。
  • 本製品にディスクは同梱していません。同梱のダウンロード版ご利用コードを利用してゲーム本体をダウンロードする必要があります (ISP 料金が別途かかる場合があります) 。
  • ゲーム プレビュー版は現在開発中のため、今後内容が変更される可能性があり、最終的な製品として発売されない場合があります。詳細は xbox.com/gamepreview をご覧ください。

1 お客様の購入価格は、販売店により決定されますので、販売店にお問い合わせ下さい。
2 Xbox Kinect センサーを Xbox One S でお使いいただくには Kinect センサー アダプター (別売) が必要です。
3 製品仕様は予告なく変更される場合があります。
4 システム ソフトウェアで使用する容量以外をご利用いただけます。
.none{display:none;}
.entry-title {font-size: 32px;}
.info .row {margin: 0 auto; border-right: 1px solid #ddd;}
.row-eq-height {display: flex; flex-wrap: wrap;}
.text-etc {padding: 0; margin-top: 30px; margin-bottom: -10px;}
ul {margin-top: 15px; margin-bottom: 15px;}
.info .row .col-sm-3 {background-color: #eee; text-align: right; font-weight: bold;}
.info .row .col-sm-3, .info .row .col-sm-9 {padding: 8px; border-top: 1px solid #ddd; border-left: 1px solid #ddd;}
.info2 {box-sizing: border-box; background-color: #fefefe;}
.info2 {margin: -9px;}
.title {font-size: 1.25em; padding: 5px 0 5px 1.75em; border-left: 3px solid #107C10; border-top: 1px solid #ddd;}
.title:hover {background-color: #f5f5f5;}
.info2 .row .col-xs-4 {background-color: #fdfdfd; text-align: right; font-weight: bold; width:33%;}
.info2 .row .col-xs-4, .info2 .row .col-xs-8 {padding: 8px; border-top: 1px solid #ddd; border-left: 1px solid #ddd; box-sizing: border-box;}
.info .row-end {border-bottom: 1px solid #ddd;}
.br1:after {content: "A"; white-space: pre;}
.sup-text {padding-left: 15px; margin-bottom: 30px;}
.copyright {margin-top: 30px; font-size: .8em;}
.entry-content ul li .etc {font-size: 11px;}

@media screen and (max-width:768px) {
.entry-title {font-size: 21px;}
.title {border-left: 6px solid #107C10;}
.h4_title {font-size: 16px;}
.br:after {content: "A"; white-space: pre;}
.br1:after {content: " "; white-space: pre;}
.br3:after {content: "A"; white-space: pre;}
.info .row .col-sm-3 {text-align: left;}
.info2 .row .col-xs-4, .info2 .row .col-xs-8, .info .row .col-sm-3, .info .row .col-sm-9 {font-size: 13px;}
}

@media screen and (max-width:400px) {
.info2 .row .col-xs-4, .info2 .row .col-xs-8, .info .row .col-sm-3, .info .row .col-sm-9, .entry-content ul li .etc {font-size: 11px;}
}

萬事達卡在Microsoft 365的創新推動下,顛覆了支付產業

$
0
0

今日文章是由Microsoft副總裁Ron Markezich所撰寫。

 

 

顛覆支付產業,造就簡化、便利與安全的全球連結的到來。萬事達卡(Mastercard)將帶領人們實現超越現金的世界,創造如企業的電子錢包、Masterpass與信用卡代碼技術等產品與服務,以改善電子支付的安全性。這些優勢延續了公司在創新上的悠久歷史,扎根於其文化與人們之中。這就是為什麼萬事達卡使用Microsoft 365透過高度安全與現代化工作型態來激勵與吸引他們員工的原因是那麼地激動人心—因為有創意的協同合作就像萬事達卡支付一樣天衣無縫。

以下為萬事達卡營運和技術長Ed McLaughlin對於公司所採用Microsoft雲端解決方案的看法:

「萬事達卡連結全球各地的人們、金融機構、商家與企業。做為支付領域最大的科技公司之一,在安全性的前提之下,我們向員工提供他們所需的工具,不斷地為客戶提供創新。我們選擇Microsoft 365為我們的11,900名員工提供現代化的工作型態,使他們能夠即時性地協同合作,並表現他們最好的一面。」

我喜歡思考如何透過對Office 365平台的持續改善,來擴大每天在萬事達卡上的獨創性與創造性思維。例如,我們正在整個Office 365應用程式中編寫Microsoft機器學習與AI功能。其中一項新功能,Excel的Insight功能,能自動標示數據中的圖形、異常值與趨勢。因此員工可以從不同的角度來了解其商業資訊,從而創造新的想法。

我期待看到下一代的萬事達卡能顛覆全球支付系統!

—Ron Markezich

マイクロソフト、オンラインリスクとその影響に関する最新調査を公開 ー Digital Civility Index(DCI)において、多くのネットの不適切行為は交友関係より発生することが判明

$
0
0

[2018年2月7日]

本記事はこちらのブログの抄訳をベースにしています

マイクロソフトの最新の調査によると、オンラインリスクの状況は世界レベルで改善しているようです。しかし意外なことに、オンラインでの不適切行為のターゲットになった被害者の多くは、加害者と家族や友人関係であったことがわかりました。

マイクロソフトはこれらの内容を含むオンラインリスクの経験とその影響に関するマイクロソフトの最新の調査結果を、国際記念日である Safer Internet Day (英語) に合わせて発表しました。今年から 23 カ国(2016 年度の 14 カ国より増加)で行われ、日本を含めたアジアと中南米向けの独立したレポートも作成しています。

また、Digital Civility Challenge を再実施し、安全なオンラインの対話のための4原則を順守するよう人々に求めています。また、ハッシュタグ #Challenge4Civility と #Im4DigitalCivility とあわせて、オンラインでの適切な行動の事例について紹介することを奨励しています。今年度の Safer Internet Day のテーマは “Create, Connect and Share Respect: A better internet starts with you.”(「互いに敬意を払い合い、共有する:インターネットをより良い場所にするのはあなたです」)です。

世界で最も多いオンラインリスクは「迷惑な接触」と「詐欺行為」

2 年連続で「迷惑な接触」が(調査対象の 20 リスクのうちで)人々が最も多く経験したリスクとなりました。回答者の 41 %が、オンラインで他者から望んでいない接触を受けたと述べています。これは、前年の 43 %と比較して 2 ポイント低い値です。次に多かったのは「詐欺行為」で、回答者の 27 %が経験しています。またこのリスクが調査対象になったのは今回が初めてです。

本レポートにおけるその他の重要なポイント:

  • 回答者の半数以上 (53 %) が現実世界で加害者に会ったことがあると述べています。これは、前年とほぼ同等の数字です。会ったことがある回答者の76 %が、オンラインリスク発生前に加害者に会っていたと回答しています。
  • 回答者の 10 人に 1 人が加害者に会ったと回答しました。これは前年の 11 %よりも低い値です。仕返しをしたと回答した者の割合は 9 %で、これは前年の 17 %よりも低い値です。

日本の DCI は37%で世界で最も低い結果に

オンラインリスクの経験数では日本は世界平均よりも 28 ポイント低い結果となり、23 カ国中、最も低い数値となりました。2017 年に迷惑行為のカテゴリーに 2 つのリスク、いじめ行為のカテゴリーに 1 つのリスクを追加しましたが、これらの変更がなれば日本の DCI は 35% でした。

 

詳細の日本レポートは下記をご確認ください。

Microsoft Digital Civility Index (DCI) 2017 – 日本

 

---

本ページのすべての内容は、作成日時点でのものであり、予告なく変更される場合があります。正式な社内承認や各社との契約締結が必要な場合は、それまでは確定されるものではありません。また、様々な事由・背景により、一部または全部が変更、キャンセル、実現困難となる場合があります。予めご了承下さい。

PowerShell Core 6.0: Restart nebo Refresh?

$
0
0

Finální a podporovaný PowerShell Core verze 6.0 je zde. Co to znamená pro správce, kteří PowerShell používají pro své každodenní úlohy a automatizaci?

Odkaz na vydání směřuje na GitHub. Ano, nová verze je Open Source. Nejen. Obsahuje nemálo zásadních novinek a změn jako je podpora Docker.

Především je ale určena pro všechny hlavní platformy operačních systémů! Funguje tedy na Microsoft Windows, Apple macOS a předních Linux distribucích!

Windows PowerShell?

Jaký je tedy rozdíl mezi Windows PowerShell a PowerShell Core?

Windows PowerShell

  • Vybudován nad .NET Framework (označován jako FullCLR)
  • Dostupný pouze nad Windows
  • Vestavěná komponenta klientských i serverových Windows
  • V systému běží jako powershell.exe
  • Proměnná $PSVersionTable.PSEdition nastavená jako Desktop
  • Používán PowerShell ISE jako editor
  • Podporován dále jen po stránce kritických oprav v rámci aktuálních sestavení Windows

PowerShell Core

  • Vybudován nad .NET Core (označován jako CoreCLR)
  • Dostupný pro Windows, macOS a Linux
  • Dostupný ke stažení jako instalátor či distribuční balíček
  • Není vestavěn do žádné klientské ani serverové verze Windows
  • V systému běží jako pwsh.exe na Windows či jako pwsh na ostatních platformách
  • Proměnná $PSVersionTable.PSEdition je nastavena jako Core
  • Používáno Visual Studio Code jako editor
  • Podporován, rozvíjen, vylepšován, budoucnost

Poznámka: Pro Windows Nano Server byla vydána speciální verze PowerShell Core.

Což znamená?

Všechny skripty budou v původní edici fungovat beze změny a stále dále. Nové funkce a stejně tak jednotlivé moduly pro správu se z většiny přesunou do edice nové. Pokud nyní začínáte s automatizací, psaním skriptů, nepoužíváte jen Windows, poohlédněte se po PowerShell Core.

PowerShell Core lze instalovat vedle Windows PowerShell a nijak neovlivňují svojí funkčnost. Pro novou verzi lze využít také galerie, do které je publikováno nemálo nových příkazů a celých modulů.

V současné době nejsou a nemusí být některé integrované moduly Windows PowerShell určené pro správu OS Windows dostupné. Stejně tak jednotlivé moduly určené pro správu například Exchange či SCCM musí být upraveny jejich vývojovými týmy v budoucnu. Podporován je například ovšem Azure modul doručovány právě přes galerii modulů a skriptů.

Stejně tak zatím není možné spouštět Desired State Configuration zdroje, používat WMIv1 příkazy či standardní workflow. Nový PowerShell lze ovládat také vzdáleně a to i pomocí SSH.

Podrobné informace hledejte v článku PowerShell Core 6.0: Generally Available (GA) and Supported!

- Petr Vlk (MVP, KPCS CZ, WUG)


Download the Truly consistent hybrid cloud with Microsoft Azure whitepaper

$
0
0

If you are planning on integrating and extending your on-premises infrastructure with Azure, download the Truly consistent hybrid cloud with Microsoft Azure whitepaper. What does it cover?

It focuses on the following four pillars...

  • Common Identity
    • When users access applications, they shouldn’t need to worry about whether those applications are running on-premises or in the cloud. Providing consistent identity is a core part of achieving this, which is why Microsoft created Azure Active Directory (Azure AD). This cloud service offers secure single signon, automated provisioning of new users, and more.
  • Integrated Management and Security
    • Using a hybrid cloud can broaden your options for delivering IT services to the organization. But there’s no getting around the fact that hybrid clouds bring new hurdles for management and security.
  • Consistent Data Platform
    • What’s the best approach for working with data in a hybrid cloud? There’s no single answer that’s right for every organization, but one thing is clear: you’ll have important information both in the cloud and on-premises. Given this, it makes sense to have a common approach to working with data in both places.

  • Unified Development and DevOps
    • One of the biggest challenges in using the cloud is that the cloud development platform differs from traditional on-premises platforms. Some things are the same, of course—both environments offer virtual machines running Windows Server and Linux—but others are quite distinct.

Make it Ten!

$
0
0

Logbucheintrag 180207:

Der Jahreswechsel 2017 / 2018 markiert einen wichtigen Wendepunkt für Microsoft, Partner und Kunden. Erstmals sind weltweit mehr Windows 10-Lizenzen installiert als von der bis dahin beliebteste Windows-Version 7. Das jedenfalls belegen die recht zuverlässigen Zahlen von StatCounter, die wiederum auf den Daten aus rund zehn Milliarden Webseiten-Zugriffen pro Monat beruhen. Danach laufen derzeit 42 Prozent aller Windows-Devices unter Windows 10, bei Windows 7 sind es 41 Prozent. Und die Tendenz ist eindeutig: im Laufe des Jahres wird Windows 10 die 50-Prozent-Marke durchbrechen.

In Deutschland wurde der kritische Punkt sogar schon ein Jahr früher erreicht. Hier sind aktuell 51 Prozent aller Windows-Endgeräte mit Windows 10 versorgt – also mehr als alle anderen Windows-Versionen zusammen. Zwar ist im zurückliegenden Quartal der Umsatz mit Windows 10 bei Unternehmen im Vergleich zum Vorjahreszeitraum leicht zurückgegangen. Dies liegt aber an einem besonders starken Quartal Ende 2016. Dagegen haben die Windows 10-Umsätze mit OEMs zugelegt. Das alles belegt: Die Transition zu Windows 10 ist drei Jahre nach der Ankündigung im vollen Gange.

Und nie war es so einfach, das Betriebssystem auf dem aktuellen Stand zu halten. Während noch zu Windows 7-Zeiten Monate, wenn nicht Jahre vergingen, ehe in globalen Konzernen alle Endgeräte auf den aktuellen Stand gebracht werden konnten, sind die Deployment-Zeiten inzwischen signifikant verkürzt. Und damit reduzieren wir auch die Kosten, die beim Wechsel der Windows-Versionen entstehen. Die Zeiten, in denen Helpdesk-Mitarbeiter mit einer goldenen DVD von Schreibtisch zu Schreibtisch wanderten, sind endgültig vorbei. Die Cloud hat sich als Single Source of Truth längst durchgesetzt.

Das zeigt auch die Transition zu Office 365. Die Umsätze mit der Cloud-Version der Office-Suite stiegen im letzten Quartal um 41 Prozent gegenüber dem Vorjahreszeitraum. Das Office-Geschäft mit Endkunden legte um zwölf Prozent, das mit Unternehmen um zehn Prozent zu. Wir zählen inzwischen 29,2 Millionen Office-365-Abonnements von privaten Verbrauchern. Und bei Enterprise-Kunden ist der Wendepunkt längst erreicht: Mehr als die Hälfte aller Unternehmenskunden weltweit haben inzwischen Office 365 im Einsatz.

Die Beispiele zeigen: die Cloud beschleunigt die Software-Modernisierung in den Unternehmen, weil sich der Zeit- und Kostenaufwand deutlich reduziert. Zugleich sind Unternehmen mit der Installation von Sicherheits-Patches früher auf dem aktuellen Stand. Und Anwender genießen mehr Komfort: Wer sich im Active Directory von Windows 10 anmeldet, kann die gleiche ID auch im Azure Active Directory nutzen. Man hat also die gleiche Umgebung On Premises und On Demand.

Die volle Ausrichtung auf Cloud-basierte Geschäftsmodelle zahlt sich immer mehr aus. In nur vier Jahren hat Microsoft an der Börse eine zusätzliche Marktkapitalisierung von einer halben Milliarde Dollar erzielt. Mehr als 64.000 Partner unterstützen uns inzwischen bei Cloud-basierten Angeboten und profitieren selbst von wachsenden Business aus der Cloud. Und unsere Kunden ziehen einen doppelten Nutzen aus der Cloud-Strategie. Sie senken die eigenen Deployment-Kosten signifikant, während sie gleichzeitig zeitnah Aktualisierungen einspielen können. Und mit unserer Strategie „Intelligent Cloud, Intelligent Edge“ sind wir in der Lage, noch schneller als bisher, Innovationen auf den Markt und zum Kunden zu bringen.

Der Wechsel auf Windows 10 lohnt sich deshalb mehrfach: Make it Ten.

 

宣布將 Azure Backup 整合進 VM 建立介面

$
0
0

現在在 VM 建立頁面,您可以做關於虛擬機備份的設定。有了這功能,我們現在可以在 VM 建立的瞬間,開始保護他們。Azure Backup 支援 Azure 提供的各種 VM,包含 Windows 或 Linux VM、託管或非託管磁碟上的虛擬機、進階或標準存儲、加密或非加密的虛擬機,或綜合以上特性的虛擬機。

特色

透過將 Azure Backup 整合到 VM 建立的過程,用戶現在可以:

一鍵設定好備份:有智能預設功能,用戶可以一件新增 VM 備份。

選擇或建立一個 vault:就 vault 而言,用戶可以選擇一個已經存在的,或建立一個新的來儲存備份。為了支援將備份和虛擬機存於不同資源群組的那些用戶設定,我們也支援您將 vault 建立在不同於原先 VM 所存在之資源群組的情形。

管理 VM 的備份規則:用戶可以建立新的備份規則,並用這個規則來設定虛擬機的備份,這些都在建立 VM 時可以體驗到。這個規則也支援企業級 GFS 模式,以便利靈活的備份保留期限。

Azure VM 備份的主要優勢

  • 不需要基礎架構:不需要額外部署任何基礎架構來備份 VM。
  • 一致的應用程式備份:用戶不需關閉虛擬機即可取得適用於 Windows 和 Linux 系統一致的應用程式備份。
  • 即時的檔案復原:有了即時的檔案復原,您可以瀏覽虛擬機內的檔案和資料夾,當想要復原時,您可以指定復原您需要的檔案,不需要整個虛擬機都修復。
  • 使用時才需要付費:簡易的備份收費方式讓您能輕鬆保護 VM。

開始使用

對於所有 Azure Backup 支援的 OS images 都可以啟用這個功能。您在建立 VM 時,第三步驟就會有可以開啟備份的選項。這個功能預設是關閉的,您可以切換來開啟它。

相關的連結和額外的內容

Optimising Azure Spending

$
0
0

By Chris Rhodes, Senior Training Instructor at IT Masterclasses

One common misconception of moving apps and services to the cloud is that we will immediately save money. Whilst this certainly can and should be true, it isn’t necessarily the case. So why is it that organisations sometimes end up with “bill shock” after their first major deployment in the cloud?

Let’s look at an example of a typical workload a customer may deploy in Azure - a virtual machine. Fairly ‘run-of-the-mill’ you might think, a virtual machine. Using Azure for Infrastructure as a Service (IaaS) is usually one of the first services an organisation will consume to transform their organisation into a cloud computing one.

Azure pricing is detailed up-front – you know what this will cost before you purchase, as this screenshot shows.

There are other costs that may be incurred, such as VPN gateways to connect to the on-premises environment and storage accounts for VM data. The fact is, there are many variables in pricing a solution, and the headline figure of the VM may not tell the whole story.

The answer is simple at the core, but it can be complicated to understand how to implement it in practice. The quick answer is “optimisation”.

The point of this article is not to describe all the variable costs, but to think about how an organisation can save money by optimising what they have deployed. Let’s imagine you deployed a D4S_V3 VM as above. This will cost around £106.47 a month, right? Wrong. That’s the pre-optimised cost, and we can bring that down.

Does the VM really need that much compute? Check the performance stats – is the CPU running between 40-80% utilisation? No? Resizing the VM to a smaller spec will save money and only require a reboot to take effect. Maybe you could drop to a E2S_V3 instead, saving 30%.

Do you really need the VM on 24-7? What if you configured the VM to power down outside of core business hours, say from 6pm-9am, and off at weekends? Instead of 168 hours, you will be billed for the hours (and minutes) it is up for and consuming resources. You could be paying for 45 hours, a reduction of 73%.

By combining these two measures, the VM could cost £19.75 instead of the original £106.47. These savings stack up when you consider this approach across all your IaaS and PaaS assets. For medium to large scale deployments, I would recommend using Azure Cost Management, soon to be fully integrated into the Azure portal.

Optimisation should be an essential part of your deployment plan. Failing to do this can be wasteful and lead to an uncompetitive business, and it can certainly help oil the wheels at your next pay review meeting too!

You can find out more at upcoming events Chris will be speaking at, including Windows User Group in York on March 21st.

---

Chris Rhodes (@Chrisreboot on Twitter) is a senior training consultant with IT Masterclasses, a company dedicated to empowering individuals to get the most of their investment in training on the latest technologies, and 6-time MVP awardee.

Unable to connect/RDP/SSH to the failed-over VM (using Azure Site Recovery)

$
0
0

Unable to connect/RDP/SSH to the failed over virtual machine

Is Connect button is grayed out on the virtual machine?

  • If you Connect button is grayed out and you are not connected to Azure via an Express Route or Site-to-Site VPN connection then for ARM (Resource Manager deployment model) add a Public IP on the Network interface of the virtual machine as shown below. 
  • If the deployment model is Classic, then add an endpoint on public port 3389 for RDP and on public port 22 for SSH. See the steps to add an endpoint here.

Is Connect button is available (not grayed out) on the virtual machine?

  • Check Boot diagnostics on your Virtual Machine and check for errors as listed in this article. Note: enabling any setting other than Boot Diagnostics would require Azure VM Agent to be installed in the virtual machine before the failover
  • If the virtual machine has not started, try failing over to an older recovery point.
  • If the application inside the virtual machine is not coming up, try failing over to an app-consistent recovery point.
  • If the virtual machine is domain joined then ensure that domain controller is correctly functioning. You can do that by creating a new virtual machine in the same network and ensuring that it is able to join to the same domain on which the failed over virtual machine is expected to come up.
    • If the domain controller is not functioning correctly try logging in to the failed over virtual machine using a local administrator account
  • If you are using a custom DNS server then ensure that it is reachable. You can do that by creating a new virtual in the same network and checking that it is able to do name resolution using the custom DNS Server

Recommended documents

How to add a Public IP address to Azure VM (for VM failed over using ASR)

$
0
0
  • If your Connect button is grayed out and you are not connected to Azure via an Express Route or Site-to-Site VPN connection, then for ARM (based deployment model) add a Public IP on the Network interface of the virtual machine as shown below:

  • If the deployment model is Classic, then add an endpoint on public port 3389 for RDP and on public port 22 for SSH. See the steps to add an endpoint here.

Все, что нужно знать о соединительных линиях Visio

$
0
0

Оригинал статьи опубликован на английском языке здесь.
Комментарии по тексту — Кузин Александр

В Visio соединительные линии или просто коннекторы (connector (англ.) — соединительная линия. Примечание комментатора) используются для соединения фигур. Они относятся к важнейшим элементам схемы и нужны для описания процессов и взаимосвязей между фигурами. Коннекторы используются в большинстве схем, включая блок-схемы, организационные диаграммы и иерархические схемы.

Чтобы нарисовать коннектор, на вкладке Главная (Home) в группе Инструменты (Tools) выберите инструмент Соединительная линия (Connector). Теперь вы можете легко добавить коннектор на схему с помощью мыши.

В разделах этой статьи содержатся советы и рекомендации для следующих сценариев.

  • Использование статического или динамического соединения.
  • Автоматическое соединение фигур.
  • Выбор формата коннекторов.
  • Быстрый выбор всех коннекторов.
  • Нахождение и настройка изменения маршрута.
  • Нахождение и настройка параметров приклеивания.
  • Добавление значков пересечения линий.
  • Использование коннекторов с несколькими метками.
  • Как найти вкладку «Разработчик».

Если у вас есть замечания и комментарии, поделитесь ими на сайте Visio User Voice или отправьте их на адрес электронной почты tellvisio@microsoft.com

Использование статического или динамического соединения

Коннектор можно приклеить к фигурам или точкам соединения на фигурах. При статическом соединении выполняется приклеивание к точкам соединения, при динамическом — выполняется соединение с фигурами в целом.

Статическое соединение

При статическом соединении приклеивание к точке соединения сохраняется при перемещении фигур. Чтобы создать соединение этого типа, выберите на ленте инструмент Соединительная линия и протяните соединение от одной точки соединения к другой. При наведении курсора мыши на точки соединения они выделяются зеленым контуром.

Динамическое соединение

При динамическом соединении сохраняется соединение с фигурами при их перемещении и находится кратчайший маршрут между соединенными фигурами. Чтобы создать динамическое соединение между фигурами, выберите на ленте инструмент Соединительная линия и переместите курсор от одной точки соединения к другой. При наведении курсора мыши на фигуру она выделяется зеленым контуром.

Статическое и динамическое соединение

Вы также можете использовать коннектор, один конец которого статически соединен с точкой соединения на фигуре, а другой соединен с фигурой динамически.

При перемещении ромба коннектор соединяется с прямоугольной фигурой в точке, с которой он был соединен изначально, при этом другой конец коннектора соединяется с ромбом в другой точке, отличной от начальной точки соединения. Соединение с прямоугольной фигурой является статическим, а с ромбом — динамическим.

Автоматическое соединение фигур

В Visio можно включить автоматическое соединение фигур при их добавлении в схему. Это особенно полезно при создании блок-схем. Для использования этой функции необходимо активировать автосоединение. Автосоединение можно включать и выключать на уровне документа или на уровне приложения.

На вкладке Вид (View) в группе Визуальные подсказки (Visual Aids) необходимо включить параметр Автосоединение (AutoConnect). При включении параметра Автосоединение на вкладке Вид автосоединение активируется только для текущего документа [параметр документа].

Кроме того, автосоединение можно включить или выключить для всех документов с помощью внутреннего меню: Файл (File) > Параметры (Options) > Дополнительно (Advanced) > Разрешить автосоединение (Enable AutoConnect) [параметр приложения].

Теперь удерживайте курсор мыши над фигурой, чтобы появились стрелки автосоединения. Затем удерживайте курсор мыши над стрелкой, указывающей направление добавления фигуры. Появится мини-панель инструментов с первыми четырьмя фигурами из набора элементов Экспресс-фигуры. Выберите фигуру, которую нужно добавить.

Выбор формата коннекторов

Довольно часто требуется изменить внешний вид коннекторов. Например, добавить или убрать концы линии, сплошную линию заменить на штриховой или точечный пунктир, изменить толщину линии и т. д. Формат коннекторов можно задать следующими способами.

На ленте

Выберите коннектор, формат которого необходимо изменить. На вкладке Главная (Home) в группе Стили фигур (Shape Styles) используйте выпадающие списки параметров элемента Линия (Line), которые позволяют изменять цвет или толщину линии, добавлять или убирать концы линии и т. д.

С помощью контекстного меню

Щелкните коннектор правой кнопкой мыши и в контекстном меню выберите Формат фигуры (Format Shape). Справа от окна документа появится панель Формат фигуры (Format Shape). Изменить коннектор можно с помощью параметров в разделе Линия (Line).

Быстрый выбор всех коннекторов

Иногда на странице требуется выбрать все коннекторы, чтобы применить к ним то или иное изменение. Например, у вас может появиться необходимость заменить сплошные линии всех коннекторов на странице на пунктирные. Для этого потребуется быстро выделить все эти коннекторы. Для этого действия вы можете выбрать их по типу, как показано ниже.

На вкладке Начало (Home) в группе Редактирование (Editing) в выпадающем списке элемента Выделить (Select) выберите команду Выбор по типу (Select by Type).

В окне Выбор по типу (Select by Type) вы можете использовать любой из показанных ниже вариантов для выбора всех коннекторов.

  • Роль фигуры (Shape role)

  • Слой (Layer)


Нахождение и настройка изменения маршрута

Если коннекторы автоматически меняют маршрут или сдвигаются при перемещении фигуры рядом с ними (см. анимацию ниже), а вы не желаете данного действия, вы можете добиться необходимого поведения коннекторов, изменив несколько соответствующих параметров.

Параметры поведения для фигуры, которая вызывает сдвиг коннекторов [параметр фигуры]

  1. Выберите фигуру, которая вызывает сдвиг коннектора.
  2. На вкладке Разработчик (Developer) [как найти эту вкладку, см. ниже в соответствующем разделе] в группе Конструктор фигур (Shape Design) щелкните элемент Поведение (Behavior). В появившемся окне параметров поведения откройте вкладку Размещение (Placement).
  3. В выпадающем списке Поведение при размещении (Placement behavior) выберите одну из следующих опций:
  • Не размещать и не задавать маршрут (Do not lay out and route around);
  • Разместить и задать маршрут (Lay out and route-around).

В разделе Взаимодействие с соединительными линиями (Interaction with connectors) установите флажки, отвечающие за горизонтальное и вертикальное прокладывание маршрута через фигуру.

Параметры поведения для коннекторов [параметр фигуры]

Вы также можете изменить параметры коннекторов, а не фигур, которые вызывают изменение маршрута.

  1. Выберите коннектор. На вкладке Разработчик (Developer) [как найти эту вкладку, см. ниже в соответствующем разделе] в группе Конструктор фигур (Shape Design) щелкните элемент Поведение (Behavior).
  2. В появившемся окне параметров поведения откройте вкладку Соединительная линия (Connector). В разделе Маршрутизация линий (Line routing) для параметра Изменение маршрута (Reroute) выберите значение Никогда (Never) из выпадающего списка вариантов.

Нахождение и настройка параметров приклеивания

Если коннекторы не приклеиваются к фигурам в процессе соединения фигур или отсоединяются от фигур при их перемещении (см. анимацию ниже), следует проверить, активированы ли параметры приклеивания. Если коннектор приклеен или прикреплен к фигуре, это соединение сохраняется даже при перемещении фигуры.

Параметры приклеивания доступны на уровне слоя и уровне документа. Фактически, параметры приклеивания для слоев и документов сохраняются до момента их изменения.

Параметры приклеивания на уровне слоя

Чтобы активировать приклеивание для слоя Соединительная линия, на вкладке Главная (Home) в группе Редактирование (Editing) в выпадающем списке элемента Слои (Layers) выберите Свойства слоя (Layer properties).

Параметры приклеивания на уровне документа

Чтобы открыть параметры привязки и приклеивания, на вкладке Вид (View) в группе Визуальные подсказки (VisualAids) щелкните значок вызова диалогового окна.

В окне параметров привязки и приклеивания активируйте параметр Приклеивание (Glue).

Примечание. Коннекторы, которые были нарисованы при отключенных параметрах приклеивания, не будут автоматически соединяться с фигурами. Их необходимо соединить с фигурами после включения параметра Приклеивание (Glue). После этого их приклеивание к фигурам будет сохраняться даже при перемещении фигур.

Добавление значков пересечения линий

У вас есть возможность выбрать стиль отображения значков пересечения соединительных линий, например в виде зазора, дуги, квадрата и т. д. Эти параметры доступны на уровне страницы и уровне фигуры (коннектора).

Уровень страницы

  1. Щелкните правой кнопкой мыши по вкладке с названием страницы, расположенную под окном документа и в выпадающем меню выберите команду Параметры страницы (Page Setup).
  2. В появившемся окне параметров страницы откройте вкладку Макеты и маршруты (Layout and Routing).
  3. В разделе Значки пересечения линий (Line jumps) вы можете выбрать стиль значка пересечения линий (Line jump style) из выпадающего списка.

Для значков пересечения линий можно выбрать такие стили, как зазор, дуга, квадрат и т. д.

Уровень фигуры

  1. Выберите коннекторы.
  2. На вкладке Разработчик (Developer) в группе Конструктор фигур (Shape Design) щелкните элемент Поведение (Behavior).
  3. В появившемся окне параметров поведения откройте вкладку Соединительная линия (Connector).
  4. В разделе Значки пересечения линий (Line jumps) выберите нужный стиль значка пересечения линий (Line jump style) среди вариантов из выпадающего списка.


Использование коннекторов с несколькими метками

Пользователи часто сообщали нам, что хотят использовать коннекторы с несколькими метками (полями для ввода текста. Примеч. коммент.). Соединительная линия, доступная на ленте, во вкладке Главная (Home), содержит только одно поле для текста.

Быстрое решение проблемы

Для профессиональных версий Visio часто предлагается следующее решение проблемы: использовать фигуру Отношение (Relationship) или Соединитель отношения (Relationship connector) или Связь (Association) (на моем компьютере эти фигуры называются Наследование (Inheritance), Расширенное сопоставление (Directed Association), Ассоциация (Association).  Примеч. коммент.) из набора элементов Класс UML (UML class) и наборов элементов для баз данных из категории Программы и базы данных (Software and Database), а затем включить опцию Показать кратность для этих фигур-коннекторов.

Обратите внимание, что эти наборы элементов доступны только в профессиональной версии Visio и версии Visio Pro (с 1 октября 2017 версия изменила название на Visio Online Plan 2.  Примеч. коммент.). Для использования этих наборов элементов перейдите на панель Наборы элементов (Stencils) слева, выберите Дополнительные фигуры (More Shapes), наведите курсор на пункт Программное обеспечение и базы данных (Software and Database) в выпадающем меню и выберите набор элементов Класс UML (UML Class) или любой из наборов элементов для баз данных.

Щелкните правой кнопкой мыши фигуру Отношение или Соединитель отношения или Ассоциация, взятую из набора элементов Класс UML из категории Программы и базы данных, затем выберите команду Показать кратность (Show multiplicity).

Использование таблицы свойств фигуры

Если вы умеете использовать формулы в таблице свойств фигуры (для ее отображения выделите фигуру правой кнопкой мыши и выберите команду Показать таблицу свойств фигуры (Show ShapeSheet), вы можете воспользоваться этим интересным способом для установки нескольких меток (текстовых полей). Добавьте текстовые поля на схему. Используйте формулы в таблицах свойств этих текстовых полей со ссылкой на таблицу свойств коннектора, чтобы разместить эти текстовые поля в качестве меток рядом с коннектором таким образом, чтобы при перемещении коннектора текстовые поля (метки) тоже перемещались. См. пример ниже.

Таблица свойств коннектора (имя фигуры — Dynamic connector.1001), к которому будет прикреплено текстовое поле:

Таблица свойств текстового поля (имя фигуры — «Sheet.1003»), которое мы будем использовать в качестве метки:

В ячейках PinX и PinY текстового поля имеются ссылки на ячейки BeginX и BeginY фигуры Dynamic connector (динамического коннектора). Аналогичным образом в макет чертежа можно добавить другое текстовое поле, у которого ячейки PinX и PinY ссылаются на ячейки EndX и EndY динамического коннектора, как показано ниже:

В результате дополнительные текстовые поля будут перемещаться совместно с концами соединительной линии.

Как найти вкладку «Разработчик»

Чтобы найти вкладку Разработчик (Developer), выберите команду Файл (File) > Параметры (Options) > Настройка ленты (Customize Ribbon) и установите флажок Разработчик (Developer) в правом столбце основных вкладок.

Мы постоянно стремимся улучшать Visio и приглашаем вас поделиться своими идеями на нашем сайте UserVoice. Вопросы о соединительных линиях в Visio и других функциях отправляйте нам на адрес электронной почты tellvisio@microsoft.com. Чтобы получать свежие новости о Visio, присоединяйтесь к нам в Твиттере, LinkedIn, Facebook и YouTube.

Рабочая группа Visio


Where can we view the expiration date for our Microsoft Action Pack subscription?

BlogMS Microsoft Team Blogs – January 2018 Roll-up

Try Dynamics 365 for Marketing

$
0
0

Dynamics 365 for Marketing

Growing businesses need more than basic email marketing tools to turn their prospects into business relationships.

Microsoft Dynamics 365 for Marketing is available in public preview for organizations seeking a marketing automation solution that tightly integrates with your CRM system to allow transfer of lead information seamlessly between marketing and sales, ensuring you present the right messages at the right time and guide leads to the next best action.

Microsoft Dynamics 365 for Marketing is designed to help you nurture more sales-ready leads, align sales and marketing and make smarter decisions. Most importantly, Dynamics 365 for Marketing works together with Dynamics 365 for Sales on the same platform which aligns teams with common data, connected processes and Office 365 collaboration tools.

dashboard

With Microsoft Dynamics 365 for Marketing, you can seamlessly:

  • Generate more leads from multi-channel campaigns across email, landing pages, webinars, phone calls, in person events, LinkedIn and more. New customizable templates for emails and landing pages help you create campaign content quickly. And with a dedicated email marketing service, you can get the word out reliably
  • Nurture more sales-ready leads by personalizing the buyer’s journey that guides your leads to next best experience based on their engagement
  • Target the right audience using embedded intelligence capabilities like dynamic segmentation. With multiple lead scoring models you can prioritize the leads that are ready to buy. Automated insights can help you track how your leads are engaging during your campaigns
  • Organize events with ease using the event portal to manage in-person events and integration with webinar providers
  • Track and improve marketing performance using built-in dashboards. Run surveys from the application that help you better understand your customers

How to Trial

The free public preview of Dynamics 365 for Marketing is available here: https://trials.dynamics.com/Dynamics365/Preview/Marketing

To trial Dynamics 365 for Marketing you must run a setup wizard. This setup wizard is provided to help you set up Dynamics 365 for Marketing for the first time. Before running the wizard, you must meet all of the following requirements:

  • You must already have an Office 365 tenant (create a trial here if needed: http://trials.dynamics.com)
  • You must already have a Dynamics 365 license assigned to you on your Office 365 tenant
  • You must run the setup wizard as a Dynamics 365 user with admin privileges on the Dynamics 365 org where you are installing Marketing
    Close all other browser windows and tabs before starting
  • See more here: First time setup

 

Example

To help you get a feel for the app, you can try out the below simple example of creating a

  1. segment
  2. marketing email
  3. customer journey (to send of the emails to the members of the segment)

Note: this blog post will be followed by other posts helping you to build more advanced customer journeys, marketing pages, lead scoring models, event management and more. Stay tuned.

Segments

One of your first tasks as a marketer is to define the right audience, to tailor your message to best appeal to that group of people.

In Dynamics 365, you can set up a collection of segments, which you define by using terms that resemble those you already use to describe groups of customers, such as "female wine enthusiasts over 40 living in San Francisco" or you can leverage some of the predefined relationships (eg Primary Contacts) 

You use these segments to target marketing initiatives like email-marketing campaigns and customer journeys. Segments you define by using a set of rules and conditions are called dynamic segments because membership in these segments changes constantly and automatically based on information in your customer engagement database.

Create Your First Segment

Let’s create a new segment based on one of the predefined relationships in Dynamics 365; the relationship between accounts and their primary contacts. Obviously you should ensure that you already have accounts, contacts, and primary contacts in your Sales App before creating the below segment.

Expand the Sitemap (1), go to Customers (2) and then click Segments (3) to open the list of existing segments

On the command bar, click New (1) to open the New Segment form

In the New Segment form, on the General tab, name (2) and describe (3) your new segment.

Leave the Segment type set to Dynamic segment

Click the Definition (1) tab to establish the rules of membership for your segment by building a database query.

The Definition tab offers three different ways (2) to build and view your query:

  • DESIGNER is optimized for combining segments by using logical operators.
  • FLOW is optimized for defining sets of logical rules and conditions that filter out contacts.
  • QUERY presents the query as text, which is very compact and suitable for users who are used to working with database queries.

You can use whichever view you prefer—the result will be the same. For this example, we will use the DESIGNER view, which is both easy to use and compact.

Because you're creating a new segment, you see a single row in the DESIGNER, with the Contact entity selected (in the leftmost drop-down list) and set to All*.

We won't be working with all contacts, so we will delete this row

Click the X to the right of the row (3) to delete the row

The DESIGNER now offers a drop-down in which you can select predefined relationships for your segment.

In the drop-down select “Lookup Relationship between Account and Contact for property primarycontactid_contact”

Click Save to save the segment, and then click the Members tab to see the contacts in the segment.

Note that the contacts Dan Jump and Karen Birg I have given email addresses I own and can access for test purposes.

Click the Insights tab to see the current count of members of your dynamic segment

On the command bar, click Save (1) to save the segment, and then click Go Live (2) to publish the segment

You won't be able to use a segment in a customer journey until it goes live, even though you've saved it. Dynamics 365 checks the segment for errors and reports any problems it finds. If an error is reported, fix it and try again. If no error is found, your segment is copied to the Dynamics 365 email marketing service, which makes it available for use by a customer journey.

 

Marketing Emails

Email is a vital marketing channel for most modern organizations. It's also a core feature of Dynamics 365 for Marketing, which provides tools for creating graphically rich marketing emails with dynamic, personalized content. Dynamics 365 can send large volumes of personalized marketing emails, monitor how each recipient interacts with them, drive customer-journey automation based on these interactions, and present results both for individual contacts and with aggregate statistical analytics.

Process overview—to set up and execute a simple email campaign, you must do the following:

1. Create an email design that delivers your message and includes required elements, such as

  • Subscription-center link
  • Physical address
  • Subject (email)
  • From address (email address)

2. Publish the email design (Go live)

  • this copies the design to the Dynamics 365 email marketing service, which makes the message available for use by a customer journey (but doesn't deliver any messages yet).
  • the go-live process also activates any dynamic code and replaces links with trackable versions that are redirected through Dynamics 365.

3. Set up a customer journey

  • identify a published target segment
  • Identify a published email message to deliver to that segment

4. Activate the customer journey (Go Live)

  • the journey then drives the email-delivery process and other automation features.
  • the journey personalizes and sends each individual message, collects interaction data, and can follow up with additional processes based on those interactions.

Create Your First Marketing Email

In this example you will create a blank email, and add (static and dynamic) text, an image, a link, your physical address and subscription center to the email (required content)

Pick a Template

Go to Marketing Execution (1) and click Marketing Emails (2) to open the list of Active Marketing Emails

In the list of Active Marketing Emails click New (3) to open the New Marketing Email designer

In the New Marketing Email designer the Select an Email Template (4) dialog opens automatically

In the Select an Email Template dialog click Blank (5).

Note:
Each template provides a starting point for designing a particular type of message. The template dialog box provides tools for searching, browsing, and previewing your template collection. All other templates than the Blank template includes the required field, that we for the purpose of this example will add manually. 

Click Select (6) to apply the template to your new message and close the Select an Email Template dialog

At the top right of the email designer page you will see three required fields: Name, Subject, and From. If your browser window is too narrow to show all the fields, you'll also see a down arrow that opens a menu where you can see the fields that didn't fit

Type or change the following:

  • Name: This is an internal name for your message. Enter any name that you will easily recognize later.
  • Subject: This is the subject that email recipients will see when they receive the message.
  • From: Select here to choose/change the Dynamics 365 user who email recipients will see as the sender of the message.

Add Text

In the main part of the page, you now see the design canvas (on the left side), where you can drag, arrange, and enter content.

A Toolbox on the right side of the page provides content blocks that you use to construct your message.

To add a Text content block to the canvas

  1. Select the Text tile in the content block from the Toolbox tab (hold down the mouse)
  2. Drag the tile over to the top of the canvas.
  3. When you have dragged the block to a suitable location, a blue shaded region appears.
  4. Release the mouse button to drop the block at that location.

When you drop the text block, you see a placeholder text within the block (1) and a floating toolbar below the placeholder (2)

Select and remove the placeholder text, and then add your own text, eg "Dear "

Add your body text to the message, and use the toolbar buttons to style your text as you would in a text editor like Microsoft Word (point to any toolbar button to see what it does). Most of the buttons are for styling text and paragraphs, but there are also buttons for creating links; entering dynamic text (more on this later); and moving, copying, or deleting the entire text block.

Insert Dynamic Field

An easy way to personalize the message is to include the name of the recipient in the greeting.

Working in the text block you just added, enter a suitable opening such as "Dear ".

On the pop-up toolbar, click the assist-edit button </> (1) to open a drop-down list at your insertion point in the text block.

In the assist-edit drop-down list, select Contact[context] (2)

The assist-edit tool enters code that references the contact entity, advances the insertion point to the next position in the code, and opens a new dropdown list that shows each field from the contact entity.

In the assist-edit drop-down list, select First Name (3)

The assist-edit tool finishes the code so that it references the first-name field from the contact entity.

The full salutation now looks something like this: Dear {{contact.firstname}}. (If you prefer, you can enter that code directly without using assist-edit.)

Add Image

You should usually include at least one visible image in your design because this will invite recipients to load images, which is required for Dynamics 365 to log the message-open event.

Drag an Image block from the Toolbox onto the canvas - when you drop the block, you'll see an image placeholder and the Properties tab becomes active

On the Properties tab, select the Image Gallery button (1) at the right side of the Source field to open the Select an Image dialog box opens

Here you can see all the images that have already been uploaded to your Dynamics 365 server (Internet Marketing > Files)

Select an image (2), and then click Select to place it in your message design. (If you don't see any images, choose the Upload a Picture tab to add a new one.)

The image is added to the message

Add Link

You can insert links to websites you’d like the recipients to navigate to for more information (or Marketing Pages with Forms you’d like the recipients for fill out – more in that later blog posts).

When the recipient clicks the link, Dynamics 365 for Marketing records the click (this insight can be leveraged for Lead Scoring and other things)

Choose a suitable location in the text block for the link, and then enter an anchor text there, such as “Click here to learn more” (1)

Select the anchor text, and then select the Link button (2) from the floating toolbar, which opens the Link dialog box

Paste your website URL in the Link box (3) and then click OK, to close the dialog and hyperlink the anchor text. When a recipient clicks this link in a mail he/she will be taken to the webpage, and Dynamics 365 for Marketing will track that interaction.

Add Physical Address and Subscription Center

The body of all email messages must include both a subscription-center link and your organization's physical address. These are required by law in many jurisdictions, and Dynamics 365 won't let you publish any marketing email that doesn't have them.

Most email templates include them already, but when you're working with a blank template you must add them yourself. Like you did with the recipient's name, you'll place them by using assist-edit as follows

Choose a suitable location for your physical address, and then use assist-edit to place it.

Select ContentSettings[context] in the first drop-down list, and then select AddressMain in the second drop-down list


The expression should look like this

Note: When the final mail is sent, the Physical Address is resolved to the address you entered (during First Run Experience). To change the Physical Address navigate to Settings > Advanced Settings > Marketing > Default Marketing Settings > Email Marketing  > Default Content Settings 


To insert the subscription center link repeat the above, only this time choose SubscriptionCenter in the drop-down

When a recipient clicks this link in a mail the recipient will be taken to a webpage (the subscription center) in which the recipient can opt out of emails and more.

Preview and Test Send

Since your message now includes all the minimal required and recommended content, you will want to test if the email looks and works as intended - that is, preview your message and then perform a test send (i.e. send the message to yourself)

Go to the Preview tab (1) to see an approximation of how it will be rendered on various screen sizes and how its dynamic content will get resolved.

Use the buttons in the leftmost column to choose a screen size and orientation to preview

To make sure your message includes all required content and is ready to send, select Check for Errors in the command bar.

Dynamics 365 for Marketing checks your message, and then displays results in the notification bar.

Expand the notification bar to read the results.

If you followed this procedure, your message should pass the error check. If it doesn't, read the error message, fix the reported issue, and try again until it passes.

Until now, your previews and error checks have been simulated. The final test is to deliver the message to yourself, open it in your email program, and inspect the results.

On the command bar, click Test Send

A Quick Create form slides in from the right.

Enter an (one you own) Email Address in the field provided, and select a contact for the Test Contact and Default Content Settings for Test content settings

Select Save to send the message, and then open your mailbox to verify everything looks as expected

Publish Your Message

If your message still looks good after you receive it in your inbox and open it, you're ready to publish it.

Click Go Live on the command bar

Dynamics 365 copies your design to the email marketing service, which makes the message available for use by a customer journey (but doesn't deliver any messages yet).

Your message Status Reason is updated from Draft to Live.

Customer Journeys

As you engage potential customers, they start by discovering your product, evaluate whether it meets their needs, look for a good offer, and finally make a purchase. We call this process the customer journey.

Use Dynamics 365 customer journeys to create a model that helps you guide the members of a selected marketing segment through this process by using automated messaging, activity generation, interactive decision points, and more.

A simple customer journey can include just two steps:

  1. identifying the target segment
  2. creating an activity that addresses the members of that segment

In the following example, you'll set up a simple customer journey that sends an email message to all the members of a target segment.

Before you start, you'll need:

  • A segment containing the contacts you will send your email to (make sure one or two of your primary contacts have email addresses you can access)
  • A marketing email that is both valid and live

You should be able to use the segment and message you designed and published above.

Create Your First Customer Journey

Navigate to Marketing Execution (1) and then click Customer Journeys (2) to open a list of Active Customer Journeys.

In the list of Active Customer Journeys click New (3) to open the New Customer Journey form

 

The New Customer Journey page opens with the Select a Customer Journey Template dialog box shown

Each template provides a starting point for designing a particular type of customer journey. The template dialog box provides tools for searching, browsing, and previewing your template collection.

Select Simple Email Journey template (1), and then click Select (2) to close the dialog, and copy your selected template to your new journey.

Now you are looking at the customer journey designer, where you will define each step of the journey.

Define Segment Step

Like all journeys, this one starts with the participants, who in this case are the people you specify as part of a market segment

Expand the Segment Group tile and select the child Segment New Segment (1)

Select the Properties tab (2)

Type a name for your segment in the Name box (1) and select your segment from above in the Segment drop-down (2)

Define Email Step

Select the Marketing Email Message tile

Type a name for your email in the Name box and select your email in the Marketing Email Message drop-down

 

Configure Run Schedule

Until now, you've been working on the Designer tab.

Now go to the General tab, where you can name your journey and configure its run schedule.

Make the following settings here:

  • Name: Enter a name for the customer journey that you can easily recognize later. This name is internal-only.
  • Time Zone: Select your local time zone (if needed). The other dates and times on the page will be displayed relative to this zone.
  • Start Date Time: Enter the time when the journey should begin processing contacts. When you select the field, a suggested default time is provided.
  • End Date Time: Enter the time at which the journey should stop processing contacts. All actions will stop at this time, even if some contacts are still in the middle of the journey. If you're just testing, allow a couple of weeks.

On the command bar, select Save to save the work you've done so far.

Check for Errors and Go Live

To make sure your journey includes all required content and settings, click Check for Errors in the command bar.

Dynamics 365 checks it and then displays results in the notification bar. Expand the notification bar to read the results.

If you followed this procedure and your email message is live, your journey should pass the error check. If it doesn't, read the error message, fix the reported issue, and try again until it passes.

Your journey is now ready to go.

To start it running, publish it by selecting Go Live on the command bar.

Dynamics 365 copies the journey to its email marketing service, which executes the journey by processing contacts, performing actions, and collecting results during the time it is set to run. The journey's Status Reason is updated to Live.

Insights

Allow some time for the messages to get sent, and arrive in the recipients inboxes. After they do, open them and load the images.

Then you can go back to Dynamics 365 and see how your journey is going.

Open your customer journey in Dynamics 365 for Marketing, click the down arrow (1) in the form name to display the form selector

Click Customer Journey: Insights (2) to switch to the Insights view

From here, use the Designer and Dashboard tabs to see detailed analytics

Many entities in Dynamics 365 provide an Insights view for analyzing the results of your marketing initiatives, including marketing emails.

Try opening the record for the email message you sent with this customer journey and check its Insights view for even more information

On the Insights tab you get insights into things like number of soft and hard bounces etc

On the Links tab you get insights into how often any links in your email are clicked

 

Close

We are excited to bring you Dynamics 365 for Marketing and I hope you will enjoy this addition to the Dynamics 365 family

 

See Also

  • Dynamics 365 for Marketing Help and Training - link

 

 

 

 

Office 365: Start-ManagedFolderAssistant in Office 365

$
0
0

In Office 365 administrators can invoke the managed folder assistant by using the start-ManagedFolderAssistance command.

 

PS C:> Start-ManagedFolderAssistant tmcmichael@domain.com

 

This week I had a customer present with an issue where the invocation of the managed folder assistance was failing with a generic RPC error.

 

“The call to Mailbox Assistance Service on server: ‘NAME’ failed.  Error from RPC is –2147220989”

 

When this error is encountered subsequent retries of the same command can be successful.

 

The error can sometimes occur as portions of mailboxes are being initialized within the service.  For example - if a secondary archive is being provisioned off a main archive.

 

As a potential workaround to this issue the primary mailbox GUID can be specified in the start-ManagedFolderAssistant command. 

 

get-mailboxLocation –user tmcmichael@domain.com | fl mailboxGuid,mailboxLocationType

 

MailboxGuid         : aace1f4e-5181-4855-a0c7-466f1fe2f1d1

MailboxLocationType : Primary

MailboxGuid         : c2098d94-d55b-4a06-9b52-d485c54e9a19

MailboxLocationType : MainArchive

 

This command will dump the mailbox types and GUID of all mailboxes associated with a user.

 

From the list we can locate the primary mailbox and the mailbox GUID.  Using this mailbox GUID we can invoke the managed folder assistance.

 

PS C:> Start-ManagedFolderAssistant aace1f4e-5181-4855-a0c7-466f1fe2f1d1

 

When utilizing the GUID we can minimize the change that any initialization process does not cause the command to fail.

How to Create a Dynamics 365 for Marketing Trial

$
0
0

Dynamics 365 for Marketing

Growing businesses need more than basic email marketing tools to turn their prospects into business relationships.

Microsoft Dynamics 365 for Marketing is available in public preview for organizations seeking a marketing automation solution that tightly integrates with your CRM system to allow transfer of lead information seamlessly between marketing and sales, ensuring you present the right messages at the right time and guide leads to the next best action.

Microsoft Dynamics 365 for Marketing is designed to help you nurture more sales-ready leads, align sales and marketing and make smarter decisions. Most importantly, Dynamics 365 for Marketing works together with Dynamics 365 for Sales on the same platform which aligns teams with common data, connected processes and Office 365 collaboration tools.

dashboard

With Microsoft Dynamics 365 for Marketing, you can seamlessly:

    • Generate more leads from multi-channel campaigns across email, landing pages, webinars, phone calls, in person events, LinkedIn and more. New customizable templates for emails and landing pages help you create campaign content quickly. And with a dedicated email marketing service, you can get the word out reliably
    • Nurture more sales-ready leads by personalizing the buyer’s journey that guides your leads to next best experience based on their engagement
    • Target the right audience using embedded intelligence capabilities like dynamic segmentation. With multiple lead scoring models you can prioritize the leads that are ready to buy. Automated insights can help you track how your leads are engaging during your campaigns
    • Organize events with ease using the event portal to manage in-person events and integration with webinar providers
    • Track and improve marketing performance using built-in dashboards. Run surveys from the application that help you better understand your customers

How to Create a Trial

Open a browser in private/incognito mode, navigate to http://trials.dynamics.com (1) and click Sign up here (2) to display the Are you a partner or Microsoft employee? dialog

In the Are you a partner or Microsoft employee? dialog click No, continue to sign up (1) to display the Welcome, let's get to know you dialog

In the Welcome, let's get to know you dialog fill in the information and click Next (1) to display the Create your user ID dialog

In the Create your user ID dialog fill in the information and click Create my account (1) to display the Save this info. You'll need it later dialog

In the Save this info. You'll need it later dialog click Set up to display the Let's get your free 30-day trial set up page

On the Let's get your free 30-day trial set up page check off the Sales app(1) and then click Complete Setup (2) to setup your Dynamics 365 tenant with a Sales app

The tenant is setup with a Sales app.

Please note that the tenant is created with a production org named after the domain name you chose during setup. When you add the Marketing a later a new PREVIEW org will be created in the tenant. This PREVIEW org will be have the name of your domain with the number 1 appended, and include a sales app as well as the marketing app. It's that org you will work with (the production org is redundant)

Open a new tab in your browser, navigate to https://trials.dynamics.com/Dynamics365/Preview/Marketing (1) to go to the Dynamics Public Preview page

On the Dynamics Public Preview page fill out the information needed (type the alias of the user you created above) and click Get Started (2)

Dynamics 365 will check to verify that you have a Dynamics 365 tenant - which you do if you followed along so far. You are presented with a No need to sign up message box, just click OK, got it to dismiss the message and initiate the set up

Setting up the Marketing app starts

Accept (1) the request for access to the portal service, CRM aso neeeded by Dynamics 365 for Marketing to display the Welcome to Dynamics 365 for Marketing Setup dialog

In the Welcome to Dynamics 365 for Marketing Setup dialog you can learn more about the First time setup (1) and/or click Continue (2) to begin the first time setup of Dynamics 365 for Marketing

In the Dynamics 365 for Marketing Setup page (wizard) you'll go through five steps before setup can complete.

      1. Select an organisation
      2. Accept Dynamics 365 for Customer Insights
      3. Specify a Portal
      4. Specify a Physicacal Address
      5. Accept Voice of the Customer

In the Organization Selector step make sure the PREVIEW organisation is selected (1), accept the disclaimers (2) and click Continue (3) to advance to the Dynamics 365 for Customer Insights step

In the Dynamics 365 for Customer Insights step accept the disclaimers (2) and click Continue (3) to advance to the Portal step

[text] In the Portal step type a name for your portal (1), click Begin Setup (2) to setup a new portal and advance to the Marketing Email step

In the Marketing Email step type your physical sender address (1), and then click Continue (2) to advance to the Survey step

[text] In the Survey step type check the check box (1) to display the request for access display box

Click Accept (2) to close the display box, and then click Begin Setup (2) to advance to the Summary step

Wait for the steps to complete

When the steps are complete click your application (1) to go to the new marketing app (org)

In the Welcome to Dynamics 365 for Marketing page click Take me to the App (1)

You are presented with an empty dashboard (you can expande the site map from the left and explore the app)

To navigate to the associated Sales app click the down arrow (1) and then click Dynamics 365 - custom (2)

The Sales app has sample contacts in it (remember - the Sales app and the Marketing app shares the same database - you can create segments off of these contacts) - see this blog post for more "Try Dynamics 365 for Marketing"

Enjoy

Viewing all 36188 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>