Quantcast
Channel: PowerShell General
Viewing all 10624 articles
Browse latest View live

Problem with WinHttpRequestOption_SslErrorIgnoreFlags of COM Object WinHttp.WinHttpRequest.5.1

$
0
0

Hi,

 

I have problems writing a powershell script that will validate a https website. To make the script use the object WinHttp.WinHttpRequest.5.1. I need to define the WinHttpRequestOption_SslErrorIgnoreFlags to have control over the verification of certificates

 

More information about WinHttpRequestOption:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx

 

This is the script:

$Url = "https://www.sample.com/Default.aspx"

$User = "user"

$Password = "password"

$Http = new-object -com "WinHttp.WinHttpRequest.5.1"

$Http.Option(4)=13056

$Http.open("GET", $Url, $false)

$Http.SetCredentials($User, $Password, $HttpREQUEST_SETCREDENTIALS_FOR_SERVER) 

$Http.send()

$Body = $Http.responseText

$Body

 

This is the error:

Exception setting "Option": "Value does not fall within the expected range."

At C:\Users\alberto.puente.gomez\AppData\Local\Temp\60240db8-5140-4929-8a41-6cd7836a2b39.ps1:10 char:13

+ $Http.Option <<<< (4)=13056

    + CategoryInfo          : NotSpecified: (:) [], SetValueInvocationException

    + FullyQualifiedErrorId : CatchFromBaseAdapterParameterizedPropertySetValueTI

 

More Info:

$Http | gm

   TypeName: System.__ComObject#{016fe2ec-b2c8-45f8-b23b-39e53a75396b}

Name                  MemberType            Definition                                                            

----                  ----------            ----------                                                            

Abort                 Method                void Abort ()                                                         

GetAllResponseHeaders Method                string GetAllResponseHeaders ()                                       

GetResponseHeader     Method                string GetResponseHeader (string)                                     

Open                  Method                void Open (string, string, Variant)                                   

Send                  Method                void Send (Variant)                                                   

SetAutoLogonPolicy    Method                void SetAutoLogonPolicy (WinHttpRequestAutoLogonPolicy)               

SetClientCertificate  Method                void SetClientCertificate (string)                                    

SetCredentials        Method                void SetCredentials (string, string, HTTPREQUEST_SETCREDENTIALS_FLAGS)

SetProxy              Method                void SetProxy (HTTPREQUEST_PROXY_SETTING, Variant, Variant)           

SetRequestHeader      Method                void SetRequestHeader (string, string)                                

SetTimeouts           Method                void SetTimeouts (int, int, int, int)                                 

WaitForResponse       Method                bool WaitForResponse (Variant)                                        

Option                ParameterizedProperty Variant Option (WinHttpRequestOption) {get} {set}                     

ResponseBody          Property              Variant ResponseBody () {get}                                         

ResponseStream        Property              Variant ResponseStream () {get}                                       

ResponseText          Property              string ResponseText () {get}                                          

Status                Property              int Status () {get}                                                   

StatusText            Property              string StatusText () {get}  

 

Do not know how to set a value in the ParameterizedProperty :(


Detect get-adcomputer returns no results

$
0
0

I have a script that uses get-adcomputer to search AD for computer accounts and i'd like to be able to detect when it doesnt return any accounts.  Right now even if it doesnt find any thing it still runs through the foreach once whcih generates errors.  I'd like to only have the foreach run if it find computer accounts. 

I've tried checking for "" in $search but there is something in the variable. 

$search = get-adcomputer -filter {name -like "ab-*"} -searchbase "cn=computers,dc=my,dc=site,dc=com"

if ($search -ne "") {

     foreach ($workstation in $search) {

           $workstation

 

     }

 

}

 

Any suggestions would be appreciated

Where does powershell saves the set-executionpolicy setting?

$
0
0

I'm building some servers and need to run some powershell scripts on them. However, I need to run the command Set-ExecutionPolicy -ExecutionPolicy remotesigned -Force manually on every server. Because I can't set execution policy in a script. I want to know where PowerShell save the execution policy setting and want to directly change it. Is that possible?

Thanks.

Invoke-Command -ComputerName

$
0
0

Hey, 

Together with the issue in this post: http://powershell.com/cs/forums/t/10792.aspx,
I try to remotely flush and register DNS like the following since my script changes DNS settings;

 

Invoke-Command -ComputerName $pc {
ipconfig /flushdns
ipconfig /registerdns}

This command call gives the following error:

"Connecting to remote server failed with the following error message : WinRM cannot process the request. The following error occured while using Kerberos authentication: The network path  was not found.

 Possible causes are:
  -The user name or password specified are invalid.
  -Kerberos is used when no authentication method and no user name are specified.
  -Kerberos accepts domain user names, but not local user names.
  -The Service Principal Name (SPN) for the remote computer name and port does not exist.
  -The client and remote computers are in different domains and there is no trust between the two domains.

 After checking for the above issues, try the following:
  -Check the Event Viewer for events related to authentication.
  -Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport.

 Note that computers in the TrustedHosts list might not be authenticated.

   -For more information about WinRM configuration, run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.

    + CategoryInfo          : OpenError: (:) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionStateBroken"

Anyone got any experience with this? Can someone tell me what's happening? This one I'm unable to even run manually, and I'm an admin which can do this with no problem locally on each machine.

 

Differences between v2 and v3

$
0
0

Hi,  I'm brand new to PowerShell and I've just purchased the Month of Lunches for v2 (timing!), and I'm also considering the CBT Nuggets PowerShell 3 Foundations course.  Would I be better off doing the MoL v2 training first and then following with the Nuggets?  How much of v3 is backwards compatible with v2?  Thanks for any advice.

Jed

How to do a -like comparison with multiple things on the right side?

$
0
0

Am I forced to have a 

"x -like y1" -or "x -like y2" (and so on for all y's)

or can I have a "smarter" "-x -like (y1 -or y2 -or ...)"?

 

What I'm trying to do is use Get-WMIObject -Class Win32_NetworkAdapterConfiguration | Where-Object {$_.IPEnabled = "TRUE" -and $_.IP -like "XXX*"}

Where the "$_.IP -like "XXX*"" is the case first mentioned at the top of this post. I have several three digit numbers I want to match it with.

From (C#)ExpandoObject/ HashTable to PSObject

$
0
0

I wrote a C# DLL that I've imported into PowerShell via assembly. I'm working with dynamic objects inside my DLL and eventually return these in a PowerShell environment.

The problem with these 'ExpandoObjects'  is that they won't return into PowerShell as an object (like it does in C#) but it returns them as HashTables and thus I'm losing my Object Format (.Notation, better display and control etc.).

Unfortunately I couldn't find any means to properly convert/cast an C# Dynamic Object to a PSObject so I tried handling with the issue at the PowerShell Side. I basically used your script : Converting Hash Tables to Objectsx to create an object from the HashTable but I lost all my type information in the process. 

For example, my Dynamic ExpandoObject had Booleans, Ints, Floats and Strings and the resulting object only had String properties which is not exactly what I need.

Does any of you have prior experience with this problem and/or any ideas/tricks that could help me out in my current situation?

Any help is kindly appreciated Smile 

Invoke-WmiMethod call weird behaviour

$
0
0

Hey again^^

In relation to my latest project/venture, I'm trying to update DNSs, DNSSuffixSearchOrders, set DNSDomain and such remotely.

I'm struggling with two things, the other one I'll put in another post, but here's the one Invoke-WmiMethod:

$null = Invoke-WmiMethod -Class Win32_NetworkAdapterConfiguration -Name SetDNSSuffixSearchOrder -ComputerName $pc -ArgumentList $list,$null

The strange behaviour is that if I run this call outside of my function (AKA manually), and I use an elevated command prompt, then it goes through.

Otherwise, I get return value 91 (Access denied), if I run manually but not as admin.

If I run it through my method, I get the following error message:

Invoke-WmiMethod : Object reference not set to an instance of an object.
At D:\<ScriptPath>\DNSconfig.psm1:181 char:23

+                         Invoke-WmiMethod <<<<  -Class Win32_NetworkAdapterConfiguration -Name SetDNSSuffixSearchOrder -
ComputerName $pc -ArgumentList $newDNSSuffix,$null
   + CategoryInfo          : NotSpecified: (:) [Invoke-WmiMethod], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.InvokeWmiMethod

Before last weekend neither was necessary as long as the account running the script was admin.

Can anyone shed some light on what happened?


I have bitten off more than I can chew and can't see the forest for the trees...HELP!!!

$
0
0

I have written the following script but each fix I do breaks 2 other things.  For instance I am loading variable data to an .xlsx and it errored that the object was not a string.  So I added .ToString method and it now says my passed variable ($computer) loaded using the Get-Content cmdlet is null!

Prior to using .ToString it went had no issues with the variable. 

I am frustrated, stuck and out of time.  Please help!

Oh yeah and the excel formulation broke as well. 

$computers = Get-Content -Path H:\Computer.txt
$Ping = Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue
Foreach ($computer in $computers)
    {
        #Check if machine is online       
        if ($Ping)
            {
                #begin Row count for Excel
                $Row=3
                #Start WinRM Services
                $service = Get-WmiObject -ComputerName $computer -Class Win32_Service -Filter "Name='WinRM'"
                $service
                $service.StartService()              
               
                #If Online eq true Get Environment Variables
                $Build = Invoke-Command -ComputerName $computer -ScriptBlock {$env:bldver}
                $Domain = Invoke-Command -ComputerName $computer -ScriptBlock {$env:userdomain}
                $DNSDomain = Invoke-Command -ComputerName $computer -ScriptBlock {$env:userdnsdomain}
                $LogonServer = Invoke-Command -ComputerName $computer -ScriptBlock {$env:logonserver}
                $NLTest = Invoke-Command -ComputerName $computer -ScriptBlock {([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).FindDomainController()}
                $OnlineStatus =  "Online"
                $OS = (Get-WmiObject Win32_OperatingSystem).Version
                $SID = Invoke-Command -ComputerName $computer -ScriptBlock {$env:username}
                $UAT = Invoke-Command -ComputerName $computer -ScriptBlock {$env:uatdata}
               
               
                #Determin if PC is logged onto Domain
                if ($Logonserver -eq $computer)
                    {
                        $Loggedin = "Locally"
                    }
                else
                    {
                        $Loggedin = "Domain"
                    }
                   
                #Get IP and NIC Info
                $NICItems = gwmi -class "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -comp $computer | Where-Object {$_.defaultIPGateway -ne $null}
                    ForEach ($NICItem in $NICItems)
                    {
                        $MAC = $NICItem.MacAddress | select-object -first 1
                        $IP = $NICItem.IpAddress | select-object -first 1
                        $Subnetmask = $NICItem.ipsubnet | select-object -first 1
                    }

                #Create Excel Spreadsheet
                $Excel = new-object -comobject Excel.Application
                $Workbooks = $Excel.Workbooks.Add()
                $Worksheets = $Workbooks.worksheets
                $Worksheet = $Worksheets.Item(1)
                $Worksheet.Name = “Clientside Commonality ”
                $Excel.Visible = $True
                $Cells = $Worksheet.Cells
               
                #Create Title and Column Headers
                $Cells.Item(1,1) = "Commonality Tracker"
                $Cells.Item(1,7) = Get-Date
                $Cells.Item(2,1) = "Computer Name"
                $Cells.Item(2,2) = "Online Status"
                $Cells.Item(2,3) = "Domain"
                $Cells.Item(2,4) = "DNSDomain"
                $Cells.Item(2,5) = "UAT"
                $Cells.Item(2,6) = "MAC Address"
                $Cells.Item(2,7) = "IP Address"
                $Cells.Item(2,8) = "Subnet Mask"
                $Cells.Item(2,9) = "Logged In User"
                $Cells.Item(2,10) = "Operating System"
                $Cells.Item(2,11) = "Build Version"
                $Cells.Item(2,12) = "Netsh  results location"
                $Cells.Item(2,13) = "Authenticated"
                $Cells.Item(2,14) = "NLTest DC"
              
                #Format Cell Headers
                $Cells.Item(1,1).Font.Bold = $True
                $Cells.Item(1,1).Font.Size = 22
                $Cells.Item(1,7).Font.Bold = $True
                $Cells.Item(1,7).Font.Size = 20
                $range.ColumnWidth = 50
                $range.Font.Bold = $True
                $range.Font.Size = 14
                $range.HorizontalAlignment = 3
                $range = $excel.Range("A2",”L2")
                $range.ColumnWidth = 50
                $range.Font.Bold = $True
                $range.Font.Size = 14
                $range.HorizontalAlignment = 3
               
                #Begin populating Excel
                $Cells.Item($Row,1) = $computer.ToString()
                $Cells.Item($Row,2) = $OnlineStatus.ToString()
                $Cells.Item($Row,3) = $Domain.ToString()
                $Cells.Item($Row,4) = $DNSDomain.ToString()
                $Cells.Item($Row,5) = $UAT.ToString()
                $Cells.Item($Row,6) = $MAC.ToString()
                $Cells.Item($Row,7) = $IP.ToString()
                $Cells.Item($Row,8) = $Subnet.ToString()
                $Cells.Item($Row,9) = $User.ToString()
                $Cells.Item($Row,10) = $OS.ToString()
                $Cells.Item($Row,11) = $Build.ToString()
                $Cells.Item($Row,13) = $Loggedin.ToString()
                $Cells.Item($Row,14) = $NLTest.Name
               
              
              
                #Check OS version and Run boot trace if Windows 7
                $Acct = "System"
                $Netsh = Invoke-Command -ComputerName $computer -scriptblock {$Trace} 
                $Reboot = Invoke-Command -ComputerName $computer -scriptblock {"Shutdown /r /c "+"This computerwill restart in 10 Minutes to capture essential data to troubleshoot your issues.  Please save your work and pardon the interruption."+" /t:600"} 
                $Schedule = Invoke-Command -ComputerName $computer -scriptblock {$Task} 
                $Task = "schtasks.exe /create /s $computer /ru $Acct /tn $TaskName /tr $TaskRun /sc $Schedule /F"
                $TaskName = "Stop netsh"
                $TaskRun = "netsh trace stop"
                $Trace = "netsh trace start capture=yes persistent=yes report=yes tracefile=C:\bootcap.etl"
               
               
               
                If ($OS -eq "6.1.7601")
                    {
                        $OSType = "Windows 7"
                 #       $Netsh
                 #       $Schedule
                 #       $Cells.Item($Row,12) = "C:\bootcap.etl"
                 #       $reboot
                    }  
                else
                    {
                        $OSType = "Windows XP"
                    }
                #Increment Row
                $Row += 1
            }
        else
            {
                $OnlineStatus = "Offline"
            }
       
        #Populate Excel for offline machines
       
        $Cells.Item($Row,1) = $computer
        $Cells.Item($Row,2) = $OnlineStatus
               
        #Increment Row
        $Row += 1
       
       
     
     }

#Stop WinRM Services
$service.StopService()

#Autosize Columns
$Worksheets.UsedRange.EntireColumn.AutoFit() |out-null

#Save your work
$Workbooks.SaveAs("H:\Troubleshooting.xlsx")
$Excel.quit()

#EOF

 

trying to add a tab to a string line for an Out-file

$
0
0

Hello again guys!

I have a hash table and are trying to put a tab space for all my lines for formatting with out-file. I tried putting the `t but it does not work.

Here is the script for just the lines I want sent by out-file:

  foreach {
   if ($ht[$_]) {
    '{0} `t-> Available in "{1}"' -f $_,($ht[$_] -join ' **ALSO IN** ') 
    }
    else {'{0} `t-> UNKNOWN' -f $_}
    }|out-file "$pathOfG\AID Integrity Check Report – $nameOnly1" -append

here is the data which I have in the out file when it is sent:

A000000018100203 `t-> Available in "AID List refrence Product.txt"
A0000000620203 `t-> Available in "AID List refrence Product.txt"
A000000018100118 `t-> Available in "AID List refrence Product.txt"
A00000001810011A `t-> Available in "AID List refrence Product.txt"

I think I may need to put double quotes for the `t to be recognized.

I would like an equal amount of space to be displayed before -> so like this:

A000000018100203                          -> Available in "AID List refrence Product.txt"
A0000000620203                              -> Available in "AID List refrence Product.txt"
A000000018100118                          -> Available in "AID List refrence Product.txt"
A00000001810011A                          -> Available in "AID List refrence Product.txt"

 

I appreciate your help and suggestions!

 

Thanks again!

psremoting with windows 7 home premium

$
0
0

Hello,

I try to make a New-Pssession between 2 computer with Windows 7 Home Premium but it doesn't work. Is the feature blocked for the home version?

 

PS WSMan:\localhost\Client> winrm.cmd quickconfig
inRM already is set up to receive requests on this machine.
inRM already is set up for remote management on this machine.

 

 

WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client
Name                      Value                                                             Type
----                      -----                                                             ----
TrustedHosts              *                                                                 System.String

The 2 computers are in the same Workgroup
Error from client:
Enter-PSSession : Connecting to remote server failed with the following error message : The WinRM client cannot process
 the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a dom
ain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setti
ng. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. Y
ou can get more information about that by running the following command: winrm help config. For more information, see t
he about_Remote_Troubleshooting Help topic.
At line:1 char:16
+ Enter-PSSession <<<<  -ComputerName customer10
    + CategoryInfo          : InvalidArgument: (customer10:String) [Enter-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : CreateRemoteRunspaceFailed
I tried with hostname or ip but it's the same issue...
Thanks for your help Big Smile

 

delete a specific files from the harddisk

$
0
0

hi everyone I'm new to powershell and network administrator in our company we have a virus that is spreading in our computers and no antivirus can stop it I usually delete the file using powershell but I was thinking that I can create a script for the users so they delete this file if they are infected this is what I get after some research

$ElapsedTime = [System.Diagnostics.Stopwatch]::StartNew()
[void][System.Reflection.Assembly]::LoadWithPartialName(‘Microsoft.VisualBasic’)
$drive = [Microsoft.VisualBasic.Interaction]::InputBox(“please enter the drive letter that you want to check example c or d”)
$driveletter = $drive + “:”
Set-Location $driveletter
$file = [Microsoft.VisualBasic.Interaction]::InputBox(“please enter the file name that you want to delete”)
Write-Host “script started at $(get-date)” -ForegroundColor Cyan
$deleted = Get-ChildItem * -includ $file -Recurse -Force -EA “SilentlyContinue”
$deleted | Remove-Item -force
foreach ($_ in $deleted ){$count = $count +1}
write-host “Script Ended at $(get-date)” -ForegroundColor Cyan
#write-host “Total Elapsed Time: $(GetElapsedTime)”
[console]::ForegroundColor = “cyan”
“Number of deleted files is ” +$count
write-host “Total Elapsed Time: $($ElapsedTime.Elapsed.ToString())” -ForegroundColor Yellow
Read-Host “press enter to exit”

but I noticed after a while that if I canceled the file or didn't input anything when it prompts me it will delete all the files in the folders it's too dangerous is there something that I'm missing I only want it to delete only this file and if we didn't enter any value it will cancel

thanks in advance

Fady

Speeding up searching for eventlog entries

$
0
0

Hello.

My application log contains more than 50000 entries, and searching for once defined source, if there aren't entries from that source, takes about 60 seconds. I'm using PS for monitoring purposes, and 60 sec is too much for me :)

How can I make this work faster?

Or, may be there is any fast method to know - is there are events from defined source in event log, or not?

Thank you.

 

Cleaning up corrupted profiles in Windows 2008 R2

$
0
0

I am building a script for us to run on a monthly basis that will search the ProfileList key in the Registry for .Bak at the end of the users SID, and when found, then delete the key. There are a few other pieces to the script which I have a handle on. 

The piece that is stumping me is that when I run the below in Posh, I am not able to find a SID with a .BAK on the end, (even though I am able to find this in the Gui of Regedit). What am I missing?

1.  Get-WmiObject -ComputerName 'servername' -Class Win32_UserProfile

 

 

 

2. $ProfileList = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\ProfileList"
  
gci $ProfileList | format-List *

Thanks in advance.

 

Creating a MAPI profile with powershell?

$
0
0

Hi all Smile

Is it possible to create a MAPI profile with powershell - what I basically need to do is programmatically connect to a mailbox to remove some hidden messages stored within it?

I am pretty sure this isn't possible with .NET but wondering if you know of any other library that can do this?

Thanks for any help.


Having Trouble with Remote WMI and Win32_PrintJob no errors and also no info returned

$
0
0

I am trying to use WMI to get the print jobs from a remote computer using WMI.  Both computers are running Windows 7.

If I pause a printer on the local system and then send some print jobs to one of the printers  I can see the print jobs with the following command:

get-wmiobject -class Win32_PrintJob

If I pause a printer on the remote system BLAHBLAH and then send some print jobs to one of the the printers, I CANNOT see the print jobs with the following command:

get-wmiobject -class Win32_PrintJob -credential "BLAHBLAH\User 1" -ComputerName "BLAHBLAH.dhcp.bsu.edu"

(User 1 is a local account on the computer BLAHBLAH)

I don't receive any error messages or any output either, just a new prompt.  I can get the following commands to work so I know that remote WMI is sort of working:

get-wmiobject -class Win32_Printer -credential "BLAHBLAH\User 1" -ComputerName "BLAHBLAH.dhcp.bsu.edu"

get-wmiobject -class Win32_Computersystem -credential "BLAHBLAH\User 1" -ComputerName "BLAHBLAH.dhcp.bsu.edu"

Any help would be appreciated.  Thank You

 

 

Adding users to a group based on custom attributes

$
0
0

Team,

Have an intresting script i am trying to develop and need guidance. I am trying to automate distribution group membership using custom attributes. Currently i am able to add users to a group based on a custom attribute i set example below:

#Get-QADUser -Enabled -SearchAttributes @{extensionattribute5 = 905} | Add-QADGroupMember -Identity "Sales - Districttest"

Before the above script is run i am removing all the membership of the group as the custom attribute number will change for users if they are transfered, disabled, etc... see below snippet:

#Get-QADGroup -SearchAttributes @{extensionattribute5 = 905} | Set-QADGroup -Member $null

So now i need to do this on a larger scale and i am going to do this using a csv file. Note also the extension data attibute number is also set to the distribution group.

I want to be able to add users to the group where that group extension data attribute = the user extension data attribute.

 

Setting power plan after import with PowerShell

$
0
0

I am in the process of writing a script to configure a number of settings on Conference Room PC's.

Using powercfg.exe I am able to import the correct power scheme.

The problem I am having it with actually setting it.  The GUID is differemt each time you import it. 

This is what i have so far:

#Import and Set Power Settings
powercfg -import c:\cr\crsch.pow
Start-Sleep -s 15
powercfg -setactive e158c791-357b-43cf-bebf-64cc68aceb1a

Is there a way to setactive by "friendly name?"

Thanks,

Geoff

How To Stop Windows Services Using Result From XML File

$
0
0

Hi,

I'm trying to parse xml files in a directory with the following script.  For example, in the xml i have data that looks like the following called service.xml

displayName="blahblahblah"

 

get-childitem -Path c:\service.xml | foreach { [xml]$xml=get-content $_; if ($xml.config.service.displayname) {$xml.config.service.displayname} }

 

When I run the script I will get result as the following

blahblahblah

 

 

So let's say there is a windows service displayname called blahblahblah, how can i use the xml result and match it to stop and start the service using the displayname.

 

Thanks,

Daniel

Still waiting for my limited edition (handsigned) copy of powershell V3 lunches

$
0
0

Don, sorry to bother you with this but maybe you have some answers?

On august 1st I ordered and paypalled for the "PowerShell in a Month of Lunches" Limited Edition 2 Book Lunch SetItem# LUNCHPAK, since then absolute email silence and nothing received yet. When may I expect delivery and can I tracfk the parcel being sent? Awaiting some answer, or who should I contact further for this matter), thanks!

Viewing all 10624 articles
Browse latest View live