Review firewall settings such
as access control lists (ACL), or troubleshoot problems with network
address translation (NAT).
Free download try it now!
As you may expect from a top-Notch scripting language, PowerShell supports functions.
There are several advantages of investing time in creating functions. One
benefits of a function is that once you get it working, it's easy to call the commands later in the same script; moreover,
once perfected,
the code works consistently.
Another advantage of functions is that they help organize a long script into manageable chunks.
The task that I have set for our function is to enumerate which services are in each of the generic svchosts processes that you see in Task Manager. Incidentally, the reason for multiple svchosts is that
certain processes 'fight' and thus must be kept separate. The solution is for the operating system to create multiple svchosts; for example, RemoteRegistry cannot co-exist with TermService.
Our mission is to create a function which combines both of the above commands and thus achieves a single list of all the svchosts with their corresponding services.
This is the output of our goal, we want our function called plist to produce this output:
When you declare a function it requires as a minimum: FunctionNname {Block of Work}. The actual work is done by the PowerShell statements between the required {braces}. Functions may include
optional parameters, these are enclosed in (parenthesis) and are introduced after the function's name,
but before it gets to work with the {}.
# Here is the plist function in action
processing the svchost processes: plist svchost* | Format-Table Id, name, service
-autosize
Learning Points from the Function Example
Note 1:
Plist will be a string function and not an integer and is declared thus: function plist([string]$name="*")
Note 2: $Name="*" returns all the names of the objects that get processed.
Note 3: Let us consider the instructions inside the {Braces}, starting with the variable $Svc. What this does is get the wmi win32_service. Here is the command: $Svc = Get-WmiObject win32_service | sort ProcessId | group-Object ProcessId
Note 4: The loop is covered by this While construction, the key is lt (less than): while($i -lt $ps.count -And $j -lt $svc.count)
Note 5: The process name is controlled by: $ps = @(Get-Process $name | sort Id)
Note 6: This is the clever line that appends all the services to each individual svchost $ps[$i]| add-Member NoteProperty service $Svc[$j].group;
SolarWinds Firewall Browser
Here is an utility where you can review firewall settings such as
access control lists (ACL), or troubleshoot problems with network
address translation (NAT).
Other reasons to download this SolarWinds Firewall Browser include
managing requests to change your firewall settings, testing firewall
rules before you go live, and querying settings with the browser's
powerful search options.
It is possible to replace the plist function (above) with more efficient code, nevertheless, remember that the purpose of this page is to introduce PowerShell functions.
Here is the alternative code if you just wish to check the instances of svchost
function plist([string]$a) {
$FormatEnumerationLimit = 100 gwmi win32_service |? {$_.PathName -Match 'svchost' -And $_.ProcessId -ne 0} | group ProcessId | ft
It always amazes my how researching PowerShell increases my knowledge of
other fields, in this instance I discovered that the SVCHOST (s) are
populated by settings in the registry.
Firstly, some possible reasons for turning off System Restore. Perhaps you dealing with an Anti-virus program which is interfering
with the restore process and you need to turn off System Restore while
you deal with other program. Maybe the drive has run out of free
space and you need to stop system restore consuming any more disk space.
At the heart of this example is [WmiClass]"\\$SysName\root\default:systemrestore".
Once we assign it to the variable $SysRestore, we can apply one of two
methods, .Disable("C:\") or .Enable("C:\").
The rest of the script consists of two wrappers, one to switch
between "Enable" and "Disable", the other wrapper is
the function called GuyRestore.
# PowerShell Function Example # Corrected by Jamie Lynch Clear-Host Function GuyRestore { param( $RestoreOpt =
$(throw "Specify option, disable or enable"), $SysName = $(throw
"Specify computer name or IP Address.) ) switch ($RestoreOpt) {
"disable" {$SysRestore = [WmiClass]"\\$SysName\root\default:systemrestore" $SysRestore.Disable("C:\")}
"enable" {$SysRestore = [WmiClass]"\\$SysName\root\default:systemrestore" $SysRestore.Enable("C:\")}
}
}
Note 0: This is one of those PowerShell scripts
where you need to 'Run as Administrator'. Also Restore Points are a feature of
client operating systems such as Windows 7 or Vista, and not servers.
Note 1: The last line puts the function
GuyRestore to work, and disables the system restore on the C:\.
Note 2: Pay close attention to -SysName, your
Windows 7 or Vista machine is unlikely to have an IP address of
192.168.1.166. You could of course use the hostname.
This
Engineer's Toolset v10 provides a comprehensive console of 50 utilities
for troubleshooting computer problems. Guy says it helps me
monitor what's occurring on the network, and each tool teaches me more about how the
underlying system operates.
There are so many good gadgets; it's like having free rein of a
sweetshop. Thankfully the utilities are displayed logically: monitoring,
network discovery, diagnostic, and Cisco tools. Try the SolarWinds Engineer's Toolset now!
To inspect the underlying Windows processes launch the Task Manager.
Now you can click on 'Image Name', then you can sort the processes into
alphabetical order.
Get a Matching Listing with PowerShell's Get-Process
The purpose of this page is to understand how a PowerShell function is constructed. Take it one line at a time. My goal was to break down a complex task into a series of single commands. The
vehicle for our example task was the task manager, specifically, drilling down into the
contents of each SVCHOST process.
If you like this page then please share it with your friends
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.
Windows Management Instrumentation (WMI) is
most useful for PowerShell scripting.
SolarWinds
have produced this
Free WMI Monitor to take the guess work out of which
WMI counters to use for applications like Microsoft Active Directory,
SQL or Exchange Server.