VMware ortamı çalıştırıyorsanız, PowerCLI To Check VMware Tools Status’u kullanmanın bir yolu olup olmadığını merak ediyor olabilirsiniz. Komut satırı üzerinden kontrol edilmesinin nedeni, sanal makineleri toplu olarak kontrol edebilmenizdir. Bu işlem GUI üzerinden de yapılabilir ancak zaman alan ve büyük ortamlarda uygulanması pek mümkün olmamaktadır.
Get-VM -Name hedefpc komutunu her çalıştırdığınızda, Ad, PowerState, NumCPU’lar ve MemoryGB’nin varsayılan özellikleriyle birlikte bu VM’yi çıkaracaktır.
Kullanılabilir daha fazla özellik var, ancak yalnızca varsayılan çıktıda mevcut değil. Bu nedenle, onu FL’ye (veya Format Listesine) aktarmamız gerekecek.
Kullanılabilir olanı kontrol ederken kullanmayı tercih ettiğim şey, çıktıyı bir değişkene ayarlamak ve bu özellikleri hızla bulmak. Bu şekilde $VM.Property1.property2 vb. kullanabiliriz.
Bizim durumumuzda ExtensionData -> Guest özelliklerini inceleyeceğiz ve orada vmtools bilgilerimizi bulacağız.
VMTools durumu için Function betiği aşağıdaki gibidir.
Function Get-VMToolsStatus { [CmdletBinding()] param( [Parameter( Position=0, ParameterSetName="NonPipeline" )] [Alias("VM", "ComputerName", "VMName")] [string[]] $Name, [Parameter( Position=1, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, ParameterSetName="Pipeline" )] [PSObject[]] $InputObject ) BEGIN { if (-not $Global:DefaultVIServer) { Write-Error "Unable to continue. Please connect to a vCenter Server." -ErrorAction Stop } #Verifying the object is a VM if ($PSBoundParameters.ContainsKey("Name")) { $InputObject = Get-VM $Name } $i = 1 $Count = $InputObject.Count } PROCESS { if (($null -eq $InputObject.VMHost) -and ($null -eq $InputObject.MemoryGB)) { Write-Error "Invalid data type. A virtual machine object was not found" -ErrorAction Stop } foreach ($Object in $InputObject) { try { [PSCustomObject]@{ Name = $Object.name Status = $Object.ExtensionData.Guest.ToolsStatus UpgradeStatus = $Object.ExtensionData.Guest.ToolsVersionStatus2 Version = $Object.ExtensionData.Guest.ToolsVersion } } catch { Write-Error $_.Exception.Message } finally { if ($PSBoundParameters.ContainsKey("Name")) { $PercentComplete = ($i/$Count).ToString("P") Write-Progress -Activity "Processing VM: $($Object.Name)" -Status "$i/$count : $PercentComplete Complete" -PercentComplete $PercentComplete.Replace("%","") $i++ } else { Write-Progress -Activity "Processing VM: $($Object.Name)" -Status "Completed: $i" $i++ } } } } END {} }