Получение и сравнение значений Excel / данных листа и серверной части с помощью powershell - PullRequest
0 голосов
/ 28 сентября 2018

Изображение значений Excel

Сравнение значений Excel с разных листов с подробностями изображения сервера

Здравствуйте,

Добрый день!У меня возникли некоторые проблемы при сравнении значений Excel с Excel, с разных листов и деталей сервера на стороне ОС через PowerShell.

Таким образом, приведенный ниже код будет искать / искать переменные, которые я создал, используя эту функцию "Search-Excel".Я нашел это в Интернете, однако, его поиск во всем Excel, как и на всех листах.

Я хотел искать только определенные слова на листе.Например, на листе ОС мне нужно будет найти ОС Desc и используемую операционную систему и сравнить их, используя выходной PowerShell со стороны ОС.

В настоящее время я могу получить подробную информацию об обоих, но это неэффективно.Я ищу один за другим, затем сравниваю его.Я надеюсь, что вы можете помочь мне или вы можете дать мне некоторые ссылки, которые просты в использовании.

Коды:

$Excel = New-Object -ComObject Excel.Application 
$Workbook = $Excel.Workbooks.Open('C:\Users\jvalencia9\Downloads\All_hosts_for_35324_ActiveView.xlsx')
$workSheet = $Workbook.Sheets.Item(1)
$WorkSheet.Name

#https://mcpmag.com/articles/2018/04/06/find-excel-data-with-powershell.aspx

Function Search-Excel {
    [cmdletbinding()]
    Param (
        [parameter(Mandatory)]
        [ValidateScript({
            Try {
                If (Test-Path -Path $_) {$True}
                Else {Throw "$($_) is not a valid path!"}
            }
            Catch {
                Throw $_
            }
        })]
        [string]$Source,
        [parameter(Mandatory)]
        [string]$SearchText
        #You can specify wildcard characters (*, ?)
    )
    $Excel = New-Object -ComObject Excel.Application
    Try {
        $Source = Convert-Path $Source
    }
    Catch {
        Write-Warning "Unable locate full path of $($Source)"
        BREAK
    }
    $Workbook = $Excel.Workbooks.Open($Source)
    ForEach ($Worksheet in @($Workbook.Sheets)) {
        # Find Method https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-find-method-excel
        $Found = $WorkSheet.Cells.Find($SearchText) #What
        If ($Found) {
            # Address Method https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-address-property-excel
            $BeginAddress = $Found.Address(0,0,1,1)
            #Initial Found Cell
            [pscustomobject]@{
                WorkSheet = $Worksheet.Name
                Column = $Found.Column
                Row =$Found.Row
                Text = $Found.Text
                Address = $BeginAddress
            }
            Do {
                $Found = $WorkSheet.Cells.FindNext($Found)
                $Address = $Found.Address(0,0,1,1)
                If ($Address -eq $BeginAddress) {
                    BREAK
                }
                [pscustomobject]@{
                    WorkSheet = $Worksheet.Name
                    Column = $Found.Column
                    Row =$Found.Row
                    Text = $Found.Text
                    Address = $Address
                }                 
            } Until ($False)
        }
        Else {
           # Write-Warning "[$($WorkSheet.Name)] Nothing Found!"
        }
    }
    $workbook.close($false)
    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$excel)
    [gc]::Collect()
    [gc]::WaitForPendingFinalizers()
    Remove-Variable excel -ErrorAction SilentlyContinue
}


$Desc = (Get-WmiObject -Class Win32_OperatingSystem).Description
$OS = (Get-WmiObject -Class Win32_OperatingSystem).caption

$e = Search-Excel -Source 'C:\Users\jvalencia9\Downloads\All_hosts_for_35324_ActiveView.xlsx' -SearchText $os | select-object text
if($e | Where-Object {$_.text -eq $OS}){
Write-Host "OS:" $OS "Passed!" -ForegroundColor Cyan
}

else {
Write-Host "OS: Failed!" -ForegroundColor Red
}

$e = Search-Excel -Source 'C:\Users\jvalencia9\Downloads\All_hosts_for_35324_ActiveView.xlsx' -SearchText $desc | select-object text
if($e | Where-Object {$_.text -eq $desc}){
Write-Host "Description:" $desc "Passed!" -ForegroundColor Cyan
}

else {
Write-Host "Description: Failed!" -ForegroundColor Red
}

Вывод:
ОС: Microsoft Windows 10 Enterprise Passed!
Описание: Ошибка!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...