Retrieves the serial number from a Dell computer, then connects to the Internet and displays the warranty information.
[wpdm_file id=”14″]
Retrieves the serial number from a Dell computer, then connects to the Internet and displays the warranty information.
[wpdm_file id=”14″]
A script to find orphaned vmdk’s on your ESX infrastructure.
Source here: http://communities.vmware.com/docs/DOC-6960
[wpdm_file id=”13″]
If you want to run it to ESX 3.5 make sure you include the snapshot files extension for it (000001.vmdk and so on).
In the following example 00001 and 00002 are added:
#
# Purpose : List all orphaned vmdk on all datastores in all VC's
# Version: 1.0
# Author : HJA van Bokhoven
#Main
$arrayVC = "YourVirtualCenter"
$OutputFile = "c:\OrphanedVMDK.txt"
Foreach ($strVC in $arrayVC)
{
Connect-VIServer $strVC
$arrUsedDisks = Get-VM | Get-HardDisk | %{$_.filename}
$arrDS = Get-Datastore
Foreach ($strDatastore in $arrDS)
{
$strDatastoreName = $strDatastore.name
Write-Host $strDatastoreName
$ds = Get-Datastore -Name $strDatastoreName | %{Get-View $_.Id}
$fileQueryFlags = New-Object VMware.Vim.FileQueryFlags
$fileQueryFlags.FileSize = $true
$fileQueryFlags.FileType = $true
$fileQueryFlags.Modification = $true
$searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec
$searchSpec.details = $fileQueryFlags
$searchSpec.sortFoldersFirst = $true
$dsBrowser = Get-View $ds.browser
$rootPath = "["+$ds.summary.Name+"]"
$searchResult = $dsBrowser.SearchDatastoreSubFolders($rootPath, $searchSpec)
$myCol = @()
foreach ($folder in $searchResult)
{
foreach ($fileResult in $folder.File)
{
$file = "" | select Name, FullPath
$file.Name = $fileResult.Path
$strFilename = $file.Name
IF ($strFilename)
{
IF ($strFilename.Contains(".vmdk"))
{
IF (!$strFilename.Contains("-flat.vmdk"))
{
IF (!$strFilename.Contains("delta.vmdk"))
{
IF (!$strFilename.Contains("000001.vmdk"))
{
IF (!$strFilename.Contains("000002.vmdk"))
{
$strCheckfile = "*"+$file.Name+"*"
IF ($arrUsedDisks -Like $strCheckfile){}
ELSE
{
$strOutput = $strDatastoreName + " Orphaned VMDK Found: " + $strFilename
$strOutput | Out-File $Outputfile -width 150 -Append
}
}
}
}
}
}
}
}
}
}
}
Use the following VBS script to find the local Asset Tag from Dell:
Set objWMIservice = GetObject("winmgmts:\\.\root\cimv2") set colitems = objWMIservice.ExecQuery("Select * from Win32_BIOS",,48) For each objitem in colitems Wscript.echo "Dell Service Tag: " & objitem.serialnumber Next
Or download the script here:[wpdm_file id=12]
With the following script you can move the default IIS 7 installation path from c:\inetpub to every disk you want.
@echo off
IF "%1" == "" goto err
setlocal
set MOVETO=%1:\
REM simple error handling if drive does not exist or argument is wrong
IF NOT EXIST %MOVETO% goto err
REM Backup IIS config before we start changing config to point to the new path
%windir%\system32\inetsrv\appcmd add backup beforeRootMove
REM Stop all IIS services
iisreset /stop
REM Copy all content
REM /O - copy ACLs
REM /E - copy sub directories including empty ones
REM /I - assume destination is a directory
REM /Q - quiet
REM echo on, because user will be prompted if content already exists.
echo on
xcopy %systemdrive%\inetpub %MOVETO%inetpub /O /E /I /Q
@echo off
REM Move AppPool isolation directory
reg add HKLM\System\CurrentControlSet\Services\WAS\Parameters /v ConfigIsolationPath /t REG_SZ /d %MOVETO%inetpub\temp\appPools /f
REM Move logfile directories
%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/sites -siteDefaults.traceFailedRequestsLogging.directory:"%MOVETO%inetpub\logs\FailedReqLogFiles"
%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/sites -siteDefaults.logfile.directory:"%MOVETO%inetpub\logs\logfiles"
%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/log -centralBinaryLogFile.directory:"%MOVETO%inetpub\logs\logfiles"
%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/log -centralW3CLogFile.directory:"%MOVETO%inetpub\logs\logfiles"
REM Move config history location, temporary files, the path for the Default Web Site and the custom error locations
%windir%\system32\inetsrv\appcmd set config -section:system.applicationhost/configHistory -path:%MOVETO%inetpub\history
%windir%\system32\inetsrv\appcmd set config -section:system.webServer/asp -cache.disktemplateCacheDirectory:"%MOVETO%inetpub\temp\ASP Compiled Templates"
%windir%\system32\inetsrv\appcmd set config -section:system.webServer/httpCompression -directory:"%MOVETO%inetpub\temp\IIS Temporary Compressed Files"
%windir%\system32\inetsrv\appcmd set vdir "Default Web Site/" -physicalPath:%MOVETO%inetpub\wwwroot
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='401'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='403'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='404'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='405'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='406'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='412'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='500'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='501'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
%windir%\system32\inetsrv\appcmd set config -section:httpErrors /[statusCode='502'].prefixLanguageFilePath:%MOVETO%inetpub\custerr
REM Make sure Service Pack and Hotfix Installers know where the IIS root directories are
reg add HKLM\Software\Microsoft\inetstp /v PathWWWRoot /t REG_SZ /d %MOVETO%inetpub\wwwroot /f
reg add HKLM\Software\Microsoft\inetstp /v PathFTPRoot /t REG_SZ /d %MOVETO%inetpub\ftproot /f
REM Do the same for x64 directories
if not "%ProgramFiles(x86)%" == "" reg add HKLM\Software\Wow6432Node\Microsoft\inetstp /v PathWWWRoot /t REG_EXPAND_SZ /d %MOVETO%inetpub\wwwroot /f
if not "%ProgramFiles(x86)%" == "" reg add HKLM\Software\Wow6432Node\Microsoft\inetstp /v PathFTPRoot /t REG_EXPAND_SZ /d %MOVETO%inetpub\ftproot /f
REM Restart all IIS services
iisreset /start
echo.
echo.
echo ===============================================================================
echo Moved IIS7 root directory from %systemdrive%\ to %MOVETO%.
echo.
echo Please verify if the move worked. If so you can delete the %systemdrive%\inetpub directory.
echo If something went wrong you can restore the old settings via
echo "APPCMD restore backup beforeRootMove"
echo and
echo "REG delete HKLM\System\CurrentControlSet\Services\WAS\Parameters\ConfigIsolationPath"
echo You also have to reset the PathWWWRoot and PathFTPRoot registry values
echo in HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp.
echo ===============================================================================
echo.
echo.
endlocal
goto success
REM error message if no argument or drive does not exist
:err
echo.
echo New root drive letter required.
echo Here an example how to move the IIS root to the F:\ drive:
echo.
echo MOVEIISROOT.BAT F
echo.
echo.
:success
Or download the file
[wpdm_file id=11]
Another great script from Arnim van Lieshout.
With this script you can change all ESX root passwords at once:
#
# This script changes the root password on all ESX hosts in the esxservers.txt textfile
#
# Add VI-toolkit #
Add-PSsnapin VMware.VimAutomation.Core
Initialize-VIToolkitEnvironment.ps1# Get old root credential
$oldrootPassword = Read-Host “Enter old root password” -AsSecureString
$oldrootCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist “root”,$oldrootPassword
# Get new root credential
$newrootPassword = Read-Host “Enter new root password” -AsSecureString
$newrootCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist “root”,$newrootPassword
$newrootPassword2 = Read-Host “Retype new root password” -AsSecureString
$newrootCredential2 = new-object -typename System.Management.Automation.PSCredential -argumentlist “root”,$newrootPassword2
# Compare passwords
If ($newrootCredential.GetNetworkCredential().Password -ceq $newrootCredential2.GetNetworkCredential().Password) {
# Create new root account object
$rootaccount = New-Object VMware.Vim.HostPosixAccountSpec
$rootaccount.id = “root”
$rootaccount.password = $newrootCredential.GetNetworkCredential().Password
$rootaccount.shellAccess = “/bin/bash”
# Get list of Host servers from textfile to change root password on
Get-Content esxservers.txt | %{
Connect-VIServer $_ -User root -Password $oldrootCredential.GetNetworkCredential().Password -ErrorAction SilentlyContinue -ErrorVariable ConnectError | Out-Null
If ($ConnectError -ne $Null) {
Write-Host “ERROR: Failed to connect to ESX server:” $_
}
Else {
$si = Get-View ServiceInstance
$acctMgr = Get-View -Id $si.content.accountManager
$acctMgr.UpdateUser($rootaccount)
Write-Host “Root password successfully changed on” $_
Disconnect-VIServer -Confirm:$False | Out-Null
}
}
}
Else {
Write-Host “ERROR: New root passwords do not match. Exiting…”
}
Example esxservers.txt:
esx001.yourdomain.local
esx002.yourdomain.local
esx003.yourdomain.local
esx004.yourdomain.local
Download: [wpdm_file id=9]
Looking for new scripts i’ve stumbled opon the following script to list all vm’s to an excel sheet and display the total assigned diskspace:
# Define Variables
$outputFile = 'C:\VMDiskCapacity.csv'
$VCServer = "vcenter.mydomain.com"
$username = "vcenter_admin"
$pass = "password"
##################
# Add VI-toolkit #
##################
Add-PSsnapin VMware.VimAutomation.Core
Initialize-VIToolkitEnvironment.ps1
# Connect server
$VC = Connect-VIServer -Server "$VCServer" -User "$username" -Password "$pass"
$myCol = @() # Prepare output collection
$VMs = Get-VM | sort Name # Get all VMs (sorted)
$counter = 0 # Initialize counter for progress bar
ForEach ($VM in $VMs) # Loop through VMs
{
$counter++ # Increase counter for progress bar
Write-Progress -Activity "Gathering disk information" -Status "Processing VM $VM" -PercentComplete (100*($counter/$VMs.count)) # Display progress bar
$myObj = "" |
select VM, TotalDiskSizeGB # Create output object
$myObj.VM = $VM.Name # Virtual Machine Name
$TotalDiskSizeKB = 0
ForEach ($DISK in $VM.HardDisks) # Loop through VM's harddisks
{
$TotalDiskSizeKB += $DISK.CapacityKB
}
$myObj.TotalDiskSizeGB = [math]::Round(($TotalDiskSizeKB * 1KB / 1GB),0) #Disk Size in GB
$myCol += $myObj # Add output to collection
}
$myCol | Export-Csv $outputFile -NoTypeInformation # Export output to csv
A script to automatically create documentation for ESX hosts. The output is in HTML format and can be emailed to you directly.
Download the script (v3.0): [wpdm_file id=”7″]
For more information or new versions of the script look at the following site:
In my previous post i have written about a script that gave an output of the datastore usage of your esx hosts. For this you need to run a powershell script against your virtual center server.
Before you can run this script you have a few requirement, this requirements are:
After installing the Microsoft PowerShell and VI Toolkit for Windows you have to place your scripts in the script directory (c:\program files\vmware\infrastructure\vitoolkitforwindows\scripts)
Check your rights, it should be unrestricted: “powershell get-executionpolicy”.
If your result is: “Restricted”, type in the following command: “powershell set-executionpolicy unrestricted”
Now you can run your scripts by starting the “VMware VI Toolkit (for windows)”, this option can be found under start > programs > vmware > vmware vi toolkit
Using Microsft PowerShell and the VI Toolkit for Windos you can do some nice stuff. When looking for a way to make reports for a customer of my i’ve stumbled upon a few scripts.
All you have to do is to install Microsoft Powershell, VI toolkit for windows and have Office on your machine. When running the powershell script [wpdm_file id=”4″] i get the following output:
Contents of datastore.ps1:
if ((Test-Path REGISTRY::HKEY_CLASSES_ROOT\OWC11.ChartSpace.11) -eq $False)
{
Write-Host "This script requires Office Web Components to run correctly, please install these from the following website: http://www.microsoft.com/downloads/details.aspx?FamilyId=7287252C-402E-4F72-97A5-E0FD290D4B76&displaylang=en"
exit
}
connect-VIServer yourserver
$Caption = "Datastore Usage %"
$categories = @()
$values = @()
$chart = new-object -com OWC11.ChartSpace.11
$chart.Clear()
$c = $chart.charts.Add(0)
$c.Type = 4
$c.HasTitle = "True"
$series = ([array] $chart.charts)[0].SeriesCollection.Add(0)
Get-datastore |Sort-Object FreeSpaceMB -Descending | foreach-object {
$capacitymb = $_.CapacityMB
$FreeSpaceMB = $_.FreeSpaceMB
$UsedSpace = $capacitymb - $freespacemb
$perc = $UsedSpace / $capacitymb * 100
$categories += $_.Name
$values += $perc * 1
}
$series.Caption = $Caption
$series.SetData(1, -1, $categories)
$series.SetData(2, -1, $values)
$filename = (resolve-path .).Path + "\Chart.jpg"
$chart.ExportPicture($filename, "jpg", 800, 500)
invoke-item $filename
To load test your vcpu’s you can use the following script:
[wpdm_file id=”3″]
Or cut and paste the following text into a vbs file:
Dim goal
Dim before
Dim x
Dim y
Dim i
goal = 2181818
Do While True
before = Timer
For i = 0 to goal
x = 0.000001
y = sin(x)
y = y + 0.00001
Next
y = y + 0.01
Loop