Изображение значений 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!
Описание: Ошибка!