≡ Menu

PowerShell: Convert your VB scripts to PowerShell

The popularity of PowerShell is increasing day-to-day and now every System administrator want to say bye to their VB scripts and enter the powerful powershell world. A system administrator who is familiar with VB script(or has in home grown scripts in VB) want to try powershell, the first question he gets into mind is, “how to do xyz task in powershell”. Of course, we can ask our big brother google.com but it will take little long to find the powershell way of coding a task.

For those kind of admins, MS has published a long list of converting xyz from VB script to PowerShell. This pretty much enough for a person who wants to convert their VB scripts into powershell code. For your easy reference I am posting the content from MS technet site to here.

Hope this helps…

Cmdlets and Add-ons
Converting Dictionary Object to Windows PowerShell Commands
Converting VBScript Commands to Windows PowerShell Commands
Converting VBScript’s Abs Function
Converting VBScript’s Addition Operator
Converting VBScript’s And Operator
Converting VBScript’s Array Function
Converting VBScript’s Asc Function
Converting VBScript’s Assignment Operator
Converting VBScript’s Atn Function
Converting VBScript’s CBool Function
Converting VBScript’s CByte Function
Converting VBScript’s CCur Function
Converting VBScript’s CDate Function
Converting VBScript’s CDbl Function
Converting VBScript’s CInt Function
Converting VBScript’s CLng Function
Converting VBScript’s CSng Function
Converting VBScript’s CStr Function
Converting VBScript’s Call Statement
Converting VBScript’s Chr Function
Converting VBScript’s Class Statement
Converting VBScript’s Clear Method
Converting VBScript’s Concatenation Operator
Converting VBScript’s Const Statement
Converting VBScript’s Cos Function
Converting VBScript’s CreateObject Function
Converting VBScript’s Date Function
Converting VBScript’s DateAdd Function
Converting VBScript’s DateDiff Function
Converting VBScript’s DatePart Function
Converting VBScript’s DateSerial Function
Converting VBScript’s DateValue Function
Converting VBScript’s Day Function
Converting VBScript’s Dim Statement
Converting VBScript’s Division Operator
Converting VBScript’s Do…Loop Statement
Converting VBScript’s Eqv Operator
Converting VBScript’s Erase Statement
Converting VBScript’s Err Object Description Property
Converting VBScript’s Err Object HelpContext Property
Converting VBScript’s Err Object HelpFile Property
Converting VBScript’s Err Object Number Property
Converting VBScript’s Err Object Source Property
Converting VBScript’s Escape Function
Converting VBScript’s Eval Function
Converting VBScript’s Execute Statement
Converting VBScript’s ExecuteGlobal Statement
Converting VBScript’s Exit Statement
Converting VBScript’s Exp Function
Converting VBScript’s Exponentiation Operator
Converting VBScript’s Filter Function
Converting VBScript’s Fix Function
Converting VBScript’s For Each…Next Statement
Converting VBScript’s For…Next Statement
Converting VBScript’s FormatCurrency Function
Converting VBScript’s FormatDateTime Function
Converting VBScript’s FormatNumber Function
Converting VBScript’s FormatPercent Function
Converting VBScript’s Function Statement
Converting VBScript’s GetLocale Function
Converting VBScript’s GetObject Function
Converting VBScript’s GetRef Function
Converting VBScript’s Hex Function
Converting VBScript’s Hour Function
Converting VBScript’s If…Then…Else Statement
Converting VBScript’s Imp Operator
Converting VBScript’s InStr Function
Converting VBScript’s InStrRev Function
Converting VBScript’s InputBox Function
Converting VBScript’s Int Function
Converting VBScript’s Integer Division Operator
Converting VBScript’s Is Operator
Converting VBScript’s IsArray Function
Converting VBScript’s IsDate Function
Converting VBScript’s IsEmpty Function
Converting VBScript’s IsNull Function
Converting VBScript’s IsNumeric Function
Converting VBScript’s IsObject Function
Converting VBScript’s Join Function
Converting VBScript’s LBound Function
Converting VBScript’s LCase Function
Converting VBScript’s LTrim Function
Converting VBScript’s Left Function
Converting VBScript’s Len Function
Converting VBScript’s LoadPicture Function
Converting VBScript’s Log Function
Converting VBScript’s Mid Function
Converting VBScript’s Minute Function
Converting VBScript’s Mod Operator
Converting VBScript’s Month Function
Converting VBScript’s MonthName Function
Converting VBScript’s MsgBox Function
Converting VBScript’s Multiplication Operator
Converting VBScript’s Not Operator
Converting VBScript’s Now Function
Converting VBScript’s Oct Function
Converting VBScript’s On Error Statement
Converting VBScript’s Option Explicit Statement
Converting VBScript’s Or Operator
Converting VBScript’s Property Get Statement
Converting VBScript’s Property Let Statement
Converting VBScript’s Property Set Statement
Converting VBScript’s Public Statement
Converting VBScript’s RGB Function
Converting VBScript’s RTrim Function
Converting VBScript’s Raise Method
Converting VBScript’s Randomize Statement
Converting VBScript’s ReDim Statement
Converting VBScript’s Rem Statement
Converting VBScript’s Replace Function
Converting VBScript’s Right Function
Converting VBScript’s Rnd Function
Converting VBScript’s Round Function
Converting VBScript’s ScriptEngine Function
Converting VBScript’s ScriptEngineBuildVersion Function
Converting VBScript’s ScriptEngineMajorVersion Function
Converting VBScript’s ScriptEngineMinorVersion Function
Converting VBScript’s Second Function
Converting VBScript’s Select Case Statement
Converting VBScript’s Set Statement
Converting VBScript’s SetLocale Function
Converting VBScript’s Sgn Function
Converting VBScript’s Sin Function
Converting VBScript’s Space Function
Converting VBScript’s Split Function
Converting VBScript’s Sqr Function
Converting VBScript’s Stop Statement
Converting VBScript’s StrComp Function
Converting VBScript’s StrReverse Function
Converting VBScript’s String Function
Converting VBScript’s Sub Statement
Converting VBScript’s Subtraction Operator
Converting VBScript’s Tan Function
Converting VBScript’s Tan Function
Converting VBScript’s Time Function
Converting VBScript’s TimeSerial Function
Converting VBScript’s TimeValue Function
Converting VBScript’s Timer Function
Converting VBScript’s Trim Function
Converting VBScript’s TypeName Function
Converting VBScript’s UBound Function
Converting VBScript’s UCase Function
Converting VBScript’s Unescape Function
Converting VBScript’s Vartype Function
Converting VBScript’s Weekday Function
Converting VBScript’s WeekdayName Function
Converting VBScript’s While…Wend Statement
Converting VBScript’s With Statement
Converting VBScript’s Xor Operator
Converting VBScript’s Year Function
Converting Windows Script Host Methods to Windows PowerShell Commands
Converting the Dictionary Object’s Add Method
Converting the Dictionary Object’s CompareMode Property
Converting the Dictionary Object’s Exists Method
Converting the Dictionary Object’s Item Property
Converting the Dictionary Object’s Items Method
Converting the Dictionary Object’s Key Property
Converting the Dictionary Object’s Keys Method
Converting the Dictionary Object’s Remove Method
Converting the Dictionary Object’s RemoveAll Method
Converting the FileSystemObject to Windows PowerShell Commands
Converting the FileSystemObject’s Add Method
Converting the FileSystemObject’s AtEndOfLine Property
Converting the FileSystemObject’s AtEndOfStream Property
Converting the FileSystemObject’s AvailableSpace Property
Converting the FileSystemObject’s BuildPath Method
Converting the FileSystemObject’s Close Method
Converting the FileSystemObject’s Column Property
Converting the FileSystemObject’s Copy Method
Converting the FileSystemObject’s CopyFile Method
Converting the FileSystemObject’s CopyFolder Method
Converting the FileSystemObject’s CreateFolder Method
Converting the FileSystemObject’s CreateTextFile Method
Converting the FileSystemObject’s DateCreated Property
Converting the FileSystemObject’s DateLastAccessed Property
Converting the FileSystemObject’s DateLastModified Property
Converting the FileSystemObject’s Delete Method
Converting the FileSystemObject’s DeleteFile Method
Converting the FileSystemObject’s DeleteFolder Method
Converting the FileSystemObject’s Drive Property
Converting the FileSystemObject’s DriveExists Method
Converting the FileSystemObject’s DriveLetter Property
Converting the FileSystemObject’s DriveType Property
Converting the FileSystemObject’s Drives Property
Converting the FileSystemObject’s FileExists Method
Converting the FileSystemObject’s FileSystem Property
Converting the FileSystemObject’s Files Property
Converting the FileSystemObject’s FolderExists Method
Converting the FileSystemObject’s FreeSpace Property
Converting the FileSystemObject’s GetAbsolutePathName Method
Converting the FileSystemObject’s GetBaseName Method
Converting the FileSystemObject’s GetDrive Method
Converting the FileSystemObject’s GetDriveName Method
Converting the FileSystemObject’s GetExtensionName Method
Converting the FileSystemObject’s GetFile Method
Converting the FileSystemObject’s GetFileName Method
Converting the FileSystemObject’s GetFileVersion Method
Converting the FileSystemObject’s GetFolder Method
Converting the FileSystemObject’s GetParentFolderName Method
Converting the FileSystemObject’s GetSpecialFolder Method
Converting the FileSystemObject’s GetStandardStream Method
Converting the FileSystemObject’s GetTempName Method
Converting the FileSystemObject’s IsReady Property
Converting the FileSystemObject’s IsRootFolder Property
Converting the FileSystemObject’s Line Property
Converting the FileSystemObject’s Move Method
Converting the FileSystemObject’s MoveFile Method
Converting the FileSystemObject’s MoveFolder Method
Converting the FileSystemObject’s Name Property
Converting the FileSystemObject’s OpenAsTextStream Method
Converting the FileSystemObject’s OpenTextFile Method
Converting the FileSystemObject’s ParentFolder Property
Converting the FileSystemObject’s Path Property
Converting the FileSystemObject’s Read Method
Converting the FileSystemObject’s ReadAll Method
Converting the FileSystemObject’s ReadLine Method
Converting the FileSystemObject’s RootFolder Property
Converting the FileSystemObject’s SerialNumber Property
Converting the FileSystemObject’s ShareName Property
Converting the FileSystemObject’s ShortName Property
Converting the FileSystemObject’s ShortPath Property
Converting the FileSystemObject’s Size Property
Converting the FileSystemObject’s Skip Method
Converting the FileSystemObject’s SkipLine Method
Converting the FileSystemObject’s SubFolders Property
Converting the FileSystemObject’s TotalSize Property
Converting the FileSystemObject’s Type Property
Converting the FileSystemObject’s VolumeName Property
Converting the FileSystemObject’s Write Method
Converting the FileSystemObject’s WriteBlankLines Method
Converting the FileSystemObject’s WriteLine Method
Converting the Windows Script Host AddWindowsPrinterConnection Method
Converting the Windows Script Host AppActivate Method
Converting the Windows Script Host Close Method
Converting the Windows Script Host ConnectObject Method
Converting the Windows Script Host Count Method
Converting the Windows Script Host CreateObject Method
Converting the Windows Script Host DisconnectObject Method
Converting the Windows Script Host Echo Method
Converting the Windows Script Host EnumNetworkDrives Method
Converting the Windows Script Host EnumPrinterConnections Method
Converting the Windows Script Host Exec Method
Converting the Windows Script Host Execute Method
Converting the Windows Script Host Exists Method
Converting the Windows Script Host ExpandEnvironmentStrings Method
Converting the Windows Script Host GetObject Method
Converting the Windows Script Host GetResource Method
Converting the Windows Script Host LogEvent Method
Converting the Windows Script Host MapNetworkDrive Method
Converting the Windows Script Host Popup Method
Converting the Windows Script Host Quit Method
Converting the Windows Script Host Read Method
Converting the Windows Script Host ReadAll Method
Converting the Windows Script Host ReadLine Method
Converting the Windows Script Host RegDelete Method
Converting the Windows Script Host RegRead Method
Converting the Windows Script Host RegWrite Method
Converting the Windows Script Host Remove Method
Converting the Windows Script Host RemoveNetworkDrive Method
Converting the Windows Script Host RemovePrinterConnection Method
Converting the Windows Script Host Run Method
Converting the Windows Script Host Save Method
Converting the Windows Script Host SendKeys Method
Converting the Windows Script Host SetDefaultPrinter Method
Converting the Windows Script Host ShowUsage Method
Converting the Windows Script Host SignFile Method
Converting the Windows Script Host Skip Method
Converting the Windows Script Host SkipLine Method
Converting the Windows Script Host Sleep Method
Converting the Windows Script Host Terminate Method
Converting the Windows Script Host VerifyFile Method
Converting the Windows Script Host Write Method
Converting the Windows Script Host WriteBlankLines Method
Converting the Windows Script Host WriteLine Method
Introduction to Windows PowerShell Transactions
Introduction to Windows PowerShell 2.0 CTP v2
Join the Social
Remoting Quoting
Script Editors
Searching Active Directory with Windows PowerShell
Select-String Cmdlet Updates
Specops Command
The Get-Random Cmdlet
The Out-GridView Cmdlet: Displaying Information in a Data Grid
The Out-Gridview Cmdlet: Filter With Out-GridView
The Set-StrictMode Cmdlet
The Windows PowerShell Debugger
WMI Enhancements in Windows PowerShell 2.0 CTP
WMI Event Monitoring
Workflow Studio
{ 0 comments }

Originating DC means the Domain controller on which the object is created first. From the originating DC, the changes will replicate to other DCs in the domain. Some times this information is useful/crucial to know where exactly the object is created. This helps is troubleshooting AD replication related issues and sometimes in forensic investigation.

When ever a object is created in active directory, it stores the originating DC name in the meta data of that object. Meta data is something which we can not see from the general AD management tools like dsa.msc or adssite.msc. To view meta data, either we need to use repadmin or the dotnet object. You all know how to use repadmin so in this post I will give you a powershell script which displays the metadata of a given object.

$Domain = "techibee.com"
$objectDN = "cn=user1,cn=users,dc=techibee,dc=com"
$context = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext("Domain",$domain)
$dc = [System.DirectoryServices.ActiveDirectory.DomainController]::findOne($context)
$meta = $dc.GetReplicationMetadata($objectDN)
$meta.values

The above script takes two arguments, domain name and object DN and lists all the attributes and their originating DC names. Hope this helps…

 

{ 2 comments }

PowerShell: How to get list of mapped drives

Mapped drives are the shares on remote computers for which you assigned a drive letter for easier access. We can query these drives and the target shares behind them with a simple and easy powershell one liner.

Here is the tip of the day. Happy Learning.

 

Get-WmiObject -Class Win32_MappedLogicalDisk | select Name, ProviderName

 

{ 8 comments }

Best tools for Scheduling maintenance mode in SCOM

If you have worked on SCOM extensively, I am sure you would have already realized about one of the important features that SCOM administrators expect, that is “Scheduling maintenance mode”. That means, one should be able to define at what time a server should enter maintenance mode on daily, weekly, monthly, yearly, run-once basis. Unfortunately, there is no such option in UI.

Couple of days back I was hit with same requirement. A few services on a server are expected to go down for maintenance performed by the application installed on the server. It brings back the services once its activity is completed which never exceeds 30 minutes. These services are CRITICAL for reset of day and not during the time when application is performing the shutdown/startup activity. Initially, I thought I can create a schedule and keep the server in maintenance mode for that 30 minutes daily but I was disappointed after seeing no such option in maintenance mode wizard.

I felt this is a kind of basic requirement for a System administrator to schedule a servers maintenance mode. It helps during scheduled patch reboots and application maintenances.

So, I started looking for the options to fulfill this purpose. After some research ended up with only two options.

  • #1: A third party powershell based tool that helps you schedule the maintenances:

The tool name is “SCOM Remote Maintenance Mode Scheduler“. It seems popular tool in internet for scheduling the maintenance mode since many people suggested this when I posted the requirement in technet forum. I read the documentation of it and per my understanding it has DotNet based GUI application which takes inputs from you and creates a scheduled task which inturn executes the powershell scripts that keeps the given computer(s) in maintenance at given schedule. I really like this idea and but felt something which is integrated with SCOM is more useful. The author of this tool has produced some more useful tools for SCOM world. Don’t miss to check them when you visit the site.

  • #2: A MS given facility to schedule the maintenance:

After some more research, I came across “System Center Operations Manager 2007 R2 Admin ResKit which has utility to schedule the maintenance mode. And the plus point with this is, it integrates with SCOM server. That means, you can see all the schedules by connecting to SCOM server and manage them. This is what exactly I needed. After exploring this further, I was bit disappointed because of it’s buggy behavior. It is giving too many dotnet errors and some of the menues in the application are some times not responding because of these errors. I couldn’t explore this tool completely due to these continuous dotnet errors which keeps popping up every time you click something on the utility.

I didn’t expect such buggy product from Microsoft for it’s own baby(SCOM). I wish they will hear this feedback and make it work lazy admins like me. I tried both x64 and x86 versions of the tool and their behavior is same.

So we don’t any other option than leaning towards the first utility if we really want to schedule some maintenance windows.

Hope this analysis helps.

{ 4 comments }

You might see the error message outlined in subject while installing/uninstalling software on windows 2003 computer by connecting to terminal services. We all know that application installation has certain limitations when it comes to terminal services (anyone know why?). In such cases if you still want to install/uninstall the application on these terminal services enabled servers, you need to choose one of the following methods.

If this the requirement is just one of the case, then option#1 best suits you.

Option#1:

start mstsc with /console or /admin option and then connect to the server. This allows you to connect to the console of the server directly eliminating terminal services piece from you way.

Go to start -> Run -> type “mstsc /admin /v:servername” and click OK if you are using RDP client v6 or above

Go to start ->Run -> type “mstsc /console /v:servername” and click OK if you are using legacy version of RDP client.

Option#2:

If your administrators are expected to install applications on servers by connecting via terminal services, then you need to make sure that application installation is allowed. You can do it via group policies.

“computer configuration” -> “administrative templates” -> “windows components” -> “windows installer” -> “allow admin to install from terminal server session” should be enabled

Hope this helps.

{ 0 comments }

PowerShell: Get network adapter connection status

This powershell function helps you to get the network status of all network adapters in a given computer. Using this script it is easy to determine the status of all network connections in remote computer to see whether it is connected/disconnected/media disconnected/and different other statuses. This script queries Win32_NetworkAdapter WMI class for list of network adapters and then fetches the status of each adapter by querying “netconnectionstatus” parameter. This is a uint16 data type which returns any value ranging from 0-12. Each value from 0 to 12 has it’s own meaning. See the below table for details(source: MSDN)

Value Meaning
0 (0x0)
Disconnected
1 (0x1)
Connecting
2 (0x2)
Connected
3 (0x3)
Disconnecting
4 (0x4)
Hardware not present
5 (0x5)
Hardware disabled
6 (0x6)
Hardware malfunction
7 (0x7)
Media disconnected
8 (0x8)
Authenticating
9 (0x9)
Authentication succeeded
10 (0xA)
Authentication failed
11 (0xB)
Invalid address
12 (0xC)
Credentials required

So, here is the script which lists the network adapter name and its status.

Script:

function Get-NetworkConnectionStatus {
param(
$ComputerName=$env:computername
)
$statushash = @{
0 = "Disconnected"
1 = "Connecting"
2 = "Connected"
3 = "Disconnecting"
4 = "Hardware not present"
5 = "Hardware disabled"
6 = "Hardware malfunction"
7 = "Media Disconnected"
8 = "Authenticating"
9 = "Authentication Succeeded"
10 = "Authentication Failed"
11 = "Invalid Address"
12 = "Credentials Required"
}
$networks = Gwmi -Class Win32_NetworkAdapter -ComputerName $computername
$networkName = @{name="NetworkName";Expression={$_.Name}}
$networkStatus = @{name="Networkstatus";Expression=` 
{$statushash[[int32]$($_.NetConnectionStatus)]}}
foreach ($network in $networks) {
  $network | select $networkName, $Networkstatus
  }
}

Usage:

Get-NetworkConnectionStatus -ComputerName PC1

Hope this helps…

{ 2 comments }

Yesterday I got a requirement to verify if a given list of folders are replicated to new installed PF server or not. I added the new sever to replica list of required PF folders and now I need to verfiy if the replication is completed so that I can remove the old PF server from the replica list.

Either Exchange management console or the exfolder util(utility to manage PF replicas and permissions) is not having the option to verify the replication status. Exfolder.exe is helpful to some extent as it is showing the list of items in that PF so that I can compare and confirm that all mails are replicated. I can do this for folders which has less number of items, but if the folder has more number of emails, then it is not a ideal way of doing it.

After researching for time, I found the way that solves my problem. The “Get-PublicfolderStatistics” cmdlet is the right choice here. I used this and generated the email items count in a PF from a particular PF server. After that ran two queries (listed below) and directed the output to a file for comprison. I tried to assign the output of each command to a variable and tried to compare-object cmdlet to compare the contents of both the output variables, but it didn’t work as exepcted for some weird reason. Let me know if it works for you.

Get-PublicFolderStatistics -Server PFServer1            
Get-PublicFolderStatistics -Server PFServer2

Hope this helps…

 

{ 5 comments }

Are you trying to create your own Management pack for custom needs? Then, you should read “SCOM MP Authoring Guide” to kick start. This gives you some deep insight into classes, relations,, discovery, discovery targets, discovery relations, discovery scripts(basically helps you create custom discoveries), different types of monitors(event, script, service, health, performance, unit, etc), different types of rules(event, collection), tasks, etc. It also helps you to understand how to perform tasks like groups creation, monitor/rules creations, etc.

You can also down full SCOM 2007 R2 documentation from here

Happy SCOMing.

 

{ 0 comments }

PowerShell: Converting String into a char array

I have seen hits from people coming to my blog with query string “converting string to a char array”. I don’t a post which shows how to do this but a similar post(https://techibee.com/powershell/know-about-ofs-a-special-variable-in-powershell/794) in my blog is catching these hits. Since many peopel are looking for this, I felt I should write one.

Converting a string into a character array is very straight forward. For example, take a string $website=”techibee.com”. Here $website is a string and if you want to convert this into a array of characters each letter fitting into one item in array, then just use [char[]]$website and you are done. You can go through the below little script for demonstration.

[string]$website = “TechiBee.com”

$chararray = [char[]]$website

write-host $chararray

#You can pick the element you want by passing the number to array index

write-host $chararray[2]

#You can also see what type of object $chararray is by invoking below command

$chararray.gettype()

Hope this little script helps you..

 

{ 1 comment }

We all know that it is easy to get date time using powershell. It is as simple as

$currenttime = Get-date

write-host $currenttime

But the real challenge comes when you want the variable to hold current time whenever we query it. In the above example if you query the value of $currenttime it will show the time when it got the value from get-date. That means it is just holding one instance which is not valid if you want it to hold always currect time.

Today I came across a little PS tip which helps us to do this. That means we can have a dynamic variable which always returns the latest time when queries.

$global:currenttime= Set-PSBreakpoint -Variable currenttime -Mode Read -Action { $global:currenttime= Get-Date }

write-host $currenttime

start-sleep 5

write-host $currenttime

start-sleep 5

write-host $currenttime

 

After executing the above code, you will see output similar to this.

Hope this little tip helps you…

{ 3 comments }