Creating New Objects Efficiently

Most of the time, the bulk of new object is static data, represented by properties. A highly efficient way to create new objects with new properties is converting hash tables to objects – we covered this earlier:

$conf = [PSCustomObject]@{
    Name = 'Tobias'
    Conf = 'psconf.eu'
    Url = 'http://psconf.eu'
}

The result is a simple object with no specific methods at all:

 
PS C:> $conf 

Name   Conf      Url             
----   ----      ---             
Tobias psconf.eu http://psconf.eu
 

To add methods, next you use Add-Member and refine the object. This line adds a new Register() method:

$object | 
  Add-Member -MemberType ScriptMethod -Name Register -Value { Start-Process -FilePath $this.url }

Note how the script block invoked by the Register() method accesses $this: the $this variable represents the object itself, so Register() will continue to work even if you later decide to change the “Url” property..

When you run Register(), the object opens the URL specified in the “Url” property:

 
PS C:> $conf.Register()
 

Twitter This Tip! ReTweet this Tip!

Adding Single Line Comments in PowerShell ISE

In the previous tip we looked at command extensions for the good old PowerShell ISE. Here is another sample that adds the CTRL+K keyboard shortcut to append comments (“#”) to each selected line:

function Invoke-Comment
{
    $file = $psise.CurrentFile                              
    $comment = ($file.Editor.SelectedText -split 'n' | ForEach-Object { "#$_" }) -join "`n"                                                 
    $file.Editor.InsertText($comment)                     
}

$psise.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Comment Out', { Invoke-Comment }, 'CTRL+K')

Twitter This Tip! ReTweet this Tip!

Robot odkurzacz LG VR8601RR

Robot odkurzacz LG VR8601RR

  • Wydajny silnik Smart Inverter
  • Skanuje cały dom
  • Idealny dla alergików

Szczegóły techniczne
Czas operacyjny: do 100 minut
Czas ładowania: 3 godziny
System Dual Eye
Bateria: litowo-jonowa
Pojemność baterii: 2330 mAh 14,4 V
Ładowanie: 17,1 V / 1,1 A/23 W
Automatyczne ładowanie po skończonej pracy
Smart Resume
Zaplanowane czyszczenie
Ilość czujników ultrasonicznych: 4
Czujniki lokalizacji: wizja/żyroskop/Ofs
Wlot: 380 mm (ze szczotkami bocznymi)
Sprzątanie w kątach (10 x 10 cm): 96%
Sprzątanie przy ścianach (1 x 1 m): 93%
Sprzątanie na twardych podłogach: 95%
Sprzątanie na dywanach (bez Smart Turbo): 45%
Filtr: HEPA 11
Poziom głośności: 60 dB (69 dB z Turbo)

Pozostałe informacje
Ilość trybów: 7
Tryb ZigZag
Tryb Cell by Cell
Tryb Spiral
Tryb My Space
Smart Turbo
Powtarzanie sprzątania
Suchy mop
Sprzątanie na dywanach do 1,5 cm
Ilość szczotek: 3
Smart Diagnosis
Automatyczny wyłącznik
Możliwość aktualizacji przez USB

Szczegóły fizyczne
Kolor: czerwony
Wymiary: 340 x 340 x 89 mm
Waga: 3 kg
Wyświetlacz: LED / dotykowy
Wyświetlanie czasu: tak

Dołączone akcesoria
Dodatkowa szczotka obrotowa
Dodatkowy filtr
Dodatkowa szczotka boczna
Akcesoria do czyszczenia

Toggling Comments in PowerShell ISE

The good old PowerShell ISE exposes some expandability connectors. If you’d like to toggle comments in selected text by pressing CTRL+K, for example, try this code:

function Toggle-Comment
{
    $file = $psise.CurrentFile                              
    $text = $file.Editor.SelectedText   
    if ($text.StartsWith("<#")) {
        $comment = $text.Substring(3).TrimEnd("#>") 
    }
    else
    {                            
        $comment = "<#" + $text + "#>"    
    }
    $file.Editor.InsertText($comment)                     
}

$psise.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Toggle Comment', { Toggle-Comment }, 'CTRL+K')

It basically uses $psise to access the ISE object model, and then installs a new menu command with keyboard shortcut CTRL+K that invokes Toggle-Comment.

Add this code to your profile script in $profile (file may not yet exist) to run this code every time PowerShell ISE launches.

Twitter This Tip! ReTweet this Tip!