Quantcast
Channel: LANDESK User Community : Blog List - All Communities
Viewing all 80 articles
Browse latest View live

Simple using Powershell with mbsdk

$
0
0

Hi there,

in the last weeks i have tried something with powershell and i will post my results here:

 

 

First of all - Connecting to LANDeskWebSDK

$core = "YOURCORESERVER"
$ldWS = New-WebServiceProxy -uri http://$core/MBSDKService/MsgSDK.asmx?WSDL -usedefaultcredential

 

 

Parameter "-usedefaultcredential" can be used if you want to connect to your landesk server with your current windows credentials. This is necessary if you have domain authentication. With -usedefaultcredentials you will not be prompted. If you will be prompted you should use  "-credential with Get-Credential"

 

 

Running a LDMS Query

$query = $ldWS.RunQuery("YOURQUERYNAME")

 

$query contains now a system.data.datatable with your full results of your LANDesk Query.

 

You could Access your Columnnames by the following code:

 

$query.tables[0].columns[0].caption
$query.tables[0].columns[1].caption
$query.tables[0].columns[2].caption

 

This could be also done by a for query:

 

for($c=0;$c -lt $query.tables[0].columns.count;$c++)
{    $query.tables[0].columns[$c].caption
}

 

 

Access your Rows is similar:

 

$query.tables[0].rows[0][0]          # Row 0 Column 0
$query.tables[0].rows[0][1]          # Row 0 Column 1
$query.tables[0].rows[1][0]          # Row 1 Column 0

 

 

Getting MachineData

 

$data = $ldWS.GetMachineDataEX("GUID","<Columns><Column>Computer.""Device Name""</Column><Column>Computer.Netzwerk.TCPIP.Adresse</Column></Columns>")

 

You need to edit your GUID. A GUID has a format like "{8C21234-ABCD-AF45-BF40-094659646}"

 

Access your data with:

 

$data.computer.devicename
$data.computer.netzwerk.tcpip.adresse    # this is for german environments if you have english this may be $data.computer.network.tcpip.address

 

 

You could also use a Column Set Name stored in your LANDesk Environment to optain the data. All you need is to enter your Column Set Name at Parameter 2:

 

$data = $ldWS.GetMachineDataEX("GUID","COLUMNSETNAME")

 

 

Finally


You could also create your own LANDesk Console with MBSDK and Powershell. In my Environment i have create a simple GUI that only displays some querys

and the possibility of remote control:

 

ldrc.jpg

 

Sorry for my bad english, i am not a native english speaker - i hope this will help someone


Community Upgrade Planned for 1st June

$
0
0

Just a heads up that we are planning an upgrade of the community on Sunday 1st June and so the LANDESK community plus support.landesk.com and support.wavelink.com will be unavailable for some of the day.

 

After the upgrade, amongst other changes you will notice:

 

  • Mobile Friendly
    • The site will now render appropriately when browsing from a mobile device.
  • Following Content or Places (Communities)
    • If you are interested in something on the community you should choose to follow it.  This means that you will get notifications when something happens that is linked to that place or piece of content.
  • Using Activity Streams
    • You can use activity streams to see what is happening within your areas of interest.  Add multiple activity streams to group together topics of interest and select whether to be notified via email or not.
  • Content marked as Offical or Outdated
    • Site administrators and the support team can now mark documents as Official in order to promote it within your search results.  This ensures that our most recommended content is found higher within your search results.  Conversely our older content can be marked as Outdated and therefore demoted within the search relevancy results.  You can also see how recently it was reviewed and marked as such.

 

More details will follow nearer to the time.

Community on your mobile

Following your interests

$
0
0

Did you ever want to know more about what someone does on the community or maybe just think they might do something you’ll find interesting?

Did you want to learn more about a particular product on the community?

Did you find a piece of information that you check regular for updates?

 

If so, you can use the "Follow" feature on community to get notified of any updates or activity.  Here's how.

Preparing Remote Preferred Servers

$
0
0

This is a very site specific script. A few changes will be required to work in your enviroment.

It would not take much work to use LDMS variables and make the script a Distribution Script

 

Each step does a pre-check to make sure the step has not already been preformed.

 

1. Access VM Host and add 75GB HDD to Guest

2. Format New Drive, Label LANDesk, Set Drive letter L:\

3. Create LDLogon UNC share

4. Create Software UNC share

5. Add Specifed Static IP for IIS Web

6. Create IIS Website

 

 

 

$Servers=New-ObjectSystem.Collections.ArrayList

$Offline=New-ObjectSystem.Collections.ArrayList

$subnet="255.255.255.0"

 

 

functionCreate-WMITrustee([string]$NTAccount){

 

    $user=New-ObjectSystem.Security.Principal.NTAccount($NTAccount)

    $strSID=$user.Translate([System.Security.Principal.SecurityIdentifier])

    $sid=New-Objectsecurity.principal.securityidentifier($strSID

    [byte[]]$ba= ,0 *$sid.BinaryLength     

    [void]$sid.GetBinaryForm($ba,0) 

    

    $Trustee= ([WMIClass] "Win32_Trustee").CreateInstance() 

    $Trustee.SID =$ba

    $Trustee

    

}

functionCreate-WMIAce{

     param(

          [string]$account,

          [System.Security.AccessControl.FileSystemRights]$rights

     )

    $trustee=Create-WMITrustee$account

    $ace= ([WMIClass] "Win32_ace").CreateInstance() 

    $ace.AccessMask=$rights 

    $ace.AceFlags= 0 # set inheritances and propagation flags

    $ace.AceType= 0 # set SystemAudit 

    $ace.Trustee =$trustee 

    $ace

}

FunctionCheckWeb($uRi){

      $ErrorActionPreference='SilentlyContinue'

      try{

      $HTTPcheck=Invoke-WebRequest-Uri$uRi-TimeoutSec 3

      $Reply=  $HTTPcheck.StatusCode

      }

      catch{

      $Reply= 0

      }

      If ($Reply-eq 200){return$true}else{Return$false}

}

FunctionGet_Disk_Info ($Server){

$fPSsession=New-PSSession$Server-Name"DiskCheck"-ErrorActionSilentlyContinue

      $DiskList=$null

 

 

                  #Site has Connection issues Retry 10x

                  $i= 10

            Do{

                  Remove-PSSession-Session$fPSsession

                  $fPSsession=New-PSSession$Server-Name"DiskCheck"-ErrorActionSilentlyContinue

                  $DiskList=$null

                  $DiskList=Invoke-Command-ErrorActionSilentlyContinue-Session$fPSsession-ScriptBlock {diskpart /s c:\list.txt }

                 

                  $i--

     

            }Until((($?)-and ($DiskList-match"Disk 3")) -or ($i-le 0))

 

Remove-PSSession-Session$fPSsession

IF (($?) -and ($DiskList-match"Disk 3")){

            Return$DiskList

     

}ELSE{

            Return"ERROR"

}

}#End Function

 

 

#Get Server List

      #Target list

      #Get-Content \\SERVER\SHARE\SERVERLIST.lst | Foreach-Object {[Void]$Servers.add($_)}

 

      #Single

      Read-Host"Preferred Server"| Foreach-Object {[Void]$Servers.add($_)}

     

# Get-Content C:\Targets\servers.txt | Foreach-Object {[Void]$Servers.add($_)}

 

#Create WWW ACL

$acl=Get-Acl\\SAMPLESERVER\c$\inetpub\wwwroot

      $acl.SetAccessRuleProtection($True, $False)

      $rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("IUSR","ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Allow")

            $acl.AddAccessRule($rule)

      $rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("LDadmin","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")

            $acl.AddAccessRule($rule)

      $rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("Domain Computers","ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Allow")

            $acl.AddAccessRule($rule)

      $rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")

            $acl.AddAccessRule($rule)

      $rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")

            $acl.AddAccessRule($rule)

#Create Share SD

[System.Security.AccessControl.FileSystemRights]$rights='FullControl'

      [System.Security.Principal.NTAccount]$account="EVERYONE"

      $sd= ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()

      $ace=Create-WMIAce$account$rights

      $sd.DACL += @($ace.psobject.baseobject) # append

      $sd.ControlFlags="0x4"# set SE_DACL_PRESENT flag

 

 

$total=$Servers.count

$Count= 1

Foreach($Servin$Servers){

 

      IF($Serv-eq"clwtlotl"){Continue} #Skip one off

     

      $Server=$Serv+"2"#Set to Secondary server

      Write-Host"---- Configuring $Server ---($Count of $total)"

      $Count++

      IF(!(Test-Connection$Server-Quiet-Count 2)){Write-Host"$server is offline";"$server is offline"|Out-File-FilePathC:\Temp\ServerSetupErrors.txt-Append;Continue} #Skip Offline Servers

     

      # get targ IP

      $IPis= [System.Net.Dns]::GetHostAddresses($Server)

      $IP=$IPis[0]

     

     

      $IPstring="{0}"-f , $ip

      $ip2=$IPstring.Split('.')

      if ($ip2[0] -eq"255"){"$Server on Corp Network... Skipping"; Continue } #Skip if server on Corp Subnet

     

      $ip2[-1] = 255 #Static VM IP

      $VMhost=$ip2-join'.'

     

      $ip2[-1] = 255 #Static Reserver IP for Preferred Server

      $LDMSip=$ip2-join'.'

     

      #Check if Landesk Drive Exist

      "List Disk"|Out-File\\$Server\C$\list.txt-Encoding"ASCII"

     

      #Get Disk info

      $DiskList=Get_Disk_Info$Server

      IF ($DiskList-eq"ERROR"){

                        Write-Host"$Server -- ERROR Checking Disk!"-BackgroundColorBlack-ForegroundColorRed

                  }

      $LDMSdisk=""

      [string]$LDMSdisk=$DiskList-match"75 GB"

      IF($LDMSdisk.Length-le 6){

     

            #Drive does not Exist - Connect to VM and Create

            Connect-VIServer$VMhost-User'USERNAME'-Password'PASSWORD'

            $VM=Get-VM | Where-Object {$_.Name -match$Server}

            $VM | New-HardDisk-CapacityGB 75 -StorageFormat"Thick"

           

            #Rescan windows drives

            $DiskList=Get_Disk_Info$Server

            IF ($DiskList-eq"ERROR"){

                  Write-Host"$Server -- ERROR Checking Disk!"-BackgroundColorBlack-ForegroundColorRed

            }

            $LDMSdisk=""

            [string]$LDMSdisk=$DiskList-match"75 GB"

            IF($LDMSdisk.Length-le 6){

                  Write-Host"$Server`: Error creating Drive";   

                  Continue}

      }ELSE{ Write-Host$Server 75GB HDDExists}

     

      IF (!(Test-Path\\$Server\L$ )){

            #Format Created Drive

           

            [string][int]$LDMSdiskNumber=$LDMSdisk.Substring(6,4)

            #Set Script

            "Select Disk "+$LDMSdiskNumber |Out-File\\$Server\C$\DiskConfig.txt-Encoding"ASCII"

            "Clean"|Out-File\\$Server\C$\DiskConfig.txt-Encoding"ASCII"-Append

            "Create partition primary"|Out-File\\$Server\C$\DiskConfig.txt-Encoding"ASCII"-Append

            "Select partition 1"|Out-File\\$Server\C$\DiskConfig.txt-Encoding"ASCII"-Append

            "Format FS=NTFS label=LANDesk noerr quick" |Out-File\\$Server\C$\DiskConfig.txt-Encoding"ASCII"-Append

            "assign letter=l"|Out-File\\$Server\C$\DiskConfig.txt-Encoding"ASCII"-Append

     

            #Execute DiskPart

            $PSsession=New-PSSession$Server-Name$Server

            $RetVal=Invoke-Command$PSsession {diskpart /s c:\DiskConfig.txt }

            Do{

            sleep 1

            Write-Host"Checking for diskpart process"

            }Until(!(Get-Process-ComputerName$Serverdiskpart-ErrorActionSilentlyContinue))

           

            IF(Test-Path\\$Server\C$\DiskConfig.txt ){

                  $RetVal=Remove-Item\\$Server\C$\DiskConfig.txt

            }

            Remove-PSSession-Session$PSsession

           

           

      }ELSE{ Write-Host$Server 75GB HDDAlreadyFormatted}

     

      #Create Folders

      IF (!(Test-Path\\$Server\L$\LDMS )){md-NameLDMS-Path\\$Server\l$ ;Set-Acl\\$Server\l$\LDMS$acl } #Set NTFS Permissions

      IF (!(Test-Path\\$Server\L$\LDMS\Software )){md-NameSoftware-Path\\$Server\l$\LDMS }

      IF (!(Test-Path\\$Server\L$\LDMS\LDLogon )){md-NameLDLogon-Path\\$Server\l$\LDMS }

      IF (!(Test-Path\\$Server\L$\LDMS\Software\Images )){md-NameImages-Path\\$Server\l$\LDMS\Software }

      IF (!(Test-Path\\$Server\L$\LDMS\Software\Packages )){md-NamePackages-Path\\$Server\l$\LDMS\Software }

      IF (!(Test-Path\\$Server\L$\LDMS\Software\Patches )){md-NamePatches-Path\\$Server\l$\LDMS\Software }

      IF (!(Test-Path\\$Server\L$\LDMS\Software\Profiles )){md-NameProfiles-Path\\$Server\l$\LDMS\Software }

      IF (!(Test-Path\\$Server\L$\LDMS\Software\Drivers )){md-NameDrivers-Path\\$Server\l$\LDMS\Software }

      IF (!(Test-Path\\$Server\L$\LDMS\Software\Scripts )){md-NameScripts-Path\\$Server\l$\LDMS\Software }

     

 

      #Create Share's

      $cshare= [WMIClass]"\\$server\root\cimv2:Win32_Share"

      IF(!(Test-Path\\$Server\LDlogon-ErrorActionSilentlyContinue )){NET SHARE Software \\$Server /DELETE 2>null;$cshare.Create("L:\LDMS\LDLOGON","LDLogon",0,$null,"",$null,$sd )}ELSE{Write-Host$ServerLDLogonUNCshareexists}

      IF(!(Test-Path\\$Server\Software-ErrorActionSilentlyContinue )){NET SHARE Software \\$Server /DELETE 2>null;$cshare.Create("L:\LDMS\SOFTWARE","Software",0,$null,"",$null,$sd )}ELSE{Write-Host$ServerSoftwareUNCshareexists}

 

      # Add .24 IP to Server

            #Get NIC Name

      IF(!(Test-Connection$LDMSip-count 2 -Quiet)){

      $index=get-wmiObject-ComputerName$Server-Class  Win32_NetworkAdapterConfiguration | Where-Object { ($_.ipenabled -eq"true") } | Select-objectInterfaceIndex

      $strNIC= @(get-wmiObject-ComputerName$Server-ClassWin32_NetworkAdapter | Where-Object { ($_.InterfaceIndex -eq$index.InterfaceIndex) }).NetConnectionId

            #Add IP

      $NetshArgs="`"$strNIC`" $LDMSip $subnet"

      $PSsession=New-PSSession$Server-Name$Server-ErrorActionStop

      $RetVal=Invoke-Command$PSsession {netsh in ip add address $args } -ArgumentList$NetshArgs

      Remove-PSSession-Session$PSsession

      }ELSE{ Write-Host"$Server -- IP $LDMSip already Exists"}

     

      # Update IIS

IF(!(CheckWeb"http://$LDMSip/software"   )){

      $script= {

      $strName="LANDesk"

      $strPath="L:\LDMS"

      #Load WebAdmin Snap-in if needed.

      $iisVersion=Get-ItemProperty"HKLM:\software\microsoft\InetStp";

      if ($iisVersion.MajorVersion -eq 7){

            if ($iisVersion.MinorVersion -ge 5){

                  Import-ModuleWebAdministration;

                  }else{

                  if (-not (Get-PSSnapIn | Where {$_.Name -eq"WebAdministration";})){

                        Add-PSSnapInWebAdministration;

            }

            }

          }

      #Create Web Site

            #New-Website –Name $strName –Port 80 –PhysicalPath $strPath -IPAddress $LDMSip -force

            New-Website –Name $strName–Port 80 –PhysicalPath $strPath -IPAddress $args[0] -force

            <#Convert Folders to App

            ConvertTo-WebApplication "IIS:\sites\LANDesk\LDLogon" -Force

            ConvertTo-WebApplication "IIS:\sites\LANDesk\Software" -Force

            #>

            #Directory Browsing

            Set-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -Value $true -PSPath IIS:\sites\LANDesk\Software

            Set-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -Value $true -PSPath IIS:\sites\LANDesk\LDLogon

      }

      $PSsession=New-PSSession$Server-Name$Server-ErrorActionStop

      Invoke-Command-ComputerName$Server-ScriptBlock$script-ArgumentList$LDMSip

      Remove-PSSession-Session$PSsession

}ELSE{ Write-Host"$Server -- Website Exists"}

      #Cleanup

      Get-PSSession | Remove-PSSession

      del\\$Server\C$\list.txt

}#Next Server

Top Notch Places

$
0
0

Here is a run down of some of the areas that you should take a look at and may choose to Follow (subscribe to).

 

Enhancement Requests

You need to have registered and logged in to access the ER or Ideas area of our site.  Ideas are organised by product.  You can search, create new and vote on ideas within this section.

 

Product Downloads

Subscribe to this area if you want to know when a new service pack or patch is made available.  To subscribe, click the Follow button after following the above link.

 

Momentum

A program designed to help you understand the power of your current LANDESK products, and improve your ROI with free online training, downloadable resources, and the ability to provide feedback directly to our product team.

 

LANDESK Share IT

A place where customers can share reports, utilities, designs, ideas, or success stories with the rest of the community then please do so here.

 

LANDESK Systems and Security

LANDESK IT Service Management

Wavelink

We've organised the knowledge base and main forums into the product sets that they relate to.  Each area contains knowledge base documents and forum discussions relating to you area of interest.

Data Analytics Training Live Q&A Extended Session on July 1st with LDDA Expert

$
0
0

More details of how to get involved can be found within the announcement within our Momentum area.  Don't forget to click Follow when in Momentum to be notified when new training and downloads are posted!  More on how to follow.

It's Going To Be A Pink Summer

$
0
0

For my first blog post, I thought I'd start with a subject close to my heart, ITIL! As you may be aware, v7.5 was the last time we fully certified release of LANDESK Service Desk against the ITIL processes. We certified it against the v3.1 criteria and managed to attain all 15 of the processes. Well, now we're back on the Pink verification trail and looking to fully certify v7.7.2 against the 2011 criteria. The crack team that LANDESK have selected to spend the next couple of months working with Pink to achieve this is myself, LaraHellman and Ian.aitchison. ITIL2011 has introduced a few new concepts which differentiate it from v3.1 and we're going to have to meet those if we want to be successful. The great news for us is the flexibility of the Service Desk toolset which gives us an ability to quickly change and modify an existing design to align it with the changing landscape of ITIL. As with the v3.1 process, we intend to publish a document and supporting design content on community once we're done to share our experience and designs. In the meantime, I'll pop up a few posts as we go to let you know about the experience and pass on any gems of ITIL goodness that we acquire along the way.


Use a PowerShell command to kick off a provisioning task

$
0
0

Prerequisites:

 

Computer must have minimum PowerShell 2.0
installed. This can be easily patched with Vulnerability ID 968930 – Title Windows
Management Framework Core package (Windows PowerShell 2.0 and WinRM 2.0).

 

Net framework 3.5

 

This will work from Windows XP and up.

 

 

PowerShell Scripts

 

 

Copy and paste one of the following scripts below into a
notepad file. Make sure to change the highlighted items in blue. Save your file
as a .ps1 extension and put it in an
accessible network path (example: \\coreserver\ldlogon\directoryname).
When the scripts run they will create a LANDESK scheduled task with the
following name: Task name – Computer name – Date.

 

 

PowerShell Script (Plain text Authentication):


$username = "DOMAIN\USERNAME"
$password = ConvertTo-SecureString –String "PASSWORD" –AsPlainText -Force
$mycreds = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $username, $password

$coreServerName = 'CORESERVER'
$templateName = 'PROVISIONING TEMPLATE NAME'
$deliveryMethod = 'Standard policy-supported push distribution'


$taskName = 'Provisioning Task'
$Computer = $env:COMPUTERNAME
$Date = Get-Date
$ScheduleTask = $templateName + " " + $Computer + " " + $Date

$mbsdk = New-WebServiceProxy -uri http://$coreServerName/MBSDKService/MsgSDK.asmx?WSDL -Credential $mycreds
$connected = $mbsdk.ResolveScopeRights()
$templates = $mbsdk.GetProvisioningTemplates()

$templateID = ($templates.ProvisioningTemplates | where-object {$_.Name -eq $templateName}).id
$taskID = $($mbsdk.CreateProvisioningTask($ScheduleTask, $templateID, $deliveryMethod, $false)).TaskID
$rc = $mbsdk.AddDeviceToScheduledTask($taskID, $env:COMPUTERNAME)
$rc = $mbsdk.StartTaskNow($taskID, "All")

 

 

PowerShell Script (Prompt for Authentication):

 

$mycreds = Get-Credential
$coreServerName = 'CORESERVER'
$templateName = 'PROVISIONING TEMPLATE NAME'
$deliveryMethod = 'Standard policy-supported push distribution'


$taskName = 'Provisioning Task'
$Computer = $env:COMPUTERNAME
$Date = Get-Date
$ScheduleTask = $templateName + " " + $Computer + " " + $Date

$mbsdk = New-WebServiceProxy -uri http://$coreServerName/MBSDKService/MsgSDK.asmx?WSDL -Credential $mycreds
$connected = $mbsdk.ResolveScopeRights()
$templates = $mbsdk.GetProvisioningTemplates()

$templateID = ($templates.ProvisioningTemplates | where-object {$_.Name -eq $templateName}).id
$taskID = $($mbsdk.CreateProvisioningTask($ScheduleTask, $templateID, $deliveryMethod, $false)).TaskID
$rc = $mbsdk.AddDeviceToScheduledTask($taskID, $env:COMPUTERNAME)
$rc = $mbsdk.StartTaskNow($taskID, "All")

 

 

Delivery methods

 

 

A challenge with running PowerShell scripts on a workstation
is that a PowerShell execution policy needs to be set on each device. However,
the following methods below will by-pass the execution policy and allow the
script to kick off as long as the device is on the domain. The two options I
have used are Launchpad links or a custom vulnerability.

 

 

Custom Patch Definition

 

Setup your own detection methods by query or registry. Setup the platform and then use the following for the patch install commands. Make sure to use the location of where you saved the PowerShell script.

 

Add - Set to Execute file and use the following:

PATH: %windir%\system32\WindowsPowerShell\v1.0\powershell.exe

ARGS: powershell.exe -executionpolicy bypass -command '\\CORESERVER\ldlogon\Script.ps1'

 

 

    

Launchpad LINK

 

Create a type executable link and choose how it will appear
on the user’s workstation. Input the following lines and update the path in
blue to point to your PowerShell script.

 

 

Target: %windir%\system32\WindowsPowerShell\v1.0\powershell.exe

 

Command line arguments: powershell.exe -executionpolicy bypass -command '\\CORESERVER\ldlogon\path\script.ps1'

 

Start in: %windir%\system32

 

 


Adding PowerShell to Your Windows PE Boot Image

$
0
0

I often find myself wanting to do things from the Windows PE environment and I can't find a program that will do what I want. By default, there is no scripting functionality in the Windows PE environment that available on your LANDESK Management Suite (LDMS) core server. So, I decided that to find out how to add PowerShell to Windows PE. It turned out to be fairly simple. The examples I show here are all in PowerShell, but you can also modify your Windows PE boot image using DISM.EXE. The examples were developed and tested on a LDMS 9.6 core server running on Windows 2012 R2; the examples should work on a LDMS 9.5 core server on Windows 2008 R2 but may require some modification. You will also need to have the Windows Assessment and Deployment Kit (ADK) installed on your core server. On my core server, LDMS is installed on the E: drive and the Windows Assessment and Deployment Kit is installed on C:.

 

Because the path is so long, the first thing I did was create a variable that holds the path to the Windows ADK.

$WindowsADK='C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs'

 

Then, I had to mount the WIM file that I wanted to modify.

Mount-WindowsImage -Path 'E:\mount'-ImagePath 'E:\Program Files\LANDesk\ManagementSuite\landesk\vboot\boot.wim'-Index 1

 

After that, it was a simple matter of adding the right packages to the WIM in the correct order. Microsoft provides a document, WinPE: Add Packages (Optional Components Reference), that lists the optional components available for Windows PE and their dependencies. Following the dependency list in the document, I added the following packages: WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell.

Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-WMI.cab" -Path 'E:\mount'
Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-NetFX.cab" -Path 'E:\mount'
Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-Scripting.cab" -Path 'E:\mount'
Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-PowerShell.cab" -Path 'E:\mount'

 

There are also several additional PowerShell cmdlet providers available, so I added those as well.

Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-DismCmdlets.cab" -Path'E:\mount'
Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-SecureBootCmdlets.cab" -Path 'E:\mount'
Add-WindowsPackage -PackagePath "$WindowsADK\WinPE-StorageWMI.cab" -Path'E:\mount'

 

All that is left to do now is to save the image file to disk.

Dismount-WindowsImage -Path 'E:\mount' -Save

 

Now I have a Windows PE Boot Image that has PowerShell support and I can call PowerShell scripts during the Pre-OS Installation, OS Installation, and Post-OS Installation phases of my provisioning template.

How do I earn points and badges on the community?

$
0
0

As you may be aware, you can now hover over the points on a user's profile in order to see a breakdown of what actions earn points.  I have also just updated this document with a breakdown of each action with links explaining how to earn them: Earning Community Points and Achievement Badges

Customer Surveys... What to ask and when to ask it.

$
0
0

Introduction

 

As part of the ITIL process we're going through, there is a requirement to be able to generate a customer survey after processes have been completed. As with some areas of ITIL, this was a requirement to be able to do it rather than an assessment of whether the manner in which the survey was designed and distributed was actually in line with any standard or best practice or was common sense for that matter. This got me thinking about a number of conversations that I have had with customers who are looking to introduce surveys and also some of the experiences that I have had. So here are some of my thoughts about the subject and as will always be the case, I'm not proclaiming this to a definitive approach, so please feel free to comment and feedback.

 

To Survey Or Not

 

I guess the very first thing that you need to consider is why do I want to offer feedback? This may seem like an obvious question, but I have seen too many situations where there is a feedback step in a process yet no real plan to review and act upon the resulting information. So, very first comment is... If you're not going to do anything with it, don't do it! Now this may not fall in line with corporate standards and maybe even ISO compliance (Although in this case, I would rather hope there is some follow up process!), but I would still argue that if there is little or no action then all that will happen is that it will be ignored and your customers won't bother giving either good or bad feedback.

 

If you are going to take the survey path and use it as a tool to help improve your service delivery, be open about the whole process. Publicise what you are going to do and how you'd like your customers to response and above all, make sure you are being open about what you are being told. It may be a painful exercise when you start, but it will generate a level of trust from you customers which will help in the future and it will also help show how you are improving. Having got that out of the way, let's look at some of the more relevant questions based on the fact that we are going to act upon our feedback process.

 

When Do I Survey?

 

The question of when do I survey is also linked to the content which we will discuss shortly. Putting that aside for a moment, you have opportunities to initiate a survey process at various points in the service delivery lifecycle. The most obvious of these is at the end of a specific instance of delivering support. This is usually linked to the Incident Management and Request Fulfilment processes. By definition, we will have many opportunities to initiate that survey as that takes into account the vast majority of the Service Desk interactions with your customers, so this is a good starting point, but bare in mind all this is doing is initiating the process, it's not going to get you a mass response over night or at all for that matter. Being realistic about the level of response to this survey approach is important. Also remember, with this survey, you will be capturing the gut reaction of the customer to the last thing you did for them. Having said that, you can use that as a barometer of that persons feelings towards IT.

 

Moving away from the survey based on support calls, I think we can also gain valid feedback through two other survey approaches. The first of these is the formal periodic survey process. How often these are generated is up to you, but I would suggest that no more frequently that every six months as, again, you need to be realistic about the response rates. With these surveys you are looking to gain an understanding of the overall feelings of your customers to the service you are providing. Whether you choose to provide these on a service by service basis, or as an overall impression, it will require you to set aside time to analyse the responses and act upon them.

 

The second approach is to provide an 'on-demand' survey process. It may need to be a little more generic that the periodic one, but this gives your customers a mechanism by which they can comment of the service at a more general level that fits between the formal survey and the regular post-support ones. The expectation on getting responses to this one should be low, but as we'll see when we talk about content later, it can support the post-support ones.

 

Who Do I Survey?

 

This can be as hotly debated (if people actually have heated debates about customer surveys) as the subject of content, but there is a basic challenge that I believe needs to be looked at when you are making your decision about this. So I am not going to tell you what the answer to the question is, but explain the challenge and leave you to determine the appropriate solution for your business. The challenge is the sample size that you end up with. This is probably most relevant to the support surveys and as I have already mentioned, you need to realistic about the percentage of responses you are going to get to any of the survey approaches that I have talked about. If you don't get enough responses then, whilst you may get some useful individual feedback, you don't get the real feel for the perception of your customers. Admittedly, as with any form of survey, the chances are that you will get responses from ends of the scale and not those in the middle.

 

The two factors that usually combine to determine the number of surveys initiated is the limiting of the generation to every 'nth' instance and excluding individuals from the survey process entirely. If you choose to limit the number of support surveys that are generated to one in every ten, for example, then you are already only initiating a survey based on 10% of the calls. If your belief is that you are only going to get a 10% response, then you're down at 1% at best. Is that a useful level of responses and what about the other 90% of the calls? What if every support call we made a mess of was in the 90%? The exclusion of customers from the survey process could be viewed in the same way that we make certain customers VIPs in our system. You could even argue that there is a direct correlation between the two. Allowing someone to opt out themselves may be an approach that you can adopt. It takes away the decision from IT (but you'll still get blamed probably if they want to complete one and can't), but I would still have a mechanism for knowing who those people are.

 

What Do I Ask?

 

To finish off this blog, I am going to look at the content of the surveys that I have talked about. To summarise, I see there being the potential for three types of survey, the frequent support survey, the periodic service survey and the on-demand survey. Let's consider each of these and how we should approach the survey content we include. The overriding factors in determining the structure of the survey for me is what state is the customer in when they are presented with the survey to complete and what do we need to get out of their response. If we consider the support survey they will get every time we complete a support call for them, they are not going to want to spend any length of time answering a whole tract of questions. If you present them with anything that takes more than a few moments to respond to, you'll get nothing back, so I recommend we keep it really simple. Was it good, bad or indifferent. That's all that we need. Maybe we add a comments box, especially if it's a bad response, but no more than that.

 

The on-demand survey could be the more detailed one that allows the customer to back up their quick response with some more detailed feedback. The key point here is that they are choosing to spend more time providing you with feedback and as such it will be meaningful. You could even go so far as to refer to that possibility when asking them for the quick response. So here's the trick, design the one you'd like to make the support survey, keep in the overall satisfaction selection and put everything else on the on-demand one.

 

That leaves us with the periodic service survey. Here you should be looking for more content and more feedback. Remember that you are only asking the customer to complete this a couple of times a year, so they will have the expectation that you need some of their time, but still don't go overboard. There is a limit to what any of us are prepared to do when it comes to surveys. I would also make sure that you publicise this and remember what I said at the beginning, be open about the results. Customer trust in your analysis and actions based on their feedback will go a long way.

 

What To Do With The Answers?

 

Now it's looking good, we have designed all our survey approaches. We have appropriate content in each one and we have decided who is getting asked and when. It's all great and then, amazingly enough, we start to get completed feedback from our customers. Yes they do exist and some are very happy and sadly some are not. Remember why we're doing this. We're trying to make out service better, so how do we ensure we can help manage our Continual Service Improvement. With the periodic surveys you need to allocate time to look at the responses and identify the good and bad that has come out the process. This will be a more formal exercise anyway, so you should be geared up for this.

 

Where we can start to make some real gains is in the way we respond to the support survey. This is where Service Desk helps us if we do some simple design in the processes that have launched the survey. The thing we don't want to do with those surveys is to let the bad responses just slip through and at the end of the month pick them up in our stats. All we need to do is add a decision in the process that traps the bad response, changes the status and assigns it to the team leader of the resolver group, for example. Now we can act on bad feedback as soon as it's been given. That act alone can go a long way to address the issues that the customer has.

 

In Conclusion

 

I hope this has helped anyone who is looking to adopt a customer survey process into the service desk operation. The exercise in setting this up should be simple, however you need to remember that if you go down this route, to get the best out of it, it must be easy for the customer to provide the feedback and you must have the appropriate plans in place to act upon it.

Powershell script for duplicate id detected email trigger

$
0
0

Original links

1. event log action

2. powershell script

 

 

Modified Script:

Clear-Host

 

# ========================

# Collection Data Section

# ========================

 

Function EventID-To-HTML($ComputerName = $env:COMPUTERNAME)

          {

           $EventResult = wevtutil qe Application "/q:*[System[(EventID=2390)]]" /f:renderedxml /rd:true /c:1

    if ($EventResult -eq $null){exit}

           $xmlEventResult = [xml]$EventResult

 

          $EventDate = $xmlEventResult.Event.System.TimeCreated.SystemTime

           $EventDate = Get-Date $EventDate -format ('MM-dd-yyyy hh:mm:ss')

         

           $htmlStart = "<HTML>

                           <HEAD>

                             <style>

                               body {background-color:rgb(238, 238, 238);}

                               body, table, td, th {font-family:Calibri; color:Black; Font-Size:11pt}

                                                th {font-weight:bold; background-color:rgb(78, 227, 48);}

                                                td {background-color:rgb(255, 190, 0);}

                             </style>

                           </HEAD>

                         <BODY><div align=center>

                         <h2><b><br><br>Alert Type: <span Style='font-style:normal; color:Blue'>Duplicate ID Detected</span></b></h2>

                         <p><b><br>This event occurred at: <span Style='font-style:italic; color:Blue'>$EventDate" # on $ComputerName</span></b></p>"

           $htmlEnd = ''

           $htmlStart

 

   $xmlEventResult.Event.RenderingInfo | Select-Object message, @{Label = "Value"; Expression={$_."#Text"}} | Group-Object -Property __Class |

           ForEach-Object {$_.Group | Select-Object -Property * | ConvertTo-HTML -Body ('' -f "$_.Name")}

        

           $htmlStart = ''

         

           $htmlStart = $htmlStart + "<br><i><span Style='color:red'>This message has been generated by a script</i> <br><i>Please DO NOT reply.</i></div>"

           $htmlStart

         

           $htmlEnd = ''

           $htmlEnd

          }

 

# ======================

# Sending Email Section

# ======================

 

$strFrom = "LANDESK Core Server <LDMS@company.com>"

$strTo = "David Watson email@company.com"

$strSubject = "*** DUPLICATE ID Detected ***"

$strSMTPServer = "smtp.company.com"

 

$objEmailMessage = New-Object system.net.mail.mailmessage

$objEmailMessage.From = ($strFrom)

$objEmailMessage.To.Add($strTo)

$objEmailMessage.Subject = $strSubject

$objEmailMessage.IsBodyHTML = $true

$objEmailMessage.Body = EventID-To-HTML

 

$objSMTP = New-Object Net.Mail.SmtpClient($strSMTPServer)

$objSMTP.Send($objEmailMessage)

October Hangout for MVPs

$
0
0

We held a video hangout between a number of the LANDESK Product Management team and the community MVPs yesterday.  The main agenda was covering product roadmap plans and inviting questions from our community MVPs directly to Product Management.

 

Who are the MVPs?  All the MVP members show a MVP badge next to their names when posting on the community.Community-MVP_badge-647 (1).gif

 

For more information about the LANDESK Community MVP program please see LANDESK Community MVP Program

Welcome to LANDESK APAC Support

$
0
0

Dear APAC customers,

 

My name is Leon and I’m responsible for LANDESK products support in APAC region including the product line of LDMS/LDSS, Wavelink & Shavlik.

 

I encourage you to reach me directly if you think you need to, of course including your open tickets which you think doesn’t go as you expected or any other topics relating support.

 

Below is my contact information:

Desk: +86 10 8515 3668 Ext 212

Mobile: +86 186 125 19053

Email: LiQiang.Han@LANDESK.com

 

Regards,

Leon Han


Single Sign On (portal and community) - Now Live!

$
0
0

In response to customer requests we have setup single sign-on between Community and the Support Portal.  This means that there is no longer a requirement to separately login to each site.  If you experience any problems following this change please contact us via our feedback form.

New videos on the community

$
0
0

There have been a number of new short videos added to the community in recent weeks, and more are on their way.  I've been asked about an easy way to locate these videos because they can be posted in a number of different areas within the community depending on which topic they refer to.

 

Click the links below to see a list of video content

 

I've also published a list of useful tags (you can drill into shared themes via a shared tag) here: Useful tagsSimply open that document and click on the tag to view the content that you are interested in.

Blog.landesk.com : Asset Management On-Boarding and Off-Boarding Users - The Pitfalls

Removal of video capture facility on the portal

$
0
0

Unfortunately due to factors outside of our control we will be removing the video capture facility on the portal within the next 2 months.  The provider of this service is withdrawing it and unfortunately we have not been able to find a suitable equivalent which can be integrated into our portal. 


I am aware that some customers have found this facility very useful when explaining the symptoms of issues to support and I apologise for the inconvenience that this change may cause you. 


If you do want to look for non-integrated alternatives there are free video capture tools available to download: you may like to investigate Jing or Problem Steps Recorder for example.  If you attach the video to the support case the support team will be very happy to review this.  For larger videos please host the video first and post the support teams a link.

 

Kind regards

Karen

New site feedback mechanism now live

$
0
0

You may notice a new site feedback bar appearing on the right of the portal and community sites today.  We wanted to make it easy for customers to send through feedback about what you want to see more of and where we should focus to improve.  I look forward to hearing from you!

Viewing all 80 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>