PowerShell module BalloonNotification – hvordan utvikle moduler med C# og VisualStudio 2012

By , 8 oktober, 2012 01:38

Balloon en pest og plage?

«Windows Ballooning» eller «NotifyIcon» oppleves av mange som en pest og plage, men de små beskjedene har også sin nytte. Selv har jeg benyttet «bobla» til å informere sluttbruker om viktige hendelser knyttet til logonscript, eller for å vise maskininformasjon slik som IP-adresse, domene- og maskinnavn.

Denne bloggposten gir hjelp til hvordan man kan lage C# PowerShell moduler i Visual Studio 2012 Express. Modulen BalloonNotification er benyttet som eksempel og kildekode.


Demo av PowerShell modulen BalloonNotification

PowerShell eller C# som språk ved utvikling av moduler

PowerShell er et kraftfullt språk. Som PowerShell fantast er min anbefaling at man også velger å utvikle moduler med PowerShell som språk så langt det er mulig. Likevel har jeg denne gang valgt å skrive modulen i C# med Visual Studio 2012. Årsaken var behov for enklere håndtering av klassen NotifyIcon. Samtidig hadde jeg også stor nysgjerrighet på C# og Visual Studio 2012. Jeg er ingen utvikler og C# er et språk jeg ikke benytter i det daglige. Dere som kan programering og C# får ha meg unnskylt.

Det er også mulig å kjøre C# i PowerShell, men det det kan på grunn av kompilering under kjøring av script oppleves som tregt. Jeg pleier derfor å kompliere koden først og importere denne som modul i PowerShell. (Det en fordel med god kildekode og versjonskontroll for senere iterasjoner). Typisk vil man komme i situasjoner hvor man ønsker å legge til GUI i script og C# eller andre lignende språk kan være enklere å jobbe med, for eksempel gjennom å lage en modul for PowerShell.

NotifyIcon
Klassen NotifyIcon tilhører System.Windows.Forms og er komponenten som håndterer ikon i systemstatusfeltet (http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx). NotifyIcon klassen kan i likhet med andre .net klasser også benyttes i PowerShell, for eksempel gjennom følgende:

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
$notification = New-Object System.Windows.Forms.NotifyIcon

Hvordan komme i gang med C# PowerShell modulprosjekt i Visual Studio 2012

Før man begynner utvikling av PowerShell modul i C# bør man installere Windows PowerShell 2.0 Software Development Kit (SDK) – http://www.microsoft.com/en-us/download/details.aspx?id=2560
I eksemplet skal vi benytte System Management Automation.

Opprettelse av Visual Studio 2012 PowerShell module prosjekt

  1. Opprett nytt prosjekt - for eksempel »File | New Project…» eller velg « New Project» under «Start Page»
  2. I vinduet «New Project» velg «Visual C# | Windows | Class Library«. Skriv inn ett passende navn i «Name» og «Soultion name«, samt angi plassering under «Location»

    New Project Visualt Studio 2012

  3.  

  4. Nye prosjekter i Visual Studio 2012 blir opprettet i .NET 4.0. Vi må endre dette til .NET Framework 3.5 slik at PowerShell 2.0 kan laste modulen.
    Under «Solution Explorer» høyreklikk «BalloonNotification» (eller ditt C# prosjektnavn) og velg «Properties«. Under vinduet «Application» velg «Target Framework | .Net Framework 3.5.»
    Net Framework 3.5

    Net Framework 3.5

  5. Det må legges til to PowerShell «References» – System.Management og System.Management.Automation.
    Høyreklikk «References» og velg «Add«. Legg til nødvendige references. Man må selv lokalisere og velge Windows.Management.Automation.dll i PowerShell SDK installasjonsmappen. Legg også til eventuelle andre References etter behov og etter hva du skal benytte i din modul.
    References

    References

Det er nå klart for å utvikle og skrive C# PowerShell modul i Visual Studio 2012.
 
Modulnavn og CmdLet
Navnet på modulen defineres av «namespace» og vil i «boble» eksemplet være BalloonNotification. Hver «CmdLet» opprettes som Class og [Cmdlet("Show", "Notification")] vil gi en CmdLet som får navnet «Show-Notification» under kjøring i PowerShell.

namespace BalloonNotification
{
    [Cmdlet("Show", "Notification")]
    public sealed class NotifyIconpop : PSCmdlet
    {
    }
}

 
Parametere til en CmdLet
For å opprettet parametere til en CmdLet anngir man egenskapene til parametere, for eksempel hvis parameteret er påkrevd (Mandatory). I eksemplet vil string IconType være pramameter nummer tre i rekkefølgen av aktuelle parametere for en CmdLet. I eksemplet er det også benyttet «ValidateSet» som angir de aktuelle valgene. Valgene vil komme som forslag ved bruk av «Tab» i PowerShell.

// Icon Type
[ValidateSet("Information", "Warning", "Error", "Exclamation", "Hand", "Shield", "Question")]
[Parameter(Mandatory = false, Position = 3)]
public string IconType
{
     get
     {
          return this.iconType;
     }
     set
     {
          this.iconType = value;
     }
}

Full kildekode modul BalloonNotification
Modulen BalloonNotification består av en CmdLet – Show-Notification. Show-Notification har fire parametre. Kildekoden beskriver også typisk bruk av klassen NotifyIcon og hendelseshåndtering ved bruk av «bobla».

Kildekode og kompilert modult kan lastes ned fra Technet Gallery: http://gallery.technet.microsoft.com/BalloonNotification-81c1cd0b

using System;
using System.Diagnostics;
using System.Management.Automation;
using System.Drawing;
using System.Windows.Forms;

namespace BalloonNotification
{
    [Cmdlet("Show", "Notification")]
    public sealed class NotifyIconpop : PSCmdlet
    {
        private string iconType;
        private string message;
        private string title;
        private string notifiaction;
        private System.Windows.Forms.NotifyIcon notify = new System.Windows.Forms.NotifyIcon();
                
        public ContextMenu contextMenu1 = new ContextMenu();
        public MenuItem menuItem1 = new System.Windows.Forms.MenuItem();

        // Message
        [ValidateNotNullOrEmpty]
        [Parameter(Mandatory = true, Position = 0)]
        public string Message
        {
            get
            {
                return this.message;
            }
            set
            {
                this.message = value;
            }
        }

        // Title
        [ValidateNotNullOrEmpty]
        [Parameter(Position = 1)]
        public string Title
        {
            get
            {
                return this.title;
            }
            set
            {
                this.title = value;
            }
        }

        // Action variable
        [ValidateNotNullOrEmpty]
        [Parameter(Mandatory = false, Position = 2)]
        public string NotifiAction
        {
            get
            {
                return this.notifiaction;
            }
            set
            {
                this.notifiaction = value;
            }
        }

        // Icon Type
        [ValidateSet("Information", "Warning", "Error", "Exclamation", "Hand", "Shield", "Question")]
        [Parameter(Mandatory = false, Position = 3)]
        public string IconType
        {
            get
            {
                return this.iconType;
            }
            set
            {
                this.iconType = value;
            }
        }
              
        // NotificationIcon Balloon start initilization 
        [STAThread]
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            Process thisProcess = Process.GetCurrentProcess();
         
            // Icon menu
            contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { menuItem1 });
            menuItem1.Index = 0;
            menuItem1.Text = "E&xit";
            menuItem1.Click += new System.EventHandler(menuItem1_Click);
          
            // Balloon and icon settings
            notify.Icon = typeof(SystemIcons).GetProperty(this.iconType).GetValue((object)null, (object[])null) as Icon;
            notify.BalloonTipIcon = ToolTipIcon.None;
            notify.BalloonTipText = this.Message;
            notify.BalloonTipTitle = this.Title;
            notify.ContextMenu = contextMenu1;
            notify.Visible = true
            notify.ShowBalloonTip(40);
            
            // If balloon clicked or closed
            notify.BalloonTipClicked += (sender, e) =>
            {
                // If no balloon action added
                if (string.IsNullOrEmpty(this.NotifiAction) == true)
                {
                    CleanUp(notify);
                }
                else
                {
                    System.Diagnostics.Process.Start(this.NotifiAction);
                    CleanUp(notify);
                }
            };
            notify.MouseMove += (sender, e) =>
            {
                notify.ShowBalloonTip(40);
                notify.Visible = true;
            };      
        }

        // Clean up
        static void CleanUp(System.Windows.Forms.NotifyIcon c)
        {
            c.Visible = false;
            c.Dispose();
            Application.Exit();
        }
        
        // Exit from menu
        private void menuItem1_Click(object Sender, EventArgs e)
        {
            CleanUp(notify);
        }          
    }
}

Bruk av modulen i PowerShell script


Eksempel på bruk av modulen i PowerShell script

Eksempel på bruk av modulen i PowerShell script


Dette eksemplet gir gjennom «bobla» informasjon om maskinen hvor scriptet kjører. Hvis man trykker på «bobla» opprettes en WEB-side hvor flere maskinegenskaper vises.

Import-Module BalloonNotification

#Region variabler
$WMIComputerSystem = get-wmiobject win32_computersystem -ComputerName $Env:COMPUTERNAME # WMI
$WMINetworks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $Env:COMPUTERNAME | ? {$_.IPEnabled}
$UserNamedom = "$Env:USERDOMAIN" + "\" + "$Env:USERNAME" # USERNAME
$HtmFile = "C:\source\" + $Env:UserName + ".htm" # HTML FIL PATH

# MEMORY
If ($WMIComputerSystem.TotalPhysicalMemory -lt 1GB)
{        
	$Memory = "$('{00:N2}' -f ([MATH]::Round($WMIComputersystem.TotalPhysicalMemory / 1MB))) MB"    
}    
Else
{        
	$Memory = "$('{00:N2}' -f ([MATH]::Round($WMIComputersystem.TotalPhysicalMemory / 1GB))) GB"    
}

# IP
$IPAddress  = $WMINetworks.IPAddress[0]
# MAC
$MACAddress  = $WMINetworks.MACAddress
#EndRegion Variabler

#Region Maskin Objekter
$MaskinObj = New-Object -TypeName PSobject
$MaskinObj | Add-Member -MemberType NoteProperty -Name MaskinNavn -Value $Env:COMPUTERNAME # Maskinnavn
$MaskinObj | Add-Member -MemberType NoteProperty -Name Brukernavn -Value $UserNamedom # Brukernavn
$MaskinObj | Add-Member -MemberType NoteProperty -Name Modell -Value $WMIComputerSystem.Model
$MaskinObj | Add-Member -MemberType NoteProperty -Name Fabrikat -Value $WMIComputerSystem.Manufacturer # PC modell
$MaskinObj | Add-Member -MemberType NoteProperty -Name Minne -Value $Memory # Memory
$MaskinObj | Add-Member -MemberType NoteProperty -Name IP -Value $IPAddress # IP
$MaskinObj | Add-Member -MemberType NoteProperty -Name MAC -Value $MacAddress # MAC
#EndRegion Maskin Objekter		

#Region HTML
$a = "<style>"
$a = $a + "BODY{background-color:White;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:Grey}"
$a = $a + "TD{border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:DarkGrey}"
$a = $a + "</style>"

$data = 
$MaskinObj | Select-Object Maskinnavn, Brukernavn, Fabrikat, Modell, Minne, IP, MAC | 
ConvertTo-HTML -head $a -body "<H2>Maskininformasjon</H2>" | 
Out-File $HtmFile
#EndRegion HTML

#Notification message
$Message =  “Maskinnavn: $($MaskinObj.Maskinnavn) `nBrukernavn: $($MaskinObj.brukernavn) `n`nFabrikat: $($MaskinObj.Fabrikat) `nModell: $($MaskinObj.modell) `nIP-addresse: $($MaskinObj.ip) `nMAC-address: $($MaskinObj.IP)”
Show-Notification -Message $Message -Title "Information" -NotifiAction $HtmFile -IconType Information

Post to Twitter Post to Facebook Post to LinkedIn

Sletting av AD Child Objekter med PowerShell

By , 25 april, 2012 00:20

I blant er det behov for å slette «Child Objects» tilhørende brukerobjekter i Active Directory. Typisk vil dette være nødvendig hvis man skal migrere brukerobjekter med Active Directory Migration Tool mellom domener eller forrest. Hvis brukerobjektet har «Child Objekts» vil ikke brukerobjektet kunne migreres.

«Child Objects» opprettes for eksempel for mobile enheter som synkroniseres mot Exchange 2010. Den mobile enheten får opprettet sin enhets-ID i klassen msExchangeActiveSyndDevice under «Child» objektet CN=ExchangeActiveSyndDevices.

Sletting av «child» objekter kan manuelt utføres gjennom ADSIEdit, men hvis behov for sletting av denne type objekter fra flere brukerobjekter samtidig, vil bruk av script være mest hensiktsmessig.

Det er stilt mange spørsmål i forskjellige fora om hvordan sletting av «Child» objekter kan utføres med PowerShell, men det er ikke mange gode svar. Jeg har derfor valgt å vise hvordan jeg sletter «child» objekter med PowerShell. Første eksempel viser bruk av Microsofts Active Directory module og eksempel to gir samme resultat men benytter PowerShell snapin Quest Active Roles Management.

Sletting av «child» objekter med Microsoft Active Directory module:

# Microsoft Active Directory Module
function Del-LeafObject 
{
	<#
	.SYNOPSIS
	Del-LeafObject
	.DESCRIPTION
	Removes Child object from userobjects
	.NOTES
	AUTHOR:    Lars Jostein Silihagen
	#>
	param 
	(

	    [string]$ADUser
	)
	$LeafObject = Get-ADObject -Filter * -SearchScope oneLevel -SearchBase $ADUser.DistinguishedName        
	if($LeafObject)    
	{        
		Write-Host "Removes Child Objects for user "  $ADUser -ForegroundColor Yellow
		$LeafObject | Remove-ADObject -Recursive    
	}
	else
	{
		write-host "Can't find any child objects for user: " $UserName 
	}
} # end Del-LeafObject

Sletting av «child» objekter med Quest:

# Quest
function Del-LeafObject
{
	<#
	.SYNOPSIS
	Del-LeafObject
	.DESCRIPTION
	Removes Child object from userobjects
	.NOTES
	AUTHOR:    Lars Jostein Silihagen
	#>
	param 
	(
	    [string]$ADUser
	)
	$LeafObject = Get-QADObject -SearchScope onelevel -SearchRoot $ADuser
	if($LeafObject)    
	{       
		Write-Host "Removes Child Objects for user" $ADUser -ForegroundColor Yellow
		Remove-QADObject -Identity $LeafObject -deletetree -force
	}
	else
	{
		write-host "Can't find any child objects for user: " $UserName 
	}
} # end Del-LeafObject

Scriptene kan lastes ned fra MS TechNet Gallery: http://gallery.technet.microsoft.com/Deletion-of-Active-9c0dedd6

Post to Twitter Post to Facebook Post to LinkedIn

Get-InstalledApplications.ps1

By , 19 mars, 2012 10:52

Har publisert ett PowerShell script som er hendig for å hente ut oversikt over installerte applikasjoner på en Windows 7 klient.

Scriptet kan lastes ned fra Microsoft TechNet Gallery for Script Repository: http://gallery.technet.microsoft.com/scriptcenter/Get-InstalledApplicationsps-e2aee784

Scriptet henter alle installerte applikasjoner basert på avinstallasjonsinformasjon i Registry og oppretter en WQL-query for hver applikasjon. Scriptet kan for eksempel være til god hjelp for personell som arbeider med applikasjonsdistribusjon eller querys i SCCM.

Følgende objekter returneres:
• AppName
• AppVersion
• AppVendor
• UninstallString
• AppGui
• WQLQuery

Example:
Get a list of installed applications on local computer:

Get-InstalledApplications.ps1

AppName : Aruba Networks Virtual Intranet Access
AppVersion : 2.0.1.0.30205
AppVendor : Aruba Networks
UninstallString : MsiExec.exe /X{F5CE8021-D68C-44A9-A69E-14725B63212D}
AppGUID : {F5CE8021-D68C-44A9-A69E-14725B63212D}
WQLQuery : SELECT * FROM Win32Reg_AddRemovePrograms WHERE Displayname LIKE ‘Aruba Networks Virtual Intranet Access 2.0.1.0.30205′ AND Version LIKE ’2.0.1.0.30205′

Post to Twitter Post to Facebook Post to LinkedIn

Software Updates Management, SCCM og ISA2006? Bruk små bokstaver i WUServer FQDN..

By , 4 mai, 2011 01:23

Problem

Har brukt litt tid på feilsøking for å løse Patch Managment problemer i et ConfigMgr 2007 R2 miljø hvor Software Updates Management agenten på SCCM klientene ikke utførte Software Update Scan Cycle. Asynkrone rapporteringsforsøk fra klientene til SCCM Serverne ga mye “tyttebær” i WindowsUpdate.log og WUAHandler.log. Feilmeldingene var av typen “Access denied” og ”Proxy Authentication Required.” Dette oppstod selv om det ikke var definert bruk av proxy i SCCM eller lokalt på server/klient. Det er samtidig uønsket at WU skal benytte proxy i internt LAN og trafikken relatert til oppdateringer skal gå direkte mellom SCCM server og tilhørende Client. Etter hvert ble søkelyset rettet mot en ISA 2006 server som var definert med WPAD Automatic Discovery i DHCP. Kommandoer for å trigge WU agentene slik som wuauclt /reportnow (rapportering fra WU agent til SCCM/WSUS server) viste seg å gi feilinnslag på ISA-logene.

Løsning

Gjennom SCCM Site System installasjon blir gjerne Fully Qualified Domain Name for Intranet Clients definert med store bokstaver (figur 1 – Intranet FQDN). FQDN med store bokstaver blir videre arvet i den lokale WUServer GPO som settes på den enkelte SCCM Client for WU agent konfigurasjon. WU agenten bruker oppgitt WUServer FQDN for kontakt mot tilhørende SCCM/WSUS server.  Det viste seg at bruk av store bokstaver i FQDN fikk WU agenten til å kontakte proxy/ISA server i stedet for å gå direkte mot SCCM server. ISA serveren hindret med det kommunikasjon mellom WU agenten og SCCM serveren. Når man derimot endret FQDN til små bokstaver og utførte en samtidig oppdatering av oppdateringspakkenes distribusjonspunkter (dette endrer WUServer GPO) klarte WU agenten å kontakte SCCM serveren direkte. Litt sært? ..ja, men det fungerer! ;-)

image

For øvrig opplevdes dette med bruk av WS2003, ISA 2006 og SCCM 2007 R2 SP2 (mixed mode, primary sites) i en AD struktur med flere domener og uten internett tilgang.  

Hvorfor og hvem er den skyldige?

Winhttp clients slik som WU agent, SCCM og Outlook kan i kommunikasjonen med omverdenen benytte URL’er med store eller små bokstaver, eller kanskje en miks av dette. Hvis ISA-serverens “proxy exeption” liste ikke støtter den URL som benyttes (store eller små bokstaver) forårsaker dette at Winhttp klienten kan bli sendt videre til en proxy server i stedet for å gå direkte mot ønsket destinasjon.
Eksempel på en ISA-generert PAC-fil:

...
function MakeNames()
{
  this[0]="*.silihagen.net";
}
DirectNames=new MakeNames();
cDirectNames=1;
...
function FindProxyForURL(url, host){
...
for(i=0; i<cDirectNames; i++)
{
  if(shExpMatch(host, DirectNames[i])){
   fIp = true;
   break;}
  if(shExpMatch(url, DirectNames[i]))
   return "DIRECT";
}


Når en Winhttp klient finner wpad-konfigurasjonen fra en ISA-server, for eksempel wpad.pac, vil konfigurasjonen bestemme hvor trafikken skal pekes eller om trafikken skal til proxy (“FindProxyForUrl”). Slik det er definert i utdraget fra PAC-filen så er “DirectNames” skrevet med små bokstaver. shExpMatch(); er “case-sensitive” og vil kan kun behandle URL data med små bokstaver for “DirectNames”. Det er ingen funksjon i PAC-filen for å konvertere innkommende URL til små bokstaver først.

Det betyr at selv om wpad konfigurasjonen inneholder *.silihagen.net i “direct access” listen, vil wpad-konfigurasjonen gi false på shExpMatch() for en URL med FQDN LJS03.SILIHAGEN.NET. Når shExpMatch() gir false vil klienten som sende forespørselen motta en liste over proxy servere i stedet for å gå direkte til ønsket destinasjon.  

Hva med TMG?

TMG opererer forholdsvis likt som ISA og samme problem kan derfor oppstå også i TMG. Det er gjort en forbedring i TMG som gir muligheten til å konvertere URL til små bokstaver før kjøring av shExpMatch(). Den funksjonen heter ConvertUrlToLowerCase (http://msdn.microsoft.com/en-us/library/ff824480(VS.85).aspx) Denne funksjonen er som standard ikke i bruk, men kan og bør vurderes å benyttes.

Post to Twitter Post to Facebook Post to LinkedIn

Har du riktig IT-infrastruktur?

By , 7 april, 2011 23:20
En konkurransedyktig virksomhet krever en velfungerende og effektiv IT-arkitektur. Hva skal til for å imøtekomme morgendagens teknologiske innovasjoner med nye krav og behov? De siste årene har det skjedd endring i hvordan vi tenker, designer og implementer infrastruktur. Virtualisering har blitt modent, automatisering er blitt en viktig del av det moderne datasenter og blant faktorene som i større og større grad påvirker designvalgene – vi har blitt mobile og krever tilgjengelighet til IT-systemene når som helst og hvor som helst.

“I år vil antallet mobile medarbeidere passere en million på verdensbasis, og innen 2013 vil 1,2 milliarder mennesker – mer enn en tredjedel av verdens befolkning – jobbe på farten. IDC, Februar 2010”

Det å finne den optimale IT-plattform er ikke enkelt. Når man tenker nytt er det mange barrierer og faktorer som spiller inn, og ikke minst er det viktig å få forståelse og forankring for de valg som besluttes. For å identifisere hvilken arkitektur som passer virksomheten best kan man få god hjelp gjennom å fokusere på krav og prioritet. Husk at det er forskjell på ønske og krav. Et ønske er noe som har en etterspørsel, mens krav kan være nødvendig eller kritisk for driften. Hva er det man ønsker å oppnå, hvilke krav stilles til løsningen og hvilket behov er det som skal dekkes?

Riktig IT-arkitektur handler først og fremst om hvor godt arkitekturen støtter organisasjons mål og verdikjede.

Fem punkter

I en moderne IT-design er det fem punkter som kan være nyttige å legge til grunn når man skal sette krav og prioritet.
  • Fleksibilitet – klar for fremtiden?
    For å være forberedt på fremtiden og for å oppnå størst mulig gevinst av investeringene, bør det satses på gjenbrukbare og tilpasningsdyktige løsninger.

    Fleksibilitet kan skapes gjennom modualisert arkitektur, hvor en modul er en logisk samling av komponenter, som alene, eller i kombinasjon med andre moduler, utfører et sett med nært beslektede funksjoner. En modul alene, eller en sammensetning av moduler utgjør en tjeneste. For eksempel så kan OS-virtualisering være en modul. En modul kan være rene tekniske moduler (teknologi) eller moduler som beskriver prosesser eller rutiner.

    Gjennom modualisering oppnås:
    - Bedre systemteknisk oversikt og synliggjøring av avhengigheter
    - Forenkle gjenbruk av løsninger
    - Standardisert arkitektur
    - En arkitektur som er imøtekommen for nye endringer, hvor nye og gamle moduler enkelt kan endres eller utvides
  • Brukervennlighet – få brukeren til å bruke
    Brukerne, de som skaper verdi, blir ofte glemt i iveren etter å ta i bruk ny teknologi. Sett brukeren i fokus og involver brukere når løsning skal testes og utvikles. Gevinsten av IT-investeringen kan bli borte dersom brukeren ikke får tilstrekkelig opplæring eller ikke forstår hvordan nye tjenester kan brukes effektivt.
    Brukerne vil søke de verktøy som de finner best egnet til å få jobben gjort. Analyser bruksmønstre.
  • Endringsledelse – en kontroll prosess
    Der er ikke alltid enkelt å gjennomføre endringer i praksis. Det må skapes en felles forståelse i organisasjonen for hvordan innføring av nytt system påvirker arbeidsprosesser, organisasjon, kompetansekrav og roller. Etabler gode team for å drive endringsprosessen og lag planer for gevinstrealisering og innføring.
  • Ytelse – lag raske løsninger
    God operasjonell ytelse på en tjeneste er viktig for å sikre at brukerne får den nødvendige respons de trenger for å utføre sitt daglige arbeid.
  • Pålitelighet – få det til å virke
    Tillitt til IT-systemene er kritisk for de fleste bedrifter. IT-organisasjonen må ha den nødvendige metodikk og verktøykasse for å kunne måle og sikre pålitelige IT-system
IT-organisasjonen kan risikere å investere mye i en løsning som ikke passer virksomheten hvis kriteriene var feil definerte. Benchmarking, due diligence, risikoanalyse og erfaring gir verdifulle innspill slik at riktige valg gjøres. Det handler også om å skape varige gevinster og det er viktig at investeringene samsvarer med forretningsstrategien. Innholdet i IT-strategien skal være forståelig for alle deler av virksomheten, både ledelse og ansatte. Sørg for å finne løsninger som skaper smidighet, fleksibilitet og sikkerhet.

Nettskyen

Brukernes ønske om å være smidige fører oss mot tjenester på internett og tjeneste baserte applikasjoner – Nettskyen. Tilgjengelighet er en utfordring som ofte kan være vanskelig å tilfredsstille i eksisterende miljø. Brukeren trenger noe – en tjeneste, og skyen gir brukeren mulighet til å forespørre, motta og bruke tjenesten. Hvor tjenesten leveres fra kan være gjennom egne servere, skyen, partnere eller kanskje en hybrid av disse. Nye dynamiske datasenter bør lett kunne knyttes til tjenester i skyen.

Det er viktig å legge en nettsky-strategi som sikrer at tjenestene som implementeres understøtter forretningsmessige forventninger og tilfredsstiller de krav virksomheten har til sikkerhet, compliance, risiko, personvern, identitetsforvaltning og tjenesteintegritet.
Tjenester og plassering i Nettskyen

Kilde: KPMG Nederland 2010 - http://www.kpmg.no/arch/_img/9695501.pdf

 

Både private- og offentlige organisasjoner vil finne tjenesteområder som passer eller ikke passer for flytting til en nettsky. KMPG gjennomførte i 2010 en undersøkelse i en internasjonal bank for å identifisere hvilke tjenester som typisk kunne flyttes til nettskyen. Portaler, Office-applikasjoner og e-post er blant de tjenester som utpeker seg som enklest å tilgjengeliggjøre i skyen. Software as a Servcie tilbydere som satser stort blant annet innen portal, office og e-post er Microsoft Office 365 og Google Apps for Business.

Verdt å merke seg er også at mange ønsker å plassere virksomhetens utviklingsmiljø eller utviklingsplattform som en tjeneste i skyen. Utviklingsmiljø kan være kostbare å vedlikeholde og drifte. Kanskje er det utviklingsmiljøet som for mange vil være første steg i retning av nettskyen, enten som en privat cloud tjeneste i virksomheten eller plassert hos en tilbyder. Defense Informastion System Agency (USA) er eksempel på en tilbyder som tilbyr skytjenester for å raskt kunne opprette utviklingsmiljø for Forsvaret i USA – Rapid Access Computing Enviroment http://disa.mil/race/

Tips for suksess med IT-moderniseringsprosjektet

  • Analyser og få oversikt over eksisterende infrastruktur
  • Bestem plassering av datasenter, antall datasenter og om de bør bære frittstående, samlokalisert eller outsourcet. Konsolider mest mulig av eksisterende datasenter. Lag en samlet Cloud Computing-strategi for virksomheten
  • Utred hvordan datasenterkonsolidering og moderniseringen vil påvirke IT-plattformer og system. Hvordan skal gammel infrastruktur håndteres og skal noe sameksistere?
  • Evaluer og sett klare mål for nødvendige og ønskede prioriteringer, samt krav til resultater innen designvalg
  • Unngå økt kompleksitet i løsningen. Økt kompleksitet betyr redusert sikkerhet og driftbarhet.
  • Samarbeid med virksomhetens nøkkelpersoner i forbindelse med oppgradering og forbedring av IT-infrastrukturen
  • Involver og ansvarliggjør ledere og medarbeidere i hele endringsprosessen
  • Ikke glem brukerene
  • Adresser internpolitiske problemer som kan skape utfordringer for moderinseringsprosjektet

Post to Twitter Post to Facebook Post to LinkedIn

HTML-Innjection i norske nettbanker

By , 15 februar, 2011 21:51

Post to Twitter Post to Facebook Post to LinkedIn

Verktøykassa: USB-penn med mulighet for boot fra ISO-fil

By , 1 februar, 2011 00:23

I “feltet” kan det oppstå behov hvor man må benytte verktøy som krever installasjon eller “live”-start av operativsystem under maskinens oppstart. Typiske eksempler kan være behov for å starte på “media” for å utføre firmware-oppdateringer, starte Ubuntu live, Windows 7 installasjon eller for å starte verktøy slik som UltimateBootCD eller DaRT. Oppstart fra USB-penn med mulighet for å velge hvilken ISO-fil eller partisjon man ønsker å starte fra gir gode muligheter for å lage en nyttig verktøykasse.

Ved siden av ISO-filer har jeg også fylt min USB-penn med hendige verktøy fra Sysinternals Suite, editorer, PowerShell installasjon med script samling og ikke minst SCCM Toolkit V2 – er avhengig av Trace32!

For å kunne gjøre boot fra ISO-filer bruker jeg Grub4Dos:

  1. Last ned og ekstraher filen grubinst-1.1-bin-w32-2008-01-01.zip
  2. Sett inn en USB-penn (NB: all data blir slettet) og fra filen du lastet ned start programmet: grubinst_gui.exe (Run as administrator..)

  3. Velg RIKTIG USB-penn, velg Whole disk (MBR), kryss av for Don’t search floppy og velg Install. Tips: I noen tilfeller må USB-pennen preppes for eksempel med Diskpart.
  4. Last ned og ekstraher filen Grub4DOS – ver. 4.4 2009-03-31 Official Release og kopier filen “grldr” til USB-pennen.
  5. Kopier oppstartbare ISO-filer til USB-pennen. For eksempel Microsoft Windows 7.
  6. Lag en GRUB meny og lagre denne som menu.lst på USB-pennen.

Eksempel på GRUB meny (menu.lst)
timeout 5
default 0

title Windows 7 x64
map (hd0,0)/Windows7x64.iso (hd32)
map –hook
chainloader (hd32)
boot

title DaRT
map (hd0,0)/DaRT.iso (hd32)
map –hook
chainloader (hd32)
boot

title CommandLine
commandline

title Reboot
reboot

I eksemplet for menu.lst oppnås valget om å starte Microsoft Windows 7, DaRT, CommandLine, eller Restat av maskinen.
Lykke til! Hvor lenge klarer du å holde orden i verktøykassa di? ;-)

Post to Twitter Post to Facebook Post to LinkedIn

Cloud Computing, vanskelig valg?

By , 19 september, 2010 00:01
Roger Halbheer (Worldwide Chief Security Advisor at Microsoft Corporation) var for en tid tilbake på Norgesbesøk for å fortelle om Cloud Computing og federation. Halbheer har lang erfaring innen sikkerhetsrådgivning fra blant annet PricewaterhouseCoopers og Microsoft. På møte ble det også presentert og diskutert ADFS 2.0, SAML v2 og Forefront Identity Manager 2010. FIM 2010 og ADFS 2.0 ble presentert av Jon Jahren ved Microsoft Norge og erfaringer fra arbeid med produktene ble presentert av Visiti og av Acando. Blant annet ble det diskutert erfaringer med MinId.


Jeg gjorde meg noen notater fra møtet og har med min egen tolkning av presentasjonen skrevet referat fra hva Halbeheer snakket om i fobindelse med Cloud Computing:
Det å bestemme hvilken type cloud-modell som skal velges for virksomheten er et vanskelig valg og utfordringene er mange. Hovedbudskapet i Halbheers Cloud Computing presentasjon handlet nettopp om det å velge. Hvilken plassering skal datasenteret ha i forhold til Cloud Computing? Skal ditt fremtidige datasenter fortsatt være det gode gamle? Skal man opprette sin egen private Cloud? Er det trygt å legge bedriftens data i en Public Cloud? Kanskje skal man velge en hybrid av Public og Private Cloud? Eller er din virksomhet best tjent med å gå sammen med andre selskaper og danne en Community Cloud?


Å velge innebærer at man først gjør en vurdering. For å finne hvilken type Cloud som er best egnet bør det gjøres en kartlegging av virksomhetens sikkerhets- og personvernskrav, data klassifisering og ikke minst virksomhetens behov. Halbheer listet opp fem områder hvor man må innhente kunnskap og forståelse for i forbindelse med Cloud valg:


  • Compliance and Risk Management
  • Identity and Access Management
  • Service Integrity
  • Endpoint Integrity
  • Information Protection
Det er viktig å knytte klare strategier til disse fem punktene. Strategiene skal sikre at Cloud Computing tjenester som implementeres tilfredsstiller de krav virksomheten har til sikkerhet og understøtter forretningsmessige forventinger. Virksomheten må forstå hvem som har tilgang til sine data i skyen og vurdere om risikoen er akseptabel før de velger å legge sine data der. De må også forstå arkitekturen i den Cloud-modell som velges og hvordan tilbyderen av Cloud har implementert dette. Spesielt dersom det er snakk om Public Cloud.


Fordelene med å velge Cloud Computing er mange, spesielt økonomisk, men gir samtidig nye utfordringer og bekymringer. Ikke minst krever en Cloud strategi endringer for IT-organisasjonen, hvor forvaltningen til dels ikke lenger vil ligge under deres direkte kontroll. Mange ser på det å velge en hybrid-modell som raskeste vei til Cloud Computing, men denne modellen hvor enkelte prosesser forblir i virksomhetens datasenter og andre i skyen, kan gi utfordringer for IT-organisasjonen. Ikke nok med at de nå må fortsette å administrere data og sikkerhet i sitt lokale datasenter men de må samtidig tenke på hva som lagres av data i skyen og hvordan tilgang skal gis. Det må lages løsninger som garanterer at den nødvendige informasjonssikkerheten opprettholdes på tvers av organisasjonen og inn mot de forskjellige leverandører av Cloud tjenester. Det er for eksempel i den forbindelse produkter som Forefront Identity Manager 2010 kan være aktuelle.


Det er få som har adoptert Cloud Computing . En av årsakene til den foreløpige avventningen kan skyldes de mange komplekse spørsmål som stilles i forbindelse med Cloud, særlig når det gjelder spørsmål om sikkerhet, administrasjon og compliance. De næringene som ser ut til å lettest tilnærme seg Cloud Computing i dag er shippingindustri og petroleumsnæringen.


Post to Twitter Post to Facebook Post to LinkedIn

SCCM 2007 Hardware Inventory og bruk av Management Object Format

By , 1 mai, 2010 00:35
Hvorfor utvide Hardware Inventory?
System Center Configuration Manager har to funksjoner for datainnsamling. Dette er Software Inventory og Hardware Inventory. Software Inventory spør etter filer på maskinen, mens Hardware Inventory spør etter Registry nøkler og WMI informasjon fra maskinen. Jeg vil i denne artikkelen fokusere på Hardware Inventory i SCCM 2007, men overlapper også funksjonalitet i SMS 2003 da virkemåte for Hardware Inventory bygger på samme teknologi.

Hardware Inventory er funksjonalitet i SMS og SCCM som gir mulighet for innsamling av maskinvaredata. Oversikt og kontroll av maskinvare i organisasjonen er for enkelte kun en tilleggsfunksjonalitet som kan være nyttig i visse sammenhenger. Andre har krav som forplikter å kunne fremlegge dokumentasjon over hvilke og hvor mye maskinvare som finnes i sin infrastruktur. Spesielt er maskinvarekontroll viktig i miljøer med krav til høy sikkerhet.

MOF står for Management Object Format og definerer i SMS og SCCM hvilke data som skal samles inn av klientene. Management Object Format er et språk (standard) som brukes for å beskrive Common Information Model. Innsamling av data foregår ved spørringer hovedsakelig mot WMI, CLI og registry. For å ta i bruk Hardware Inventory må denne funksjonaliteten aktiveres. Uten å gjøre endringer på MOF konfigurasjonen vil SMS/SCCM gjøre innsamling av en del grunndata fra de maskiner som har klient (SMS agent) installert. Likevel har enkelte behov for innsamling av mer eller mindre data en hva som tilbys i standard konfigurasjon. Typisk vil man for eksempel i forbindelse med populering av data til en CMDB løsninger (Configuration Management Database) ha behov for utvidet innsamling av Hardware Inventory (Configuration Items (CI)), alt etter hvilke krav som foreligger for CMDB. Andre kan for eksempel ha ønske om å gjøre mindre innsamling for å spare båndbredde.

For å endre hvilke og hvor mye data som skal innsamles må man editere MOF filene. Endringer av MOF filene kan sammenlignes med å kunne sykle. Når du tror du er veldig god, gjør du noe dumt og du faller og slår deg. MOF editering er derfor av mange SCCM og SMS eksperter forbundet med frykt for å gjøre feil!

Forhåpentligvis vil denne artikkelen gi hjelp og tips til å unngå de største fallgruvene.

Hva er SMS_def.MOF og Configuration.MOF
Hvilke maskin- og programvaredata som skal innehentes av SCCM 2007 og SMS 2003 bestemmes av regler satt i MOF. SMS 2003 forholder seg kun til en SMS_def.MOF fil. I Configuration Manager 2007 er denne filen splittet og man operer der med to MOF filer, Configuration.MOF og SMS_def.MOF. Oppdelingen av MOF filene er hovedforskjellen i hvordan SMS og SCCM gjennomfører datainnsamling. Både for SMS og SCCM er MOF filene plassert i mappestrukturen <InstallDir>\inboxes\clifiles.src\hinv.

Configuration.MOF definerer de dataklasser det er behov for og som skal brukes av Hardware Inventory og WMI. Data klasser kan opprettes for eksisterende eller egendefinerte WMI spørringer eller registry nøkler på klient systemet.

SMS_def.MOF bestemmer hvilke data som skal rapporteres inn til SMS/SCCM av klienten. SMS_Def.MOF blir kompilert til en policy som kopieres ut til klientene og som igjen gjør datainnsamling og lagrer dette med WMI. Alle klasser har et ”SMS_Report flag” som kan settes til True eller False, alt ettersom man ønsker eller ikke ønsker datainnsamling for denne klassen.

SMS_def.MOF i SMS 2003 inneholder både Configuration.MOF og SMS_def.MOF slik de er beskrevet brukt i SCCM 2007.

Eksemplet som benyttes under vises hvordan SMS_def.MOF kan utvides til å innhente serienummer på harddisker på maskiner (ikke Volume SerialNumber):
[ SMS_Report     (TRUE),
SMS_Group_Name ("Physical Media"),
SMS_Class_ID   ("CUSTOM|PHYSICAL_MEDIA|1.0") ]
class Win32_PhysicalMedia : SMS_Class_Template
{
[SMS_Report (TRUE)     ]        string     SerialNumber;
[SMS_Report (TRUE), key]        string     Tag;
};

For å vise en rapport over innhentet disk informasjon kan følgende SQL (SMS) spørring benyttes:
select distinct sys.netbios_name0, dsk.Model0,
Phys.Tag0, Phys.SerialNumber0 from v_gs_physical_media0 as Phys
inner join v_r_system as sys on sys.resourceid=phys.resourceid
inner join v_gs_disk as dsk on Phys.resourceid=dsk.resourceid
where
sys.netbios_name0 = @ComputerName
and dsk.deviceid0=Phys.tag0
order by Phys.tag0

Spørringen vil kunne gi følgende rapport:
Oppgradering fra SMS 2003 til SCCM 2007
Eksiterende SMS_def.MOF i SMS 2003 vil bli overskrevet ved oppgradering fra SMS 2003 til SCCM 2007. Eventuelle tilspasninger av SMS_def.MOF vil derfor bli borte. Tilpasninger som skal videreføres må tas vare på og legges inn igjen i SCCM etter fullført oppgradering.

MOF editering
Windows Management Interface (WMI)
WMI spørringer er hovedsakelig den metodikk som benyttes av Hardware Inventory for å gjøre spørringer og innhente ønsket data. Følgende lenker er gode ressurser for å finne frem i ”WMI-jungelen”:

Hardware Inventory prosessen
SMS/SCCM Advanced Clients laster ned nye Hardware Inventory regler hver gang Advanced Client policy blir oppdatert. Med standard innstillinger blir det gjort en gang i timen. Legacy Clients laster ned nye Hardware Inventory regler når klienten oppdateres. Oppdateringer skjer med standard innstillinger hver 25 time. Når klienten har de nye Hardware Inventory reglene, vil neste kjøring av Hardware Inventory innsamle maskinvaredata i henhold til MOF konfigurasjonen.

Ny MOF konfigurasjonen benyttes kun av klienten dersom alle syntakser i MOF filene er riktige. Hvis ikke blir de gamle MOF reglene brukt.

Editering av MOF filer
  • For å editere MOF filer anbefales bruk av tekst editor for eksempel Notepad.exe.
  • I miljøer med flere Primary Sites, må endringer i SMS_def.MOF og Configuration.MOF gjøres på hver Primary site (<smsServer>\inboxes\clifiles.srv\hinv).
  • I SMS 2003 må SMS_def.MOF kompileres etter modifikasjon. Dette gjøres med kommandoen mofcomp.exe SMS_DEF.MOF.
  • Det er viktig å huske på at Hardware Inventory ikke kan hente data fra HKCU (HkeyCurrentUser). Årsaken til dette er at Hardware Inventory henter informasjon fra maskinen og ikke fra brukeren.
Monitorer endringer
For å se hvilke endringer som blir gjort etter endringer i MOF filene og om endringene ga ønsket resultat eller ga feil kan følgende fremgangsmåte brukes:
  1. Bruk Trace32 (følger md SMS/SCCM Toolkit) eller annet log-fil verktøy. Se på SMSServer\logs\dataldr.log
  2. Dataldr.log vil først gi meldingen ”SMS_DEF.MOF change deteched” og senere vil den, hvis MOF endringene gikk bra, gi følgende melding ”Enf of cimv2\sms-to-policy conversion; returning 0×0”.
  3. Gå til en maskin som har SMS klienten installert. Start ”Mashine Policy Retrieval” (må ofte gjøres flere ganger). Se på loggen på maskinen med SMS klient: %windir%\system32\ccm\logs\policyevaluator.log. I denne loggen vil man i de fleste tilfeller kunne se den regelen man satte i SMS_def.MOF.  Start også ”Hardware Inventory Action” fra SMS klienten.  Etter hvert vil reglene som ble satt i SMS_def.MOF også dukke opp i log filen %wubdir%\system32\ccm\logs\inventoryagent.log.
  4. Etter litt tid vil man på SCCM serveren få nye tabeller i databasen som kan gi nye rapporteringsmuligheter for endringene som ble gjort i MOF.
Slå av uønskede rapporteringer
For å finne rapporteringsklasser som kan deaktiveres av bør man gå inn på en gruppe servere og klienter som har SMS/SCCM klient installert og se på inventoryagent.log. Se etter ”..does not exist out”. De klasser som har denne meldingen kan i de fleste tilfeller slås av. Meldingen bør i så fall være et gjennomgående tilfelle for serverne eller klientene.

En annen metode for å finne rapporteringsklasser som kan deaktiveres er å benytte Resource Explorer på klienter og servere. Hensikten er å finne data som klienten eller serveren rapporterer men som det ikke er behov for å rapportere i organisasjonen.

Dersom man finner klasser som kan være kandidater som kan deaktiveres (Disable), gjøres dette ved å endre fra TRUE til FALSE i SMS_DEF.MOF for denne klassen.

Når man har deaktivert en klasse vil det finnes gamle tabeller og ”views” i databasen som ikke lenger behøves. Det er to metoder for å rydde i databasen for ubrukte tabeller. Enten ved bruk av gratisproduktet SiteSweeper som kan lastes ned fra http://www.sccmexpert.com/ eller man kan gjøre jobben manuelt gjennom ”delgrp” som følger med SMS Toolkit.

For manuell bruk av delgrp (husk å stopp SMS Exec Service før bruk av delgrp til sletting):
  • Delgrp /L lister ut alle ”slettbare” tabeller
  • Delgrp ”MICROSOFT|TIME_ZONE|1.0” /C Denne kommandoen lister ut hvilke ”Collections” som baserer seg på ”MICROSOFT TIME ZONE”
  • Delgrp ”MICROSOFT|TIME_ZONE|1.0” sletter klassen fra databasen

Etter bruk av delgrp må ”Views” i MS SQL slettes. Dette gjøres ved å starte SQL Admin Console og velge tabellene som ønskes slettes. Slett så tabellen. Velg Drop All.
Dersom man har flere Primary Sites må prosedyren ved sletting gjennomføres på alle Primary Sites.

Slå på (aktivere) flere klasser med Asset Intelligence

Flere klasser kan aktiveres gjennom Asset Intelligence. Enkelte klasser kan kreve ekstra konfigurasjon. For eksempel vil SMS_SystemConsoleUser i tillegg kreve bruk av en GPO.

Alternativt kan man gå igjennom SMS_DEF.MOF og se etter klasser som er deaktivert (FALSE). Så må man ta avgjørelsen om disse bør aktiveres (TRUE).  Når man aktiverer en klasse er det verdt å huske på at denne klassen ofte inneholder flere attributter. Man trenger ikke alltid å sette alle attributtene til True.

Verktøyet WEBEMTEST kan liste ut avhengigheter og muligheter for en klasse.

Beste praksis for MOF utvidelser
  • Ta sikkerhetskopi av MOF filene før editering
  • Ta sikkerhetskopi av MOF før oppgradering fra SMS 2003 til SCCM 2007
  • Nye endringer i MOF filer bør legges inn nederst i filene. Da unngås risiko for at endringer vil forstyrre eksisterende regler for datainnsamling
  • Hvis mulig, legg MOF filene inn i versjonskontroll, eller husk å kommenter endringer øverst i filene. Husk også å ta med dato og navn på utførende
  • Utfør test av endringer i MOF i et utviklings eller referanseanlegg før produksjonssetting
  • For hver klasse som rapporteres inn fra klienten, krever det litt mer båndbredde og ytelse for prosessering av data. Pass derfor på å ikke starte for mye rapportering om gangen. Monitorer prosesser og nettverk samtidig
  • Klasse navnet for reporting må være det samme som klassenavnet for dataklassen
  • Klasser må kun defineres en gang
Datainnsamling og sikkerhet
Innsamling av data er sårbart for angrep. Typiske angrep kan for eksempel være:
  • å sende inn feil data
  • sende store datamengder inn til server for å gi databasen stor last
  • aksessere innsamlet data under transport til SMS/SCCM.
Med standard innstillinger i SCCM 2007/SMS 2003 blir Hardware Inventory trafikk fra klienter som benyttes i mixed mode sites ikke kryptert, men det er mulig å slå på kryptering. Kryptering kan slås på med følgende fremgangsmåte:
  1. Fra SCCM konsoll naviger til System Center Configuration Manager > Site Database > Site Management > (SiteCode)-(SiteName), høyreklikk og velg ”Properties”
  2. Velg tabben Site Mode
  3. I ”Client Settings”, slå på ”Encrypt data before sending to management Point”
SCCM 2007 Sites i native mode bruker som standard SSL for kryptering av Inventory trafikk.

Post to Twitter Post to Facebook Post to LinkedIn

MMS 2010 Keynote dag 1 og dag 2

By , 23 april, 2010 12:02

Microsoft Management Summit 2010 pågår i Las Vegas. Keynote fra dag 1 og dag 2 er lagt ut med video og de er det verdt å få med seg.

Post to Twitter Post to Facebook Post to LinkedIn

Panorama Theme by Themocracy