【发布时间】:2013-10-14 12:31:00
【问题描述】:
我正在设置一个脚本,用于将用户的 Exchange 邮箱迁移到 .pst 文件中。我的想法是我会有一个 CSV 文件,我可以将用户名放在上面,然后当脚本每晚启动时,它会打开 CSV 文件并找到已添加的用户,对这些用户帐户执行请求的操作(导出,移动设置权限等),然后写回 CSV 文件将这些用户标记为已完成并写下他们完成的日期。这是我目前所拥有的。
$InPstPath = '\\server1\PST_Store\'
$OutPstPath = '\\server2\PST_Store\'
$User = Get-Content $OutPstPath'login.txt'
$PWord = cat $OutPstPath'pass.txt' | convertto-securestring
$Credentials = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $PWord
$PSSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://Server1/powershell -Credential $Credentials
Import-PSSession $PSSession
$In_List = Invoke-Command {Import-Csv "\\Server1\PST_Store\Admin\To_Be_Exported.csv"} -computername Server1 -Credential $Credentials
foreach ($objUser in $In_List) {
if ($objUser.Completed -ne "Yes") {
$TargetUser = $objUser.name
$ShortDate = (Get-Date).toshortdatestring()
New-MailboxExportRequest -Mailbox $TargetUser -Filepath "$InPstPath$TargetUser.pst"
$objUser.Completed = "Yes"
$objUser.Date = $ShortDate
}
}
Remove-PSSession -Session (Get-PSSession)
我想不出一种将 $objUser.Completed 和 $objUser.Date 值写回 CSV 的好方法。
【问题讨论】:
-
是否有一个 Export-Csv 功能可以反映您使用的 Import-Csv?
-
有。我不确定如何使用它来仅针对需要更改的值。我发现这个命令的大部分内容使它看起来与'Out-File C:\filename.csv | 类似。 ConvertTo-Csv'
-
我猜你需要用新内容覆盖整个文件。你会想要测试并确保你只得到你所做的更改,但这对我来说似乎是一种合理的方法。
-
我研究得越多,我开始认为我应该构建一个新的自定义对象并为其定义属性,然后根据导入的信息(其中 Completed = Yes)或新信息(完成时 = 不是)。
标签: powershell csv powershell-3.0 export-to-csv