Tuesday, July 5, 2022

How to get workflow manager server information from SharePoint servers.

 Add-PSSnapin microsoft.sharepoint.powershell

$site = Get-SPSite http://sharepoint.contaso.com

$proxy = Get-SPServiceApplicationProxy | ?{$_.TypeName -eq 'Workflow Service Application Proxy'}

$proxy.GetHostname($site)

Thursday, June 9, 2022

Banner on sharepoint sites.

 Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

 

Function Add-CustomAction

{

    param

    (

        [parameter(Mandatory=$true, ParameterSetName='Site')]

        [Microsoft.SharePoint.SPSite]$Site,

         

        [parameter(Mandatory=$true, ParameterSetName='Web')]

        [Microsoft.SharePoint.SPWeb]$Web,

         

        [parameter(Mandatory=$true, ParameterSetName='Site')]

        [parameter(Mandatory=$true, ParameterSetName='Web')]

        [string]$Message,

         

        [parameter(Mandatory=$true, ParameterSetName='Site')]

        [parameter(Mandatory=$true, ParameterSetName='Web')]

        [string]$ActionName,

         

        [parameter(Mandatory=$false, ParameterSetName='Web')]

        [switch]$IncludeSubWebs,

 

        [parameter(Mandatory=$true, ParameterSetName='Site')]

        [parameter(Mandatory=$true, ParameterSetName='Web')]

        [string][ValidateSet("Red", "Yellow", "Green", "Blue")]$BackGroundColor

    )

 

    begin

    {

        # To avoid quote conflicts

        $Message = $Message.Replace( "`"", "'")

$startingSequence = 1100

        $JavaScript = @"

 

            function Execute_$($ActionName)_MessageBar_$($PSCmdlet.ParameterSetName)()

            {

                var st = document.getElementById('$ActionName');

                if(st != null)

                {

                    st.style.display = '';

                    return;

                }

 

                st = document.createElement("div");

                st.id = "$($ActionName)_MessageBar_$($PSCmdlet.ParameterSetName)";

                st.innerHTML = "<div class='ms-status-$($BackGroundColor.ToUpper())' style='padding: 12px 14px 6px; border: 1px solid; font-family: \"Segoe UI\", Tahoma, sans-serif; font-size: 13px; min-height: 24px; font-weight: bold; background-color:Yellow;'>$Message</div>";

 

                document.body.insertBefore(st, document.body.childNodes[0]);

            }

 

            // don't show on modal dialog windows

            if(!window.location.search.match("[?&]IsDlg=1"))

            {

                Execute_$($ActionName)_MessageBar_$($PSCmdlet.ParameterSetName)();

            }

"@

    }

    process

    {

        $customAction = $null

         

        if( $PSCmdlet.ParameterSetName -eq "Site" )

        {

            Remove-CustomAction -Site $site -ActionName $ActionName | Out-Null

            $customAction = $Site.UserCustomActions.Add()

        }

        else

        {

            Remove-CustomAction -Web $Web -ActionName $ActionName | Out-Null

            $customAction = $Web.UserCustomActions.Add()

        }

 

        $customAction.Location    = "ScriptLink"

        $customAction.Sequence    = $startingSequence

        $customAction.Title       = $ActionName

        $customAction.ScriptBlock = $JavaScript

        $customAction.Update()

 

        if( $IncludeSubWebs )

        {

            foreach($w in $Web.Webs)

            {

                Add-CustomAction -Web $w -Message $Message -ActionName $ActionName -IncludeSubWebs -BackGroundColor $BackGroundColor

            }

        }

    }

    end

    {

    }

}

 

Function Remove-CustomAction

{

    param 

    (

        [parameter(Mandatory=$true, ParameterSetName='Site')]

        [Microsoft.SharePoint.SPSite]$Site,

         

        [parameter(Mandatory=$true, ParameterSetName='Web')]

        [Microsoft.SharePoint.SPWeb]$Web,

         

        [parameter(Mandatory=$true, ParameterSetName='Site')]

        [parameter(Mandatory=$true, ParameterSetName='Web')]

        [string]$ActionName

    )

 

    begin

    {

        $existingActions = @()

    }

    process

    {

        if( $PSCmdlet.ParameterSetName -eq "Site" )

        {

            $Site.UserCustomActions | ? { $_.Title -eq $ActionName } | % { $existingActions += $_ }

            $existingActions | % { $Site.UserCustomActions.Item($_.Id).Delete() }

        }

        else

        {

            $Web.UserCustomActions | ? { $_.Title -eq $ActionName } | % { $existingActions += $_ }

            $existingActions

            $existingActions | % { $Web.UserCustomActions.Item($_.Id).Delete() }

        }

    }

    end

    {

    }

}

 

$sites = get-spsite "http://sharepoint.com/sites/test" #-Limit all -webapplication http://webapplicationurl/ 


foreach($site in $sites)

{


Add-CustomAction -Site $site -Message “We are planning to migrate this site to Sharepoint 2016 on date ********** The new site URL is 'https://sharepoingonline.com/sites/coc2' " -ActionName "SiteMovedBanner" -BackGroundColor "Red"



#Remove-CustomAction  -Site $site -ActionName "SiteMovedBanner"


}

Tuesday, April 26, 2022

Workflow manager certificate and service bus certificate renewal process

 

Workflow manager certificate and service bus certificate renewal process



Note: This Article is created based on the experience in recent MI, Microsoft has clearly stated this process has to be done by approaching Microsoft. Please log MS ticket before doing this activity. below steps are supposed to be performed with Microsoft on the call.

Step1 : Workflow manager certificate and service bus certificate have both expired.


Workflow services will be automatically stopped once workflow manger certificate expires.

Step 2:

clock should be turned back to a time when the cert is still available, and run the commands on workflow manger server

 

# Check SB and WFM status

Get-sbfarm

Get-sbfarmstatus

Get-wffarm

Get-wffarmstatus

 

The actions we have taken:

1. Backup all WFM and Service Bus Databases. Take WFM server’s VM snapshot too.

 

2. Make sure that the clock is turned back to a time when the cert is still available.

 

3. Run some commands to generate new certificates.

$CertKey=convertto-securestring "YourSecretPassword" -asplaintext -force

Set-WFCertificateAutoGenerationKey -Key $CertKey

Set-SBCertificateAutogenerationKey -Key $CertKey 

 

4. Open MMC to import certificates to 'Trusted Root Certificate Authorities' -> 'Certificate'.

 

5. Run some commands:

Stop-WFHost

Stop-SBFarm

Update-SBHost

Start-SBFarm

 

# Check SB status after start

Get-SBFarm

Get-SBFarmStatus

 

# Complete the WFM configuration to update nodes

Stop-WFHost

Update-WFHost -CertificateAutoGenerationKey $CertKey   

Start-WFHost

 

# Check WFM status after start

Get-WFFarm

Get-WFFarmStatus

 

6. Change the system time back to the current time. Restart the server.


Status:

Workflow manager certificate expired issue has been resolved. Run commands again.

 

# Check SB status

Get-sbfarm

Get-sbfarmstatus



# Check WFM status

Get-wffarm

Get-wffarmstatus




Passed WFMQuickTest.