sitecore-spe.ps1

#
# sitecore_spe.ps1
#
function Get-DefaultSpeConfig()
{
    # $AppPath is SPE console variable, see Variables on https://doc.sitecorepowershell.com/interfaces.html
    if( $AppPath -ne $null )
    {
        return Join-Path -Path $AppPath -ChildPath "App_Config\Include\Cognifide.PowerShell.config"
    }
}


function Set-UAC4SPE
{
    <#
    .SYNOPSIS
    Sets an User Access Control parameters for Sitecore Powershell Extension
 
    .DESCRIPTION
    More about Sitecore Powershell Extension security https://doc.sitecorepowershell.com/security.html
 
    .PARAMETER Token
    An unique string used for the gate token attribute ('Default','Console','ISE','ItemSave')
     
    .PARAMETER Action
    An action to perform when session elevation is triggered (Allow, Block, Password)
     
    .PARAMETER Expiration
    A timespan used to determine the elevated session lifetime (hh:mm:ss)
 
    .PARAMETER SpeConfig
    A path to Cognifide.PowerShell.config.
    If this function is used in a SPE console then default parameter should be enough Get-DefaultSpeConfig
      
    .EXAMPLE
    Set-UAC4SPE -Token Console -Expiration '00:06:00'
 
    Set-UAC4SPE -Token Console -Expiration '00:06:00' -Action Allow
     
    .EXAMPLE
    PowerShell will number them for you when it displays your help text to a user.
#>

    [CmdletBinding(SupportsShouldProcess=$true)]
    Param(
      [parameter(Mandatory=$true)]
      [ValidateSet('Default','Console','ISE','ItemSave')]
      [string]$Token = $null,
      [parameter()]
      [ValidateSet('Block','Password','Allow')]
      [string]$Action = $null,
      [string]$Expiration = $null,
      [string]$SpeConfig = (Get-DefaultSpeConfig)
    )

    Write-Verbose "Set User Account Control in file $SpeConfig"

    [xml]$XmlDocument = Get-Content -Path $SpeConfig

    $xpath = "//configuration/sitecore/powershell/userAccountControl/tokens//token[@name = '$Token' ]"

    $tokenNode = $XmlDocument.SelectSingleNode($xpath) 

    if( $Action -ne '' )
    {
        $tokenNode.Attributes["elevationAction"].Value = $Action

        if ($pscmdlet.ShouldProcess("Set elevationAction to $Action on $SpeConfig"))
        {
            $XmlDocument.Save($SpeConfig)
        }
    }

    if( $Expiration -ne '' )
    {
        $tokenNode.Attributes["expiration"].Value = $Expiration
        if ($pscmdlet.ShouldProcess("Set expiration to $Expiration on $SpeConfig"))
        {
            $XmlDocument.Save($SpeConfig)
        }
    }
}
#
function Get-UAC4SPE
{
    <#
    .SYNOPSIS
    Gets information about settings of passed token.
     
    .DESCRIPTION
    More about Sitecore Powershell Extension security https://doc.sitecorepowershell.com/security.html
 
    .PARAMETER Token
    An unique string used for the gate token attribute ('Default','Console','ISE','ItemSave')
 
    .PARAMETER SpeConfig
    A path to Cognifide.PowerShell.config.
    If this function is used in a SPE console then default parameter should be enough Get-DefaultSpeConfig
     
    .EXAMPLE
    Get-UAC4SPE -Token Console
 
    #>

    [CmdletBinding(SupportsShouldProcess=$true)]
    Param(
      [parameter(Mandatory=$true)]
      [ValidateSet('Default','Console','ISE','ItemSave')]
      [string]$Token = $null,

      [string]$SpeConfig = (Get-DefaultSpeConfig)
    )
    
    Write-Verbose "Get User Account Control from file '$SpeConfig'"

    [xml]$XmlDocument = Get-Content -Path $SpeConfig

    $xpath = "//configuration/sitecore/powershell/userAccountControl/tokens//token[@name = '$Token' ]"

    $tokenNode = $XmlDocument.SelectSingleNode($xpath) 
    
    return $tokenNode
}


Export-ModuleMember -Function Get-UAC4SPE
Export-ModuleMember -Function Set-UAC4SPE