【发布时间】:2015-12-29 14:26:32
【问题描述】:
目前我有一个可行的解决方案:
#Declare Variables
$PMArray = @()
$SMArray = @()
#Get Input File and put information in 2 Arrays, 1 for Personal Mailboxes
#and 1 for Shared Mailboxes
Import-Csv "C:\inputfile.csv" -Delimiter ';' | foreach {
$InputMBXType = $_."MailboxType"
$InputL = $_."Level"
$InputSMTP = $_."PrimarySMTPAddress"
if ($InputMBXType -eq "Personal Mailbox") {
$PMObject = New-Object psobject
$PMObject | Add-Member NoteProperty 'MailboxType' $InputMBXType
$PMObject | Add-Member NoteProperty 'Level' $InputL
$PMObject | Add-Member NoteProperty 'EmailAddress' $InputSMTP
$PMArray += $PMObject
}
if ($InputMBXType -eq "Shared Mailbox") {
$SMObject = New-Object psobject
$SMObject | Add-Member NoteProperty 'MailboxType' $InputMBXType
$SMObject | Add-Member NoteProperty 'Level' $InputL
$SMObject | Add-Member NoteProperty 'EmailAddress' $InputSMTP
$SMArray += $SMObject
}
}
#Split Arrays by department
#Personal Mailboxes
$ABCpmarray = $PMArray | Where-Object {$_.Level -eq "ABC"}
$DEFpmarray = $PMArray | Where-Object {$_.Level -eq "DEF"}
$GHIpmarray = $PMArray | Where-Object {$_.Level -eq "GHI"}
#Shared Mailboxes
$ABCsmarray = $SMArray | Where-Object {$_.Level -eq "ABC"}
$DEFsmarray = $SMArray | Where-Object {$_.Level -eq "DEF"}
$GHIsmarray = $SMArray | Where-Object {$_.Level -eq "GHI"}
#Split Array in batches of defined number per batch
[int]$splitat = 50
#ABCpmarray
$runcount = [math]::Ceiling($ABCpmarray.count/$splitat)
for ($LN=0; $LN -lt $runcount; $LN++) {
[int]$begin = $($LN * $splitat)
[int]$end = $(($LN +1) * $splitat) -1
$count = "{0:D2}" -f $LN
$sel = $ABCpmarray[$begin..$end]
$sel | select EmailAddress | Export-Csv -Path "C:\ABC-Personal-$count.csv" -NoTypeInformation
}
#ABCsmarray
$runcount = [math]::Ceiling($ABCsmarray.count/$splitat)
for ($LN=0; $LN -lt $runcount; $LN++) {
[int]$begin = $($LN * $splitat)
[int]$end = $(($LN +1) * $splitat) -1
$count = "{0:D2}" -f $LN
$sel = $ABCsmarray[$begin..$end]
$sel | select EmailAddress | Export-Csv -Path "C:\ABC-Shared-$count.csv" -NoTypeInformation
}
#DEFpmarray
$runcount = [math]::Ceiling($DEFpmarray.count/$splitat)
for ($LN=0; $LN -lt $runcount; $LN++) {
[int]$begin = $($LN * $splitat)
[int]$end = $(($LN +1) * $splitat) -1
$count = "{0:D2}" -f $LN
$sel = $DEFpmarray[$begin..$end]
$sel | select EmailAddress | Export-Csv -Path "C:\DEF-Personal-$count.csv" -NoTypeInformation
}
#DEFsmarray
$runcount = [math]::Ceiling($DEFsmarray.count/$splitat)
for ($LN=0; $LN -lt $runcount; $LN++) {
[int]$begin = $($LN * $splitat)
[int]$end = $(($LN +1) * $splitat) -1
$count = "{0:D2}" -f $LN
$sel = $DEFsmarray[$begin..$end]
$sel | select EmailAddress | Export-Csv -Path "C:\DEF-Shared-$count.csv" -NoTypeInformation
}
不幸的是,所有部门都在脚本中硬编码。
我想对所有部门使用 CSV 文件。 基于 CSV,必须创建新数组并填充内容。
【问题讨论】:
-
@mkierc 我已经阅读了您建议的帖子,但我的问题与您建议的帖子不同。
-
@ThomasMuller 虽然这可能是真的,但值得解释一下为什么。不仅仅是简单地说它是不同的。
-
这里有很多重复的代码。出于 MCVE 的目的,您能否将其简化为一个简单的集合并展示您如何手动创建它们?
$_.Level -eq "ABC"是硬编码部门的意思吗?什么是$PMArray和$SMArray -
一个好的第一步可能是重构数组过滤和
for循环成一个函数。
标签: arrays csv powershell