Backtrack:  
 
showing posts tagged with 'powershell'
1 · 2
 
by lunarg on September 21st 2015, at 12:40

This one-liner will output a list of installed programs, similar to what you get when looking it up through Control Panel → Add/Remove Programs.

Get-WmiObject -Class Win32_Product | Select-Object -Property Name

The advantage of this cmdlet is that you can dump it to a text file:

Get-WmiObject -Class Win32_Product | Select-Object -Property Name > Software.txt

And through PS remoting, you can also run this on remote systems.

by lunarg on September 21st 2015, at 12:31

You can easily perform 'diff' style text comparisons with Powershell:

Compare-Object -ReferenceObject (Get-Content file1.txt) -DifferenceObject (Get-Content file2.txt)
by lunarg on September 15th 2015, at 15:56
Rather than installing the Exchange 2013 management tools, you could also connect to the Exchange Management Shell (EMS) through Powershell "remoting".

Connect to EMS using the current credentials (i.e. the user running Powershell):

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchange-server-fqdn/PowerShell -Authentication KerberosImport-PSSession $session

Replace exchange-server-fqdn with the FQDN or IP address of the Exchange server you wish to connect to. With this command, you will be using the credentials of the current logged in user, and authenticate through Kerberos. If the user is not a organizational admin, you will be able to l  ...
by lunarg on September 11th 2015, at 10:39
This is a very crude script to defrag (using eseutil) Exchange mailbox databases.

The script takes the database name as a mandatory parameter. It then dismounts the database, checks whether the database state has been shutdown cleanly, performs the defrag, verifies the state again, and finally, mounts it again.

Note that this is an offline process. The specified mailbox database will be offline, meaning that all mailboxes in the database will not be accessible until the process has been completed.

Use with caution!
This script has not been tested extensively and does not account for everything that can go wrong. I merely provide it as a good starting point to extend the script to somethin  ...
by lunarg on September 11th 2015, at 10:32

You can redirect the output of a Powershell script to a file. This is called transcribing, and is very useful if you have some Powershell scripts as scheduled tasks and wish to log its output.

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -Path "C:\transcript.log" -Append
#
# My script code goes here...
#
Stop-Transcript
by lunarg on August 31st 2015, at 12:10
To reclaim space in virtual environments and thin provisioned storage facilities, SDelete from SysInternals is probably the most used tool on Windows to clear out unused space of a volume, allowing the SAN to release these data blocks back to the storage pool.

But while SDelete is robust, it has a few (minor) limitations:

It cannot handle mount points, only logical drives (i.e. volumes mounted on a logical drive letter).

It is rather slow on very large file systems.

I found an alternative online in the form of a Powershell script at this thread, written by David Tan, who in turn based it on a script found here.

The script creates an empty ("zeroed") 1 GB file and copies that f  ...
by lunarg on August 31st 2015, at 11:45
Powershell can also handle queries through WMI, allowing you retrieve all kinds of system information from local and remote systems running Windows. This also includes information about volumes, logical drives and shares.

For this to work on remote systems, you need to have Remote Management enabled. Starting from Server 2012, this is already enabled by default.

The commands use the Get-WmiObject cmdlet to retrieve the information. If no computer name is specified, the information will be retrieved from the system running the cmdlet. In order to connect to a remote system, run the cmdlet while specifying the computer name of the remote host with the -ComputerName parameter.

For example, t  ...
by lunarg on August 26th 2015, at 10:38
Exchange 2013 has several performance counters running by default. While this is useful for diagnostic purposes, it also can take up a lot of disk space (can go over 1 GB a day). You can use Powershell to clear out older performance logs.

gci 'S:ExchangeLoggingDiagnosticsDailyPerformanceLogs','S:ExchangeLoggingDiagnosticsPerformanceLogsToBeProcessed' | gci -Include '*.log','*.blg' -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-7) | Remove-Item

Replace the paths to the daily performance logs and performance logs to be processed. You can also adjust the number of days it needs to keep (in the example, it's 1 week). In the example, we remove the files, but you could just as easily move th  ...
by lunarg on August 21st 2015, at 11:06

You can mail-enable multiple accounts with a single Powershell command. Look below for some examples:

Mail-enable AD accounts whose first name is John:

Get-ADUser -Filter * | Where {$_.GivenName -like "John"} | ForEach-Object { Enable-Mailbox -Identity $_.DistinguishedName }

Mail-enable all accounts in an OU called Engineering:

Get-ADUser -Filter * -SearchBase "OU=Engineering,DC=contoso,DC=local" | ForEach-Object { Enable-Mailbox -Identity $_.DistinguishedName }
by lunarg on August 17th 2015, at 10:10

Easily count the number of mailboxes located on an Exchange (mailbox) server with Powershell:

[PS] >Get-Mailbox | Group-Object -Property:ServerName | Select-Object Name,Count

Name                   Count
----                   -----
exchange01                43
exchange02               100
exchange03               252
by lunarg on June 15th 2015, at 11:54
When running multiple scripts in a session, which use and add the same snap-in using Add-PSSnapin, only the first one succeeds. Subsequent attempts to add the same snap-in will result in an error:

Error
Cannot add Windows PowerShell snap-in My.SnapIn because it is already added. Verify the name of the snap-in and try again.

You can resolve this issue by enclosing it in the following if-statement:

if ( (Get-PSSnapin -Name My.SnapIn -ErrorAction SilentlyContinue) -eq $null ){ Add-PsSnapin My.SnapIn}

It (silently) checks the presence of the requested snap-in. If it does not exist (i.e. the check returns $null, then it loads the snap-in.

Note: replace My.SnapIn with whatever snap-in you   ...
by lunarg on June 11th 2015, at 15:09

You can easily convert an Exchange mailbox from one type to another through the Exchange Management Shell.

Set-Mailbox -Identity user.name -Type Regular

There are four types you can use to convert to:

  • Regular (User mailbox);
  • Shared
  • Equipment
  • Room

The Equipment and Room types are used for reservations of meeting rooms and equipment (DLP).

by lunarg on May 26th 2015, at 14:49

By default, it is not possible to specify passwords (the SecureString type) directly as a plain-text cmdlet parameter because it is unsecure to do so (and they are right). But sometimes, there's no other way to run a cmdlet without specifying the password as plain text as a cmdlet parameter. Luckily, there's an easy workaround by performing a conversion from plain text and store the password in a SecureString object.

$pw = ConvertTo-SecureString -String "your-pw" -AsPlainText -Force

You can then use the $pw object to specify the password in a cmdlet.

For example: resetting the password of an AD account:

Set-ADAccountPassword -Identity my-account -NewPassword $pw
by lunarg on March 19th 2015, at 12:39
Using the vSphere (Web) Client, it is only possible to "upgrade" your virtual hardware to the latest version supported by your ESX host. Sometimes, it's necessary to set the hardware version to a specific version, rather than just the latest supported one. This can be done through PowerCLI (for use with vCenter) or ESXi Shell (for free ESXi).

Before you begin, note that you have to power down a VM before you can change the hardware version.

You need VMWare vSphere PowerCLI installed on a computer, and access to a vCenter server (can be appliance or full version for Windows) with the necessary credentials.

Connect to the vSphere server:

$cred = Get-CredentialConnect-VIServer -Se  ...
by lunarg on March 18th 2015, at 13:38
When implementing AD/Dirsync to synchronize your on-premise AD with Office365, you may have to change the UPN-suffix to match the (e-mail) domain name used in your Office365 tenant. Most often, the local UPN-suffix would be something like domain.local, and would then have to be changed to domain.com. With a lot of users, it can quickly become tedious to change this manually. Along came Powershell...

The attached script is an easy way to quickly change the UPN-suffix for all users in a particular OU. Simply adjust the parameters to match your configuration, and let it run. Note that the script runs recursively, so be careful when running this on a top-level OU, as it will cascade through a  ...
by lunarg on March 13th 2015, at 13:08

Since Exchange 2010 SP1, when giving users Full access to another mailbox, they automatically get that mailbox added to their Outlook (2007 and up). This feature is called mailbox auto-mapping, and has made life a little easier for us IT administrators. But sometimes, you do not want a mailbox to be auto-mapped in Outlook for a particular user.

This can be achieved by setting the access permission through Powershell, and including the parameter -AutoMapping:$false in the cmdlet.

Add-MailboxPermission "Shared Mailbox" -User <user> -AccessRights FullAccess -AutoMapping:$false
by lunarg on March 10th 2015, at 16:12
You can easily view message tracking logs through the Exchange Management Shell (EMS). The cmdlet to use is called Get-MessageTrackingLog, and roughly provides the same search queries as before, and to be honest, it's faster than using the GUI in older Exchange versions, once you get to know the syntax. And thanks to the power of Powershell, you have a lot more options about exporting said data (e.g. to CSV).

The basic syntax is as follows:

Get-MessageTrackingLog [-Server <ServerIdentity.] [-ResultSize <Integer> | Unlimited] [-Start <DateTime>] [-End <DateTime>] [-EventId <EventId>] [-InternalMessageId <InternalMessageId>] [-MessageId <MessageId>] [-M  ...
by lunarg on February 17th 2015, at 12:45

Using EMS (Exchange Management Shell), you can quickly retrieve a list of mailboxes not using the default quotas:

Get-Mailbox | Where { $_.UseDatabaseQuotaDefaults -eq $False } | Select Name,UseDatabaseQuotaDefaults,ProhibitSendQuota
by lunarg on November 12th 2014, at 16:45

Technically, you can't set up out-of-office for shared mailboxes through a normal way, because you can't log in with Outlook on those accounts. A workaround would be to temporarily convert it to a regular mailbox, grant a license to it, and then log in with Outlook, but this is not always possible or desired.

Fortunately, you can also enable out-of-office through Powershell on any mailbox, including shared and resource mailboxes.

http://support.microsoft.com/kb/2667296

by lunarg on April 19th 2013, at 10:23
To make your custom cmdlets (functions) available in your PowerShell sessions, there are a few methods.

To do a one-time import of functions in your current session, store the functions in a PS1-file and save it somewhere. Then, in your session run the following:

. "path-to-file"

Notice the dot and a space behind it. This method, called "dotting" does a one-time import in the current session. This is useful for when you have functions that you don't use often, and don't want them to be available at all times.

An alternative method is to save the functions as a PSM1-file (extension .psm1) to create a module file, then use Import-Module to import your functions.

Import  ...
1 · 2
 
showing posts tagged with 'powershell'
 
 
« June 2019»
SunMonTueWedThuFriSat
      1
2345678
9101112131415
16171819202122
23242526272829
30      
 
Links
 
Quote
« You only find out who is swimming naked when the tide goes out. »
Warren Buffett