For this month’s meeting of the Atlanta PowerShell User Group I demoed my Windows PowerShell profile and I promised I would post it online. So here it is.
<#============================================================================= Script Name: Universal Profile Created On: 05/22/2009 Author: Mark E. Schill File: profile.ps1 Usage: PS> . profile.ps1 Version: 1.2 Purpose: Serves as a PowerShell Profile that can be used on multiple systems Requirements: <NONE> Last Updated: 06/05/2010 History: 1.2 06/05/2010 - Many Numerous changes. 1.1 10/11/2009 - Converted to strictly 2.0 and updated layout 1.0 05/22/2009 - Initial Revision ** Licensed under a Creative Commons Attribution 3.0 License ** =============================================================================#> <# This must be configured on systems where this script is run New-PSDrive -name Scripts -psprovider FileSystem -root <Location of Scripts Folder> -Description "Scripts Folder" . Scripts:\Profiles\profile.ps1 #> # Main Function is just like the C# Main function. I use it to be be able to put functions last. function Main { # Grab some system Information to be displayed $PSVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$PSHome\Powershell.exe").FileVersion $IPAddress = @( Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.DefaultIpGateway } )[0].IPAddress[0] $Cert = Get-ChildItem -Path Cert:\CurrentUser\my -CodeSigningCert # Set up general aliases New-Alias -Name "Edit" -Value "edit-file" -force # Add to Module path so I can just do "ipmo Module" if ( !($Env:PSModulepath.Contains($(Convert-Path Scripts:\Core\Modules\Manual)) )) { $env:PSMODULEPATH += ";" + $(Convert-Path Scripts:\Core\Modules\Manual) } # Import my auto modules. Get-ChildItem $(Convert-Path Scripts:\Core\Modules\Auto) | Where-Object {$_.PsIsContainer} | %{ Import-Module $($_.FullName) -Force } ## We also want to add our scripts directory to the path $ENV:PATH += Get-Item Scripts:\Core\Functions | ? { $_.PsIsContainer } | % {";$($_.FullName)" } $ENV:PATH += Get-ChildItem Scripts:\Core\Functions\* | ? { $_.PsIsContainer } | % {";$($_.FullName)" } # Machine Based Rules switch -regex ( $env:COMPUTERNAME) { ".+" { } "L186404" { Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue } "EINSTEIN" { Add-PSSnapin "NetCmdlets" -ErrorAction SilentlyContinue Add-PSSnapin "PowerGadgets" -ErrorAction SilentlyContinue } } # Host based rules switch ( $Host.Name ) { "PowerShellPlus Host" { $Color_Label = "Cyan" $Color_Value_1 = "Green" $Color_Value_2 = "Yellow" $HostWidth = $Host.UI.RawUI.WindowSize.Width } 'Windows PowerShell ISE Host' { $Color_Label = "DarkCyan" $Color_Value_1 = "Magenta" $Color_Value_2 = "DarkGreen" $HostWidth = 80 Import-Module ISEPack $PSISE.options.FontName = "Consolas" # watch for changes to the Files collection of the current Tab register-objectevent $psise.CurrentPowerShellTab.Files collectionchanged -action { # iterate ISEFile objects $event.sender | % { # set private field which holds default encoding to ASCII $_.gettype().getfield("encoding","nonpublic,instance").setvalue($_, [text.encoding]::ascii) } } | Out-null } default { $Color_Label = "Cyan" $Color_Value_1 = "Green" $Color_Value_2 = "Yellow" $HostWidth = $Host.UI.RawUI.WindowSize.Width if ( $env:PROCESSOR_ARCHITECTURE -eq 'AMD64') { $NPP = "${env:ProgramFiles(x86)}\Notepad++\Notepad++.exe" } else { $NPP = "$env:ProgramFiles\Notepad++\Notepad++.exe" } if (Test-Path $NPP) { Set-Alias -Name Edit-File -Value $NPP -Force } # Initialize PowerTab & $(Convert-Path scripts:\Core\Includes\PowerTab\Init-TabExpansion.ps1) -ConfigurationLocation $(Convert-Path scripts:\Core\Includes\PowerTab) } } Record-Session # Start Session Recording Clear-Host $PreviousColor = $Host.UI.RawUI.ForegroundColor # Display relevant information Write-Host "ComputerName:`t`t" -ForegroundColor $Color_Label -nonewline Write-Host "$($env:COMPUTERNAME)" -ForegroundColor $Color_Value_2 Write-Host "IP Address:`t`t" -ForeGroundColor $Color_Label -nonewline Write-Host $IPAddress -ForeGroundColor $Color_Value_2 Write-Host "UserName:`t`t" -ForegroundColor $Color_Label -nonewline Write-Host "$env:UserDomain\$env:UserName" -ForegroundColor $Color_Value_2 Write-Host "PowerShell Version:`t" -ForegroundColor $Color_Label -nonewline Write-Host $PSVersion -ForegroundColor $Color_Value_2 Write-Host "Code Signing Cert:`t" -ForegroundColor $Color_Label -nonewline Write-Host $Cert.FriendlyName -ForegroundColor $Color_Value_2 Write-Host "Snapins:`t`t" -ForegroundColor $Color_Label -NoNewline $StartingPosition = $Host.UI.RawUI.CursorPosition.X Write-Host "".PadRight(30,"-") -ForegroundColor $Color_Label Get-PSSnapin | Format-Wide -autosize | Out-String -Width $( $HostWidth -$StartingPosition -1 ) -stream | Where-Object {$_} | %{ Write-Host $($(" "*$StartingPosition) + $_) -foregroundColor $Color_Value_1} Write-Host "Modules:`t`t" -foregroundcolor $Color_Label -noNewLine $StartingPosition = $Host.UI.RawUI.CursorPosition.X Write-Host "".PadRight(30,"-") -ForegroundColor $Color_Label Get-Module | Format-Wide -AutoSize | Out-String -Width $( $HostWidth -$StartingPosition -1 ) -stream | Where-Object {$_} | %{ Write-Host $($(" "*$StartingPosition) + $_) -foregroundColor $Color_Value_1} Get-Module -ListAvailable | Format-Wide -Column 3 | Out-String -Width $( $HostWidth -$StartingPosition -1 ) -stream | Where-Object {$_} | %{ Write-Host $($(" "*$StartingPosition) + $_) -foregroundColor $Color_Value_2} Write-Host "Functions:`t`t" -foregroundcolor $Color_Label -noNewLine $StartingPosition = $Host.UI.RawUI.CursorPosition.X Write-Host "".PadRight(30,"-") -ForegroundColor $Color_Label Get-ChildItem Scripts:\Core\Functions\* -Recurse | Select-Object Name | Format-Wide -AutoSize | Out-String -Width $( $HostWidth -$StartingPosition -1 ) -stream | Where-Object {$_} | %{ Write-Host $($(" "*$StartingPosition) + $_) -foregroundColor $Color_Value_1} $Host.UI.RawUI.ForegroundColor =$PreviousColor Write-Host "" Write-Host "" # This should go OUTSIDE the prompt function, it doesn't need re-evaluation # We're going to calculate a prefix for the window title if(!$global:WindowTitlePrefix) { $id = [System.Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object System.Security.Principal.WindowsPrincipal($id) if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) { $global:WindowTitlePrefix = "PoSh (ADMIN) -" } else { $global:WindowTitlePrefix = "PoSh - " } } $LogicalDisk = @() gwmi Win32_LogicalDisk -filter "DriveType='3'" | % { $LogicalDisk += @($_ | Select @{n="Name";e={$_.Caption}}, @{n="Volume Label";e={$_.VolumeName}}, @{n="Used (GB)";e={"{0:N2}" -f ( ($_.Size/1GB) - ($_.FreeSpace/1GB) )}}, @{n="Free (GB)";e={"{0:N2}" -f ($_.FreeSpace/1GB)}}, @{n="Size (GB)";e={"{0:N2}" -f ($_.Size/1GB)}}, @{n="Free (%)";e={if($_.Size) { "{0:N2}" -f ( ($_.FreeSpace/1GB) / ($_.Size/1GB) * 100 )}else{"NAN"} }} ) } $Host.UI.RawUI.ForegroundColor = $Color_Value_2 $LogicalDisk | format-table -AutoSize | out-string $Host.UI.RawUI.ForegroundColor = $PreviousColor Get-SystemUptime Write-Host cd scripts:\ } #Record all Powershell activities function Record-Session { $MyPath = "$((Get-PSDrive Scripts).Root)\_Transcripts" if ( ! (Test-Path $MyPath ) ) { mkdir $MyPath > $null } $ComputerName = $env:ComputerName $Date = Get-Date -Format "yyyy-MM-dd" switch ( $Host.Name ) { "PowerShellPlus Host" { Start-Transcript -path "$MyPath\$ComputerName-$Date.log" -ea silentlycontinue } 'Windows PowerShell ISE Host' { # PowerShell ISE does not support transcription } default { Start-Transcript -path "$MyPath\$ComputerName-$Date.log" -append -ea silentlycontinue } } } function prompt { Write-Host "$([char]0x0A7) " -NoNewline -ForegroundColor $Color_Label Write-Host ([net.Dns]::GetHostName()) -NoNewline -ForegroundColor $Color_Value_1 Write-Host ' {' -NoNewline -ForegroundColor "Red" Write-Host (shorten-path (pwd).path) -NoNewline -ForegroundColor $Color_Label Write-Host '}' -NoNewline -ForegroundColor "Red" return ' ' } function shorten-path([string] $path) { $loc = $path.Replace($HOME, '~') # remove prefix for UNC paths $loc = $loc -replace '^[^:]+::', '' # make path shorter like tabs in Vim, # handle paths starting with \\ and . correctly return ($loc -replace '\\(\.?)([^\\]{3})[^\\]*(?=\\)','\$1$2') } function Get-SystemUptime ($computer = "$env:computername") { $lastboot = [System.Management.ManagementDateTimeconverter]::ToDateTime("$((gwmi Win32_OperatingSystem -computername $computer).LastBootUpTime)") $uptime = (Get-Date) - $lastboot Write-Host "System Uptime for $computer is: " -NoNewline -ForegroundColor $Color_Value_2 Write-Host $uptime.days -NoNewline -ForegroundColor $Color_Label Write-Host " days " -NoNewline -ForegroundColor $Color_Value_2 Write-Host $uptime.hours -NoNewline -ForegroundColor $Color_Label Write-Host " hours " -NoNewline -ForegroundColor $Color_Value_2 Write-Host $uptime.minutes -NoNewline -ForegroundColor $Color_Label Write-Host " minutes " -NoNewline -ForegroundColor $Color_Value_2 Write-Host $uptime.seconds -NoNewline -ForegroundColor $Color_Label Write-Host " seconds" -ForegroundColor $Color_Value_2 } # Call "Main" Function . Main # SIG # Begin signature block # MIISBgYJKoZIhvcNAQcCoIIR9zCCEfMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU3C9SbvolyquBkZm/ktAb3cfd # pMiggg47MIIGcDCCBFigAwIBAgIBJDANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQG # EwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp # Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2Vy # dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDcxMDI0MjIwMTQ2WhcNMTcxMDI0MjIw # MTQ2WjCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp # BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV # BAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUgT2JqZWN0 # IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyiOLIjUemqAbPJ1J # 0D8MlzgWKbr4fYlbRVjvhHDtfhFN6RQxq0PjTQxRgWzwFQNKJCdU5ftKoM5N4YSj # Id6ZNavcSa6/McVnhDAQm+8H3HWoD030NVOxbjgD/Ih3HaV3/z9159nnvyxQEckR # ZfpJB2Kfk6aHqW3JnSvRe+XVZSufDVCe/vtxGSEwKCaNrsLc9pboUoYIC3oyzWoU # TZ65+c0H4paR8c8eK/mC914mBo6N0dQ512/bkSdaeY9YaQpGtW/h/W/FkbQRT3sC # pttLVlIjnkuY4r9+zvqhToPjxcfDYEf+XD8VGkAqle8Aa8hQ+M1qGdQjAye8OzbV # uUOw7wIDAQABo4IB6TCCAeUwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC # AQYwHQYDVR0OBBYEFNBOD0CZbLhLGW87KLjg44gHNKq3MB8GA1UdIwQYMBaAFE4L # 7xqkQFulF2mHMMo0aEPQQa7yMD0GCCsGAQUFBwEBBDEwLzAtBggrBgEFBQcwAoYh # aHR0cDovL3d3dy5zdGFydHNzbC5jb20vc2ZzY2EuY3J0MFsGA1UdHwRUMFIwJ6Al # oCOGIWh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNybDAnoCWgI4YhaHR0 # cDovL2NybC5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMIGABgNVHSAEeTB3MHUGCysG # AQQBgbU3AQIBMGYwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29t # L3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t # L2ludGVybWVkaWF0ZS5wZGYwEQYJYIZIAYb4QgEBBAQDAgABMFAGCWCGSAGG+EIB # DQRDFkFTdGFydENvbSBDbGFzcyAyIFByaW1hcnkgSW50ZXJtZWRpYXRlIE9iamVj # dCBTaWduaW5nIENlcnRpZmljYXRlczANBgkqhkiG9w0BAQUFAAOCAgEAcnMLA3Va # N4OIE9l4QT5OEtZy5PByBit3oHiqQpgVEQo7DHRsjXD5H/IyTivpMikaaeRxIv95 # baRd4hoUcMwDj4JIjC3WA9FoNFV31SMljEZa66G8RQECdMSSufgfDYu1XQ+cUKxh # D3EtLGGcFGjjML7EQv2Iol741rEsycXwIXcryxeiMbU2TPi7X3elbwQMc4JFlJ4B # y9FhBzuZB1DV2sN2irGVbC3G/1+S2doPDjL1CaElwRa/T0qkq2vvPxUgryAoCppU # FKViw5yoGYC+z1GaesWWiP1eFKAL0wI7IgSvLzU3y1Vp7vsYaxOVBqZtebFTWRHt # XjCsFrrQBngt0d33QbQRI5mwgzEp7XJ9xu5d6RVWM4TPRUsd+DDZpBHm9mszvi9g # VFb2ZG7qRRXCSqys4+u/NLBPbXi/m/lU00cODQTlC/euwjk9HQtRrXQ/zqsBJS6U # J+eLGw1qOfj+HVBl/ZQpfoLk7IoWlRQvRL1s7oirEaqPZUIWY/grXq9r6jDKAp3L # ZdKQpPOnnogtqlU4f7/kLjEJhrrc98mrOWmVMK/BuFRAfQ5oDUMnVmCzAzLMjKfG # cVW/iMew41yfhgKbwpfzm3LBr1Zv+pEBgcgW6onRLSAn3XHM0eNtz+AkxH6rRf6B # 2mYhLEEGLapH8R1AMAo4BbVFOZR5kXcMCwowggfDMIIGq6ADAgECAgIBSzANBgkq # hkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0 # ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcx # ODA2BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUg # T2JqZWN0IENBMB4XDTEwMDUyMzAwNTIwMVoXDTEyMDUyMjE0NTA0NFowgcAxIDAe # BgNVBA0TFzIwMDMzNi1wSlgyYzcxSDNNODAwaHhaMQswCQYDVQQGEwJVUzEQMA4G # A1UECBMHR2VvcmdpYTEPMA0GA1UEBxMGRHVsdXRoMS0wKwYDVQQLEyRTdGFydENv # bSBWZXJpZmllZCBDZXJ0aWZpY2F0ZSBNZW1iZXIxFDASBgNVBAMTC01hcmsgU2No # aWxsMScwJQYJKoZIhvcNAQkBFhhNYXJrLlNjaGlsbEBjbXNjaGlsbC5uZXQwggIi # MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0Elw41CA/h1CDPhnokCKKrqmY # PuqHNTniBcRHJBmmvo4DdFvInuUEiV7e5BLsm3sjzcDsFtRr2vBohy9TsG2dyUVI # cBoePTRIthq9pp8+0DwRdaFftpsSNcS2jn7/OnyXfxyYEosi0FlWHi9LzDcopnFL # t0XzlexddnHpb2vrfiuibpdgNOEmiNeOgu15VlF8UlSSqAaUr9Dp8rjCFBiKWwP0 # x04PBlLDflQvv2epL2ZF1oUD6KslznN/wJZ1o11qIEe+N4x3r/JSN5I9abiWylqk # bvsO+NozImNArYuDGp4NsxMsF8npARi4b1xAxqII2VrDOkM2Ha7Mp8UPAEm2Ts08 # EnCqgOScB8E37PMyFD4ShX9cpLs0zQgWv8Ons6syNct1ZMorA8VpKlEha+t6o7TW # f6x9lgBqzzTRkXLi5/EJyVnNeEYN3u3pN7FEOYo3wetychk+LKTV9OWL3Wb8Pdzp # 8fleKJHcYhfErxMvv5vSJpUeWdbGP27pL5Niw87fskj4rOdv36yKCxJ+OXpCnsDw # fTqF21Wzq219WfapmPdkhSl7Io/+Vx10QlfokfoLoZ3ZijoXQeRwlVqq8CiJPD2C # n3uDw54y5JEcDmEfSdVV5ZsI5wiC501w2TWuGmw2wdcxJqX2qnrIYDRJwmxIp6EK # De4qzaa4/Cx5npY7kQIDAQABo4IC9zCCAvMwCQYDVR0TBAIwADAOBgNVHQ8BAf8E # BAMCB4AwOgYDVR0lAQH/BDAwLgYIKwYBBQUHAwMGCisGAQQBgjcCARUGCisGAQQB # gjcCARYGCisGAQQBgjcKAw0wHQYDVR0OBBYEFKoz7/O/Kqbe739wknVtcdz88rEU # MB8GA1UdIwQYMBaAFNBOD0CZbLhLGW87KLjg44gHNKq3MIIBQgYDVR0gBIIBOTCC # ATUwggExBgsrBgEEAYG1NwECATCCASAwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cu # c3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu # c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgbcGCCsGAQUFBwICMIGqMBQW # DVN0YXJ0Q29tIEx0ZC4wAwIBARqBkUxpbWl0ZWQgTGlhYmlsaXR5LCBzZWUgc2Vj # dGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZp # Y2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cu # c3RhcnRzc2wuY29tL3BvbGljeS5wZGYwYwYDVR0fBFwwWjAroCmgJ4YlaHR0cDov # L3d3dy5zdGFydHNzbC5jb20vY3J0YzItY3JsLmNybDAroCmgJ4YlaHR0cDovL2Ny # bC5zdGFydHNzbC5jb20vY3J0YzItY3JsLmNybDCBiQYIKwYBBQUHAQEEfTB7MDcG # CCsGAQUFBzABhitodHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMi9j # b2RlL2NhMEAGCCsGAQUFBzAChjRodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9jZXJ0 # cy9zdWIuY2xhc3MyLmNvZGUuY2EuY3J0MCMGA1UdEgQcMBqGGGh0dHA6Ly93d3cu # c3RhcnRzc2wuY29tLzANBgkqhkiG9w0BAQUFAAOCAQEAEWD4Nlq3SFWlbKiuM4Hd # gDslvfb+xEIMhAxyWTz6he4/IwQUTP3Rr7Ef5CRmZLMRsgxq2+bB8EumkHIIrO/2 # dyuP42svD4NX3lJVTnXCGmJkPbgZuuE4Q9lCP5iQi9BzRcS79dFgMvxT4ztRvVBV # NDvv8fhkNdkByMCSa1ldGlN88xyazT6xTPD9JXl5dr1FmSLaesL5acxWfANgdOTE # C/tu3TDUBVeibtnnox0ifc449Tkdcui38HMmxY4n1ExH8c4DtAusCvdDU3CS8Knt # ukt+KuMcLI+kSmNgAtzJydWzDeEqTHn9pppAZiTqcbAAFWphkbQbg+J6Fslw3Eq/ # oDGCAzUwggMxAgEBMIGTMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRD # b20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln # bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMiBQcmltYXJ5IEludGVybWVk # aWF0ZSBPYmplY3QgQ0ECAgFLMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQow # CKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC # AQsxDjAMBgorBgEEAYI3AgEWMCMGCSqGSIb3DQEJBDEWBBTENjuc9oIG5MhJ4eyJ # qiHgILA3KzANBgkqhkiG9w0BAQEFAASCAgAgghC7ISokY6Z/AfLAcMEstbuuA9wk # b4lG7UKi/q9iFVbiBsSEN8eMbTjMScBzicb/CR9M46qFjEr7lgcUHNgcCikszrXT # +stOHnF1UoaXWRkMYllY6sbExqyPGsJNjEOwqgOcD+FnEntacbqTTvA8pAw5V45i # 9jDGHjZJv/XWFkhzxZxqTCXz44ZjhHvjJtNHlT5cbE0CxvE2WW9cnWw/S5zw+s1Y # WbNn2W9gRqQJtwZXxCCakxRN2bzHHVAY1HHj6c7JkF1Pehx5rMIiMVWVDmCgNjgd # VsOE7KhPY1hFMqfBEA44qGrW7NOWhaqeOjslaeMdv4u8qXrk1vOnOnDOUJUSSEgQ # sj/qCxNPhFt1rKPw62yPmz4drUGDwhpMiNFu/8TgYY4DVWA8KIsQYHbM69KJo+i7 # Vt/p0SoMTCDL6EDnwvia4cwuKlVaxmYJ9wiIlE+5xoPn1x6QjoTVELaJTSNre3pB # 05dCGUAS2h8Xc+DOBLCe24K3mD3HdBTkpFPe13ojeOkFqJScYLr4998lcCFk/U8j # /Fl9CorlpWwgoVCCxHW757dv7THLviuK1t2oI6jpfgQzwTurXkGeiziEWYBiPnUM # KXmD0ADxQehIEOF6m3PANy1sxlt5rG/Mg4YhB7MbfjBGrfsh7Vtgsgdk+oaqRao3 # OCh/9C4/oNBKpw== # SIG # End signature block

(6)
(6)
(0)
Comments
Leave a comment Trackback