Skip to main content

Posts

Showing posts from June, 2016

Create a Scheduled Job that Deletes Itself

In last week’s PowerShell class, we had a question about not only running a scheduled job, but how to unregister it after it finishes.  Good question.  The answer is actually very simple. The code below is a very simple job.  The problem with it is that after it executes, it will stay in memory until you unregister it. $Trigger = New-ScheduledTaskTrigger -Once -At ( Get-Date ) . AddMinutes( 1 ) Register-ScheduledJob -Trigger $Trigger `                       -Name "Test1" `                       -ScriptBlock { Get-CimInstance -ClassName Win32_Bios } In the Task Scheduler, we can see that the job completed, but it still in memory. The cmdlet Unregister-ScheduledJob must be run to remove this object from memory. PS C:\> Unregister-ScheduledJob -Name Test1 Now we will re-code the script to automatically remove the job after it completes. $Trigger = New-ScheduledTaskTrigger -Once -At ( Get-Date ) . AddMinutes( 1 ) Re

How to close a selected instance of Internet Explorer

Yesterday in my PowerShell class we were doing a lab on object enumeration.  I took a few minutes to take a look at the forums on PowerShell.com and found a question that related directly to our lab content.  Here is the scenario. This individual needed to close an instance of Internet Explorer.  The problem is that there were multiple instances open.  He needed a way to select a specific instance.  Using the Get-Process cmdlet, you can grab each instance, but the process object does not contain anything useful to isolate a particular instance. So I tried a different approached. I opened an IE instance and went to PowerShell.com.  I then executed the code below. ( New-Object -COM "Shell.Application" ) . Windows() |     Where-Object LocationName -like "PowerShell*" Here is the result. Application          : System.__ComObject Parent               : System.__ComObject Container            : Document             : mshtml.HTMLDocumentCla

Don’t use PING!

One of the questions that I often get is “How do I know if a client is online?” Traditionally we would PING the client.  PowerShell has a cmdlet called Test-Connection.  It essentially is the PING command, but gives you an object as the output. Let’s see the difference. PS C:\> Ping 8.8.8.8 Pinging 8.8.8.8 with 32 bytes of data: Reply from 8.8.8.8: bytes=32 time=19ms TTL=56 Reply from 8.8.8.8: bytes=32 time=20ms TTL=56 Reply from 8.8.8.8: bytes=32 time=20ms TTL=56 Reply from 8.8.8.8: bytes=32 time=20ms TTL=56 Ping statistics for 8.8.8.8:     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:     Minimum = 19ms, Maximum = 20ms, Average = 19ms This is what most IT Pros are seeing.  Let’s try to use this information. As always, we need to see what properties are available to us to use. PS C:\> Ping 8.8.8.8 | GM    TypeName: System.String Name             MemberType            Definition