Я только недавно присоединился к команде IAM, и в этом месяце я должен был разослать сотни электронных писем людям, уведомляющим их об истечении срока действия учетной записи (их просят либо запросить продление, либо прекращение действия учетной записи).К счастью, для этой части уже создан сценарий, но для ответов нет.Существует таблица Excel, где я записываю, что должно произойти с каждой учетной записью.Я надеялся создать скрипт, который мог бы пройти через каждый из ответов и пометить в нужном поле в электронной таблице соответственно.У меня возникли проблемы с частью скрипта, где я изменяю значение в нужном для пользователя поле.
Я довольно новичок в PowerShell, поэтому я не уверен, в чем проблема.Я уже несколько часов искал в Интернете и нашел немало возможных решений, но ни одно из них не помогло мне.Распространенной проблемой, по-видимому, является использование более старого файла Excel, но он свежий и это Excel 2016. Еще один файл не имеет правильного типа файла, но я проверил, и это тоже не так.Обсуждаемая строка кода: $extend.Cells.Item($modifyCell.Cells.Row) = "$data"
.
Есть идеи, в чем может быть проблема?
Код:
# Path to .msg files
$msgDir = "C:\Users\me\Desktop\Test"
# Array to store results
$msgArray = New-Object System.Collections.Generic.List[object]
# Loop throuch each .msg file
Get-ChildItem "$msgDir" -Filter *.msg |
ForEach-Object {
# Open .msg file
$outlook = New-Object -comobject outlook.application
$msg = $outlook.Session.OpenSharedItem($_.FullName)
# Add .msg file Subject and Body to array
$msgArray.Add([pscustomobject]@{Subject=$msg.Subject;Body=$msg.Body;})
$msg.Close(0) # Close doesn't always work, see KB2633737 -- restart ISE/PowerShell
}
# Loop though / parse each message
ForEach ($message in $msgArray) {
$subject = $message.subject
$body = $message.body
$regex = [regex] '\s*(\w*)\s*\|$'
If ($body -match $regex) {
$username = $body
}
$parse = $body | Select-String -Pattern "Please extend"
If ($parse -eq "Please extend") {
$data = "Y"
}
}
# Open Excel
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
$OpenFile = $Excel.Workbooks.Open("C:\Users\me\Desktop\test.xlsx")
$Workbook = $OpenFile.Worksheets
$Worksheet = $Workbook.Item(1)
# Get the values for each column
$samacctname = $Worksheet.Cells | where {$_.value2 -eq "SAM Account Name"} | select -First 1
$extend = $Worksheet.Cells | where {$_.value2 -eq "Extend"} | select -First 1
# Get the values for each row in SAM Account Name
$userValues = @()
for($i=2; $samacctname.Cells.Item($i).Value2 -ne $null; $i++ ){
$userValues += $samacctname.Cells.Item($i)
}
# Get the values where the cell value of SAM Account matches the username
$modifyCell = $userValues | where {$_.Value2 -eq $username}
# Modify the Extend cell using the username's row position
$extend.Cells.Item($modifyCell.Cells.Row) = "$data"
# Save the file
$OpenFile.Save()
Редактировать 1: Я вернулся в свойкод и сначала попытался жестко закодировать значение данных, которые я пытался добавить в ячейку, но я все еще получил ту же ошибку.Затем я попытался жестко запрограммировать его правильно, когда я вызываю строку $extend.Cells.Item($modifyCell.Cells.Row) = "Y"
, и она работает как надо.Поэтому то, как я пытаюсь использовать регулярные выражения для извлечения имени пользователя, вероятно, не правильно.Вероятно, как я извлекаю данные.