środa, 30 kwietnia 2014

Restartowanie PowerShell Remoting

Kiedy korzystasz z PSRemoting to pewnie zauważyłeś, że komenda Disable-PSRemoting tak na prawdę nie gasi serwisu i nie usuwa listenerów. Niestety musimy to wykonywać ręcznie. Co prawda przydał by się parametr w poleceniu Disable-PSRemoting.

Poniższy kod wyłącza PSRemoting, serwis i usuwa listenerów:
function Restart-PSRemoting
{
        param(
        [Switch]$restartService,
        [Switch]$removeListeners,
        [Switch]$WhatIf,
        [Switch]$enable,
        [int[]]$listenerPorts=(5985,5986)
        )
        Disable-PSRemoting -Force -WhatIf:$WhatIf

        if($restartService)
        {
            Set-Service winrm -StartupType Manual -WhatIf:$WhatIf
            Stop-Service winrm -WhatIf:$WhatIf
        }

        if($removeListeners)
        {
            gci WSMan:\localhost\Listener -Recurse  | 
            %{ $_.PSPath} | 
            ?{ 
               $port = (gci "$_\port").Value 
               $listenerPorts -contains $port
            }|
            Remove-Item -WhatIf:$WhatIf
        }
        if($enable)
        {
            Enable-PSRemoting -Force -WhatIf:$WhatIf
        }
}

Aby sprawić co zrobi polecenie wystarczy wywołać polecenie z parametrem WhatIF
Restart-PSRemoting -WhatIf -removeListeners -enable -restartService

niedziela, 13 kwietnia 2014

Pamiętaj o aktualizacji pomocy w PS

Dobrą praktyką przy pracy z PowerShellu jest aktualizacja pomocy. Niestety nie zawsze o tym pamiętam :) i dobrze jest dodanie sobie zdarzenia które będzie aktualizowało zadanie. Na samym początku tworzymy trigger, który będzie uruchamiany w piątki wieczorem jak komputer nie będziesz pracował przy komputerze oraz update będzie uruchamiany nawet jak notebook będzie działał na baterie (StartIfOnBattery).
$trigger = New-JobTrigger -Weekly -At "8:00 PM" -DaysOfWeek Friday 
$scheduledOption = New-ScheduledJobOption –StartIfIdle -StartIfOnBattery -RequireNetwork 
Skrypt, który wykonuje update wygląda następująco:
$updateScript = {Update-Help -Module * -Force}
Aby zarejestrować zdarzenie wystarczy wykonać poniższe polecenie
Register-ScheduledJob -Name UpdatePowerShellHelp -Trigger $trigger -ScheduledJobOption $scheduledOption -ScriptBlock $updateScript 
Aby zobaczyć wynik należy przejść do okna z harmonogramem zadań:
start "Taskschd.msc"


Krótko o innowacji w Indiach

Mam takie wrażenie jakbyśmy my (rynek polski, polscy inżynierowie, matematycy na polskiej śmietanie chowani) rywalizowali ze specjalistami z Indii czy z Chin.



Nie jesteśmy lepsi ani gorsi. Każda osoba jest indywidualna. Każda osoba ma swoje umiejętności i zestaw cech.

DNS z cache

Przdstawiam Ci skrypt do pobierania pamięci podręcznej programu rozpoznawania nazw DNS. Dlaczego jest to ważne - spójrz na wpis niebezpiecznika :)

Poniżej jest skrypt, który zwraca Ci wszytkie zapisane w buforze nazwy DNS:
function Get-IPConfigDNS
{
Write-Host "Getting DNS cache info"
$recordNames = ipconfig /displaydns | select-string "Record " #white space on end
    for ($i=0;$i -lt $recordNames.count;$i+=3) 
    {

        $hash= [ordered]@{
          Name=$recordNames[$i].toString().Split(":")[1].Trim()
          Type=($recordNames[$i+1].toString().Split(":")[1].Trim()) -as [int]
          Value=$recordNames[$i+2].toString().Split(":")[1].Trim()
        }
        New-Object -TypeName PSobject -Property $hash
    }
}
Aby uzyskać wszystkie nazwy po prostu wykonaj:
Get-IPConfigDNS | sort name
I pamiętaj, zawsze czyść bufor programu rozpoznawania nazw DNS:
ipconfig /flushdns 

piątek, 11 kwietnia 2014

Dodawanie enuma do PS

Dodawanie enuma do PS nigdy nie było takie proste :)
Skorzystamy z kodu w c#, aby stworzyć taki typ i dodamy do PS:
function Add-Enum
{
    param(
    [ValidateNotNullOrEmpty()]
    [string]$name='Enum1',

    [ValidateNotNullOrEmpty()]
    [array]$members
    )

    $enumJoinMembers = $members -join ', '
    $csharpEnum =   "public enum $name{
        $enumJoinMembers
}"
    Add-Type -TypeDefinition $csharpEnum -Language CSharp
}
Dajmy na to, że chcemy dodać enum, który będzie reprezentował osoby w liczbie pojedynczej. Dodawanie enuma wygląda w następujący sposób:
Add-Enum -name "osoby" -members "ja","ty","on","ona","ono"

I wtedy mamy enum do korzystania:
[osoby]::ja
[osoby]::ty

środa, 2 kwietnia 2014

Konferencja o porażkach

Parę miesięcy temu byłem na pierwszej konferencji poświęconej porażkom. Imprezę uważam za udaną. Konferencja bardziej była nastawiona na porażki w biznesie niż na porażki w innych sferach (życie prywatne, kariera, nauka i tym podobne).


Bardzo spodobało mi się żywe wystąpienie Fabiana:



Jeszcze z Krakowa był Pan Lech, o którym było głośno po filmie "ukłau zamkniętym":


wtorek, 1 kwietnia 2014