Showing posts with label Powershell. Show all posts
Showing posts with label Powershell. Show all posts

Friday, January 16, 2015

Lync helpful PowerShell commands

command to see your routing group and primary FE server get-csuserpoolinfo 

checks if pool is ready for upgrade - get-cspoolupgradereadinessstate
This command should put the FE server in a graceful shutdown of Lync for a maintenance windows with minimal impacting end users - stop-cswindowsservice -graceful
checks the pool pairing status - Get-CsBackupServiceStatus 
Status of database replication state
  • Get-CsDatabaseMirrorState -PoolFqdn -DatabaseType User
  • Get-CsDatabaseMirrorState -PoolFqdn  -DatabaseType CentralMgmt
Start manual process of database fail-over to mirror
  • Invoke-CsDatabaseFailover -PoolFqdn  -DatabaseType User -NewPrincipal mirror -Verbose
  • Invoke-CsDatabaseFailover -PoolFqdn  -DatabaseType CentralMgmt -NewPrincipal mirror -Verbose
Start manual process of database fail-over to primary
  • Invoke-CsDatabaseFailover -PoolFqdn  -DatabaseType User -NewPrincipal primary -Verbose
  • Invoke-CsDatabaseFailover -PoolFqdn  -DatabaseType CentralMgmt -NewPrincipal primary -Verbose
Check fabric state of the pool - Get-cspoolfabricstate

Wednesday, March 5, 2014

Changing key in windows server 2012

When installing a new win 2012 OS in case where key is not installed immediately during install wizard you might get into issue where there is not place in GUI (at least that I could find) where you can change to appropriate key in order to activate windows.

Thanks to powershell there is even easier way of doing this:
slmgr -upk (this removes the current Product Key)
slmgr -ipk XXXX-XXXX-XXXX-XXXX (this installs the new Product Key)
Once key is installed using first command you can also go to action center in order to use GUI to enter key and activate windows.

Tuesday, September 17, 2013

More usefull powershell commands

Alternate authentication cmdlet
Sometimes it is pretty useful to be able and use alternate credentials in PowerShell command. This can be done by using Get-Credential cmdlet but a downside is that you can not specify password. Instead what will happen every time this cmdlet is ran it will produce a popup box to enter password.
A nice workaround is to store the credentials in encrypted variable such as $cred = Get-Credential Administrator this will initially pop up with authentication box where password is typed in but afterwards you can use $cred variable in your session without need to type it in again.

Run PowerShell command in background and keep control of your session for other tasks
In the situation where we need to run a cmdlet where output will take a while to be produced we can use -asjob switch. This will give us back our prompt to run additional command while our initial query will run in the background. Some of the related cmdlets with which we can control or view jobs are: Get-Job, Receive-Job, Remove-Job, Resume-Job, Start-Job, Stop-Job, Suspend-Job, Wait-Job

Output text in PowerShell
Write-Output

Input some text into powershell
Read-Host

Convert output of query to HTML
This is specifically usefully if desired output needs to be shared for wide audience. All needs to be done is convert it to HTML using ConvertTo-hmtl and output to file using Out-File to write contents into file on web server and your info is readily available for brain consumption.

Import contents of file into PowerShell for processing
Best example for this would be creating multiple users in AD from predefined csv file. We can use Import-CSV cmdlet to take a contents of csv file and pipe it into another cmdlet such as Import-CSV file.csv | New-ADUser. Please note that header of csv file should contain valid AD properties for user. Whichever properties you have, those properties will be created along with a user.

Tuesday, September 10, 2013

Basic help powershell commands that make life easier

get-help
displays help for desired commandlet

get-help -full
displays full help for desired commandlet including examples

get-help -online
if you have internet access this will display online help for any commandlets desired

update-help
downloads and installs help files from internet

show-command
opens gui for desired commandlet where you can see whole bunch of options and parameters. If desired these parameters can be filled out in gui and copied to run in PowerShell window in order to see exact syntax

get-command
this will list commands that pertain not only to PowerShell but a whole system

get-member
gets the properties and methods of objects. This is very useful to see what custom fields/methods you can use for specific cmdlet




Monday, September 9, 2013

Script to find files in size greater than desired size

Very useful when you need to find large size files on your system. This command can be run locally or on remote system as long as you have admin rights to remote system.


Get-ChildItem \\servername\c$ -Recurse -ErrorAction "SilentlyContinue" | Where-Object {$_.Length -gt 100MB} | Export-Csv c:\temp\myLargeFilesOnC_Report1.csv

Monday, September 2, 2013

Gracefully shutdown VM using PowerCLI

This is very useful for me when I need to power off my lab at home (trying to conserver energy) :)

Prerequisites for this to work is that you have PowerCLI installed on your computer as well as vm tools installed on all vm's that you would like to utilize this on

Power off single machine:

get-vm vm-name | ShutdownVMGuest

Power off group of machines:

Create a text file with list of vm's you would like to shut down with each vm in separate line such as
vm1
vm2
vm3
Let say this file is called servers.txt and is located in c:\users\mike\desktop
First we will create variable to load servers from text files:
$servers = Get-Content -Path c:\users\mike\desktop\servers.txt
second we will use previous command to shut down group of servers in the file:
get-vm $servers | Shutdown-VMGuest

Turn on group of machines: (This please be careful with as if you try to turn on too many machines at one time you could potentially overload your ESX box)

Start-VM -VM $servers

Tuesday, August 13, 2013

Query interface information on remote machines

I found a nice script for this task that can be found by following link:
Scrip Source

The powershell command to run in order to query list of computers from text file list would be as follows:
$computers = Get-Content -Path c:\scripts\servers.txt
.\getipinfo.ps1 -ComputerName $computers | ft -AutoSize


This is the actual script:
[cmdletbinding()]
param (
[parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
    [string[]]$ComputerName = $env:computername
)           

begin {}
process {
foreach ($Computer in $ComputerName) {
  if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) {
   $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $Computer | ? {$_.IPEnabled}
   foreach ($Network in $Networks) {
    $IPAddress  = $Network.IpAddress[0]
    $SubnetMask  = $Network.IPSubnet[0]
    $DefaultGateway = $Network.DefaultIPGateway
    $DNSServers  = $Network.DNSServerSearchOrder
    $IsDHCPEnabled = $false
    If($network.DHCPEnabled) {
     $IsDHCPEnabled = $true
    }
    $MACAddress  = $Network.MACAddress
    $OutputObj  = New-Object -Type PSObject
    $OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()
    $OutputObj | Add-Member -MemberType NoteProperty -Name IPAddress -Value $IPAddress
    $OutputObj | Add-Member -MemberType NoteProperty -Name SubnetMask -Value $SubnetMask
    $OutputObj | Add-Member -MemberType NoteProperty -Name Gateway -Value $DefaultGateway
    $OutputObj | Add-Member -MemberType NoteProperty -Name IsDHCPEnabled -Value $IsDHCPEnabled
    $OutputObj | Add-Member -MemberType NoteProperty -Name DNSServers -Value $DNSServers
    $OutputObj | Add-Member -MemberType NoteProperty -Name MACAddress -Value $MACAddress
    $OutputObj
   }
  }
}
}           

end {}

Controll Exchange 2010 mail delivery using cost and hub site

Set-ADSiteLink, this command would be very useful in cases where one wants to favor one site  for queuing  over another. The lower the cost more likely site will be used. Keep in mind that direct delivery is always attempted first and only if it fails site cost is used to queue messages in a different hub server in different site.

Set-ADSiteLink -Identity fromtositelink -ExchangeCost 5

Set-AdSite is a command that is used to enable particular hub in site to force all email to pass through it.

ENABLE:
Set-AdSite -Identity 'sitename' -HubSiteEnabled $true

DISABLE:
Set-AdSite -Identity 'sitename' -HubSiteEnabled $false

Modifying exchange 2010 receive connector using EMS

To modify existing receive connector by adding banner message and increasing size of messages allowed Set-ReceiveConnector command is used

Set-ReceiveConnector -Name 'Name of existing receive connector' -Banner '220 Custom application connector' -MaxMessageSize '20MB'

Creating exchange 2010 receive connector using EMS

Following command creates a connector to accept messages only from internal application server with IP 192.168.1.100

New-ReceiveConnector -Name 'New Receive Connector Name' -Usage Custom - bindings 0.0.0.0:25 -RemoteIPRanges '192.168.1.100' -Server 'Server Name' -AuthMechanism 'None'

Modifying exchange 2010 send connector using EMS


This command would enable protocol logging and increase message size to 20MB.


Set-SendConnector -Name 'Name of the connector' -ProtocolLoggingLevel 'Verbose' -MaxMessageSize '20MB'

Tuesday, February 5, 2013

Some usefull powershell commands for fixing content index state when failed

Set content index state of particular database in PS:
Set-MailboxDatabase -identity -indexenabled $true

List databases with content index in failed state:
Get-MailboxDatabaseCopyStatus -Server   | ? {$_.contentindexstate -eq "failed"}

Reset search index for particular database ( need to be in script directory - C:\Program Files\Microsoft\Exchange Server\Scripts):
.\ResetSearchIndex.ps1 -force

Update replication of catalog only on database:
Update-MailboxDatabaseCopy -identity \ -CatalogOnly

Update catalog index state only on all failed databases:
Get-MailboxDatabaseCopyStatus -Server em-bk-exmb01  | ? {$_.contentindexstate -eq "failed"} | update-mailboxdatabasecopy -catalogonly

Friday, April 27, 2012

Whitelist in Exchange 2010

Pwershell commands for whitelisting in exchange 2010:
Check what is currently whitelisted -
Get-ContentFilterConfig
Whitelist a single email address -
$list = (Get-ContentFilterConfig).BypassedSenders
$list.add("new.mail@address.com")
Set-ContentFilterConfig -BypassedSenders $list
Whitelist entire domain -
$list = (Get-ContentFilterConfig).BypassedSenderDomains
$list.add("domain.com")
Set-ContentFilterConfig -BypassedSenderDomains $list