Where to Get Copies of the Various Documentation Scripts

NOTE:  All current scripts have been tested with PowerShell V2, V3 and V4.  The scripts will NOT work with PowerShell V1. 

Many people have asked me where they can get copies of the various PowerShell documentation scripts. To make it easier to find, I have linked to all of them in this one article. Each script has either five, six or seven parts:

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample Software Exclusions file with TXT extension (XenApp scripts only)

All current scripts create a Microsoft Word 2007/2010/2013 document.

Current Scripts:

Download a Zip file of all the scripts. (Updated 12-Apr-2014)

Version 4 .1 PVS Farm Documentation Scripts (supports PVS 5.6 through 7.1):

Supports remoting.

Updated April 12, 2014

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension

Version 4.1 XenApp 5 Farm Documentation Scripts:

Updated April 12, 2014

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample software exclusion file

Version 4.1 XenApp 6 Farm Documentation Scripts:

Updated April 12, 2014

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample software exclusion file

Version 4.1 XenApp 6.5 Farm Documentation Scripts:

Supports remoting.

Updated April 12, 2014

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample software exclusion file

___________________________________________________________________________________________________________________

Archived Scripts

PVS Farm Documentation Scripts:

Updated April 13, 2012

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 2 PVS Farm Documentation Scripts (Creates Word 2007/2010/2013 document):

Updated March 16, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 3 PVS Farm Documentation Scripts (Creates Word 2007/2010/2013 document and supports PVS 7):

Updated July 18, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 4 PVS Farm Documentation Scripts (supports PVS 5.6 through 7.1):

Supports remoting.

Updated November 15, 2013

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension

XenApp 6.5 Farm Documentation Scripts:

Updated October 9, 2011

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 2 XenApp 6.5 Farm Documentation Scripts:

Updated January 21, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 3 XenApp 6.5 Farm Documentation Scripts (Creates Word 2007/2010/2013 document):

Updated January 28, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 3.1 XenApp 6.5 Farm Documentation Scripts (Creates Word 2007/2010/2013 document):

Updated July 3, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 4 XenApp 6.5 Farm Documentation Scripts:

Supports remoting.

Updated January 10, 2014

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample software exclusion file

XenApp 6 Farm Documentation Scripts:

Updated October 9, 2011

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 2 XenApp 6 Farm Documentation Scripts:

Updated October 9, 2011

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 3 XenApp 6 Farm Documentation Scripts (Creates Word 2007/2010/2013 document):

Updated July 3, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 4 XenApp 6 Farm Documentation Scripts:

Updated January 1, 2014

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample software exclusion file

XenApp 5 Farm Documentation Scripts:

Updated October 9, 2011

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Version 2 XenApp 5 Farm Documentation Scripts (Creates Word 2007/2010 document):

Updated June 10, 2013

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension

Note: There was no Version 3 of the XenApp 5 script.

Version 4 XenApp 5 Farm Documentation Scripts:

Updated November 15, 2013

  1. ReadMe file
  2. Change Log
  3. Unsigned script with PS1 extension
  4. Unsigned script with TXT extension
  5. Signed script with PS1 extension
  6. Signed script with TXT extension
  7. Sample software exclusion file

XenDesktop 4 Farm Documentation Scripts:

Updated March 12, 2012

  1. ReadMe file
  2. Unsigned script with PS1 extension
  3. Unsigned script with TXT extension
  4. Signed script with PS1 extension
  5. Signed script with TXT extension
, , , , , , ,

About Carl Webster

Webster is an independent consultant in the Nashville, TN area and specializes in Citrix, Active Directory and Technical Documentation. Webster has been working with Citrix products for many years starting with Multi-User OS/2 in 1990.

View all posts by Carl Webster

44 Responses to “Where to Get Copies of the Various Documentation Scripts”

  1. Lee Says:

    Hi Carl,

    First off, huge thanks for getting this out for use. I am just getting in to our XenApp 6.5 build as I have taken it over with very little knowledge.
    On running the latest and greats script you have a for a 6.5 farm build I get the following errors when it get to the work group area. Is this expected?

    Thanks,

    VERBOSE: 04/07/2014 17:09:55: Processing Worker Groups
    VERBOSE: 04/07/2014 17:09:55: Setting summary variables
    VERBOSE: 04/07/2014 17:09:55: Retrieving Worker Groups
    VERBOSE: 04/07/2014 17:09:56: Processing Worker Group All Servers
    VERBOSE: 04/07/2014 17:09:56: Processing Worker Group by OUs
    VERBOSE: 04/07/2014 17:09:56: Create Word Table for Worker Group by OUs
    VERBOSE: 04/07/2014 17:09:56: Max length of server name is 52
    VERBOSE: 04/07/2014 17:09:57: Move table to the right
    VERBOSE: 04/07/2014 17:09:57: Return focus back to document
    VERBOSE: 04/07/2014 17:09:57: Move to the end of the current document
    VERBOSE: 04/07/2014 17:09:57: Processing Worker Group Cr****
    VERBOSE: 04/07/2014 17:09:58: Processing Worker Group by OUs
    VERBOSE: 04/07/2014 17:09:58: Create Word Table for Worker Group by OUs
    VERBOSE: 04/07/2014 17:09:58: Max length of server name is 63
    Attempted to divide by zero.
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3750 char:3
    + [int]$Rows = [Math]::Floor( ( $xArray.count + $Columns – 1 ) / $Columns)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

    Exception calling “Add” with “3″ argument(s): “The number must be between 1 and 63.”
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3754 char:2
    + $Table = $doc.Tables.Add($TableRange, $Rows, $Columns)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

    The property ‘Style’ cannot be found on this object. Verify that the property exists and can be set.
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3755 char:2
    + $table.Style = $myHash.Word_TableGrid
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

    The property ‘Borders’ cannot be found on this object. Verify that the property exists.
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3756 char:2
    + $table.Borders.InsideLineStyle = 1
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

    The property ‘Borders’ cannot be found on this object. Verify that the property exists.
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3757 char:2
    + $table.Borders.OutsideLineStyle = 1
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

    VERBOSE: 04/07/2014 17:09:58: Move table to the right
    The property ‘Rows’ cannot be found on this object. Verify that the property exists.
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3770 char:2
    + $Table.Rows.SetLeftIndent(36,1)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

    You cannot call a method on a null-valued expression.
    At C:\XAScripts\XA65_Inventory_V41_Signed.ps1:3771 char:2
    + $table.AutoFitBehavior(1)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    VERBOSE: 04/07/2014 17:09:58: Return focus back to document
    VERBOSE: 04/07/2014 17:09:58: Move to the end of the current document
    VERBOSE: 04/07/2014 17:09:59: Processing published applications for Worker Group Cr****

    Reply

    • Carl Webster Says:

      Nope, that is totally unexpected. I sent you an email asking for additional info I am sure you don’t want in a public post.

      Webster

      Reply

    • Carl Webster Says:

      Lee,

      Thanks for finding this bug and working with me to get if fixed.

      Webster

      Reply

  2. Keith Says:

    I’m very new to powershell (in other words I know nothing) but I’m trying to either create or a powershell script that will give me the details of the installed versions of Xendesktop 5.6, the latest hotfix rollup pack, and the date it was installed.
    Also I want to extract the same information about PVS servers and Web Interface

    can this be achieved in powereshell? I cannot find any reference to powershell extracting this information from the servers…

    Reply

    • Carl Webster Says:

      There is no PowerShell for Web Interface.

      I do not see an equivalent to XenApp’s Get-XAServerHotfix cmdlet for either XenDesktop (5 or 7) or PVS.

      Webster

      Reply

  3. Bob W Says:

    Hi Carl,

    Will the XA6.5 SDK work for running your scripts against an XA6 farm? Or would I need both SDK packages to doocument an XA6 and an XA6.5 farm?

    Thank you for sharing your hard work.

    Regards

    Reply

    • Carl Webster Says:

      Hmmm, I am not sure as I have never tried it but I would think you would need both. Only one way to find out though. :)

      Webster

      Reply

      • Bob W Says:

        I thought that would be the answer. Thanks. It just means I need to put some thought into this before I progress.

        I’ve experimented with installing both SDK packages on my PC. If XASDK60 is installed first, XASDK65 overwrites the first installation. If XASDK65 is installed first, XASDK60 installation behaves like the SDK is already installed and does nothing.

        If I need to use both SDK packages, it looks like I’ll need to run your scripts from two locations. You’ve noted that the v4.1 XA 6.5 script supports remoting, but the v4.1 XA 6.0 script isn’t similarily annotated. Does that mean I’ll have to be on one of the XA 6.0 farm servers to run the script?

        Thanks

      • Carl Webster Says:

        Only the PVS and XenApp 6.5 PowerShell cmdlets support remoting with the exception of the XenApp 6.5 Group Policy cmdlets. Citrix forgot about adding Remoting to the Group Policy cmdlets and they have no plans to go back and add it.

        Webster

      • Carl Webster Says:

        I should have added that the XenDesktop 5.x and 7.x cmdlets also support remoting.

        Webster

  4. Damian Says:

    Hey Carl,

    Thanks for the scripts, this would help me a great deal as I have recently taken over a XenApp 6.5 farm with no idea of how its configured. I could go through every bit of the Citrix AppCenter and go through what is configured, published e.c.t though this would take me ages.

    When I try to go to http://tinyurl.com/XenApp65PSSDK to download the Citrix Group Policy Commands I get sent to a “Welcome to the Citrix Community” page with various areas. I’ve clicked on the XenApp Powershell SDK link though I dont think this is where I would fine the Group Policy Commands. Is there any other way of downloading these?

    Many thanks.

    Reply

  5. Sam Says:

    Hi Carl,

    Thanks for your scripts. Can you please advice if it is possible to install the SDK onto a test farm server and run the script across to another farm?

    Reason is, the SDK install onto a production XA server means change control…..

    Thanks,
    Sam

    Reply

    • Carl Webster Says:

      If you are talking PVS or XenApp 6.5 I believe that should be doable. Both PVS and XenApp 6.5 support remoting (with the exception of the XenApp 6.x Group Policy module).

      I have articles on my site that show how to do remoting with the scripts for both PVS and XenApp 6.5.

      Thanks

      Webster

      Reply

  6. Chris Says:

    In Word2010 I can See the cover page sideline but I get the following error message

    C:\Temp\XA65_Inventory_V4.ps1 : Cover Pages are not installed or the Cover Page Sideline does not exist. Script cannot
    continue.
    At line:1 char:24
    + .\XA65_Inventory_V4.ps1 <<<< -verbose
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,XA65_Inventory_V4.ps1

    What could be the reason?

    Thanks in Advance
    Chris

    Reply

    • Carl Webster Says:

      I have sent you a test script to help with troubleshooting this issue.

      Thanks

      Webster

      Reply

      • Morten Moss Says:

        Hi Carl,

        thank you very much for shareing.

        I got the exact same error as chris, the only difference is that i’m trying to run the XA5 script.

        have you any idea what causes this error?

        Thanks in Advance
        Morten Moss

      • Carl Webster Says:

        i am working on a solution. have not found a fix yet.

        webster

    • Carl Webster Says:

      I have a test script for you to run to see if I have this fixed. For anyone else having this issue, send me an email (Webster@carlwebster.com) and I will send you the test script.

      Thanks

      Webster

      Reply

  7. Prince Says:

    Many thanks for sharing Carl. Awesome work!

    Reply

  8. Jim Moyle Says:

    Carl, any chance of a link which downloads all the files for all of the current scripts?

    Thanks

    Jim

    Reply

  9. Andrew Gerrie Says:

    Hello Carl,

    Just running V3 on XA6 and XA65 farms. Both reporting “WARNING: Load balancing policy information could not be retrieved”.

    I’m also getting this in the powershell window:

    Unable to find type [Microsoft.Office.Interop.Word.WdSaveFormat]: make sure
    that the assembly containing this type is loaded.
    At C:\temp\xa6\XA6_Inventory_V3.ps1:3378 char:2
    + $saveFormat =
    [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], “wdFo …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~
    + CategoryInfo : InvalidOperation: (Microsoft.Offic…rd.WdSaveFo
    rmat:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

    [ref] cannot be applied to a variable that does not exist.
    At C:\temp\xa6\XA6_Inventory_V3.ps1:3379 char:2
    + $doc.SaveAs([REF]$filename, [ref]$SaveFormat)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (SaveFormat:VariablePath) [],
    RuntimeException
    + FullyQualifiedErrorId : NonExistingVariableReference

    Despite this it seems to have produced a nice looking Microsoft Word Doc though. A couple of observations here:

    In the policies section for XA6 it is completely blank for XA65 is is populated but the user and computer settings are blank (only the unfiltered policies). I assume though that this just means the policies are using the defaults (which they are).

    Thanks Carl for your efforts – It has given me enough information anyway but I thought you might like the feedback!

    Andrew.

    Reply

    • Carl Webster Says:

      In the V4 scripts, currently under development, I am adding additional checking for items that do not have to exist. For example, applications, worker groups, load balancing policies and in XenApp 5 Citrix policies.

      Are you running Word 2010 or 2013?

      Thanks

      Webster

      Reply

  10. Kjell Says:

    Hi Carl,

    tested to run the script with a farm of 50 HP blade servers running XenApp 6.5. Works fine until it starts the loop of documenting every server and it’s services. Been running for 2,5 hours on 3 servers. Why is it so slow, I looked through the code, and didn’t see any good reason for the slowness.. Any clues?

    Seems to be hanging mostly on “format first row with column headings”…

    Kind regards,
    Kjell

    Reply

    • Carl Webster Says:

      Yes, I have seen this one other time. The XenApp servers were behind a firewall from the computer running the script and when it got to the servers section it couldn’t reach any server and say there timing out for getting XenApp info, info on the Citrix services and info on the Microsoft hotfixes.

      Webster

      Reply

      • Kjell Says:

        Hi Carl,

        the server which I was running the script on is in the same VLAN and subnet and is actually the management server for the farm. And the network guys are telling me there is no firewall at all between them…

        Firewall is also turned off on the operating system. Strange this is.

        Any other thoughts?

        Kind regards,
        Kjell

      • Carl Webster Says:

        The only thing I would know to do would be to run the script in ISE and set a breakpoint for before the write-verbose statement you mentioned “format first row with column headings”. When the breakpoint is reached, then start stepping through the code to see where it is hanging.

        Sorry

        Webster

  11. Alan Lantz Says:

    Great scripts, but the requirement to install MS Word is overkill.

    Reply

    • Carl Webster Says:

      Alan,

      Someone was going to send me a way to create a Word doc without having to have Word installed but I never heard back from them.

      Webster

      Reply

      • Martyn T. Keigher Says:

        Hey Carl,

        Great Script! Did that person get back to you, regarding running your script without the need for MS Word to be installed?

        Would like to know IF and HOW this is possible?

        Thank you so much & Keep up the good work! :)

      • Carl Webster Says:

        No, I have never received a response back about how to create a Word doc without having to have Word installed. Would also be nice for Excel.

        Webster

    • Carl Webster Says:

      Alan,

      The XenApp 6, XenApp 6.5 and PVS scripts do not require Word to be installed on any server. For those scripts, they can be run remotely from a PC with Word installed.

      Webster

      Reply

  12. w00tm3 Says:

    Do you know why I am getting this error about unexpected cmdletbinding?

    Reply

  13. pablo Says:

    First of all thanks for the scripts the XenApp 6.5 runs great!!!
    The PVS I am having some issues this the error I am getting running script from PVS server and MS word is installed locally in the server

    Missing file specification after redirection operator.
    At C:\temp\pvs\PVS_Inventory_V2.ps1:1 char:63
    + <<<<
    + CategoryInfo : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingFileSpecification

    Reply

    • Carl Webster Says:

      All my scripts require PowerShell V2 and do not work with either V1 or V3.

      The line in question is in the help text. If you are running the latest V2.03 of the PVS script, you can safely delete the help text (the first 133 lines of the script).

      Thanks

      Webster

      Reply

  14. Jerry Says:

    Great report! Can this be emailed using something like the below?

    #Sends the output via email

    $msg = new-object Net.Mail.MailMessage
    $smtp = new-object Net.Mail.SmtpClient(‘yoursmtpserveraddress’)

    $msg.From = ‘senderemailaddress’
    $msg.To.Add(‘youremailaddress@domain.com’)
    $msg.Subject = “Test Script Output.”
    $msg.Body = $output
    $smtp.Send($msg)

    Reply

    • Carl Webster Says:

      I sent your question to my PowerShell guru friend, MBS. Here is his sanitized reply:

      I recommend you send it as an attachment. Below is fully tested and working code, just update as appropriate for you.

      For error-handling, I wrap the entire thing in a try-catch block since system.net.mail.smtpclient doesn’t give me a result on the Send() method but does provide an exception.

      $date = get-date
      $year = $date.year
      $month = $date.Month
      $day = $date.Day

      $suffix = “{0,4}-{1,0:d2}-{2,0:D2}” -f $year, $month, $day

      $var = new-object system.net.mail.smtpclient( “mail.yourdomain.com”, 25 )

      $from = new-object system.net.mail.mailaddress( “addess@yourdomain.com” )

      $to = new-object system.net.mail.mailaddress( “receiver@theirdomain.com” )
      $cc = new-object system.net.mail.mailaddress( “CCreceiver@theirdomain.com” )

      $msg = new-object system.net.mail.mailmessage( $from, $to )

      $msg.Body = “See attached files for inventory report.”
      $msg.Subject = “Inventory Report for ” + $suffix

      $attach = new-object system.net.mail.attachment( “$pwd\XA65Farm.docx” )

      $msg.Attachments.Add( $attach )

      $msg.CC.Add( $cc )

      $var.Send( $msg )

      $attach1 = $null
      $attach2 = $null
      $msg = $null
      $cc = $null
      $to = $null
      $from = $null
      $var = $null

      Hope this helps.

      Webster

      Reply

  15. Mohamed Says:

    Hi,

    We tested the Version 3.1 of the XenApp 6.5 Farm Documentation Scripts on our Citrix XenApp 6.5 but it dosn’t work.
    We had those errors:

    I think it’s probably due to the language of Microsft Office, it’s installed in French at our server and the variables like “Styles” don’t have the same names in French.

    Can you publish a vesrion of the script for Microsoft Office in French.

    Thank’s

    Reply

Leave a Reply

Current month ye@r day *