我最近才刚加入IAM团队,这个月不得不向人们发送数百封电子邮件,通知他们帐户已过期(要求他们要求延长或终止帐户)。值得庆幸的是,已经有一个脚本可以完成这一部分,但是没有处理响应的脚本。有一个excel电子表格,其中记录了每个帐户的情况。我希望制作一个可以通过每个响应并在电子表格中的所需字段中进行标记的脚本。我在脚本部分遇到麻烦,在该部分我修改了用户所需字段下的值。
我对PowerShell还是很陌生,所以我不确定是什么问题。我已经花了几个小时在网上寻找并找到了很多可能的解决方案,但是没有一个对我有用。一个常见的问题显然是使用旧的excel文件,但是它很新,并且是Excel2016。另一个不是正确的文件类型,但是我检查了,不是。有问题的代码行是$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"
时尝试对它进行硬编码,它可以正常工作。因此,我尝试使用正则表达式提取用户名的方式可能不正确。也许我也是如何提取数据。