【问题标题】:Empty CSV file when using Export-CSV from script executed by Scheduled Task从计划任务执行的脚本中使用 Export-CSV 时为空 CSV 文件
【发布时间】:2017-06-27 16:31:00
【问题描述】:

我正在尝试从 FIM/MIM 中提取数据。我已经能够创建一个收集所有相关用户信息的脚本,然后将其导出到 CSV 文件。

当我以交互方式执行脚本(单击 .ps1 文件或从批处理文件执行 .ps1 文件)时,一切运行完美。当我尝试通过计划任务执行脚本时出现问题。它创建文件,但文件没有数据。

基于交互式运行与计划任务时脚本速度的比较,计划任务花费的时间更少。这让我觉得 FIM 导出运行出错或无法完成。然后它会尝试将空数组的内容导出到 .csv 文件。

这是我的代码:

set-variable -name URI -value "http://localhost:5725/resourcemanagementservice' " -option constant
set-variable -name CSV -value "C:\Scripts\Script_Output\FIMUsersExport.csv" -option constant

clear

#Add FIMAutomation Snapin if not already loaded
If (@(Get-PSSnapin | Where-Object { $_.Name -eq "FIMAutomation" }).count -eq 0) { Add-PSSnapin FIMAutomation }

#Add FTE filters
$WFDFilter = "/WorkflowDefinition[DisplayName='_Employee Type FTE']"
$curObjectWFD = export-fimconfig -uri $URI –onlyBaseResources -customconfig ($WFDFilter) -ErrorVariable Err -ErrorAction SilentlyContinue
$WFDObjectID = (($curObjectWFD.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "ObjectID" }).value).split(":")[2]
$Filter = "/Person"
$curObject = export-fimconfig -uri $URI –onlyBaseResources -customconfig ($Filter) -ErrorVariable Err -ErrorAction SilentlyContinue

[array]$users = $null
foreach ($Object in $curObject)
{
    $ResetPass = New-Object PSObject
    $UserDisplayName = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "DisplayName" }).Value)
    $UserFirstName = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "FirstName" }).Value)
    $UserLastName = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "LastName" }).Value)
    $UserEmail = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "Email" }).Value)
    $UserMobilePhone = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "msidmOneTimePasswordMobilePhone" }).Value)
    $UserPFPosNum = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "pfposNum" }).Value)
    $UserPFSupposNum = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "pfsupposNum" }).Value)
    $UserOfficePhone = (($Object.ResourceManagementObject.ResourceManagementAttributes | Where-Object { $_.AttributeName -eq "OfficePhone" }).Value)
    $ResetPass | Add-Member NoteProperty "DisplayName" $UserDisplayName
    $ResetPass | Add-Member NoteProperty "FirstName" $UserFirstName
    $ResetPass | Add-Member NoteProperty "LastName" $UserLastName
    $ResetPass | Add-Member NoteProperty "Email" $UserEmail
    $ResetPass | Add-Member NoteProperty "MobilePhone" $UserMobilePhone
    $ResetPass | Add-Member NoteProperty "OfficePhone" $UserOfficePhone
    $ResetPass | Add-Member NoteProperty "PFPosNum" $UserPFPosNum
    $ResetPass | Add-Member NoteProperty "pfsupposNum" $UserPFSupposNum

    $Users += $ResetPass
}

$AHCAUsers = $users | Where-Object{$_.Email -like "*@ahca.myflorida.com"} | Export-Csv -Path $CSV -NoTypeInformation

有什么想法吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我的猜测是计划任务没有以足够的权限运行。尝试将其配置为作为您的用户帐户运行,看看是否会有所不同。

    您还可以在脚本的开头添加Start-Transcript(并在末尾添加Stop-Transcript),这会将脚本的所有输出记录到文本文件(包括错误消息)中,以便您查看发生了什么当它作为计划任务运行时。

    【讨论】:

    • 太棒了。你的小费奏效了。我真的很怀疑,因为两个帐户都是域管理员,但肯定有一些不同。当我在我的凭据下运行该帐户时,它似乎工作正常,但不适用于我设置的帐户。我可以很容易地弄清楚那部分。非常感谢您的帮助和快速响应。
    • 看起来这归结为 FIM/MIM 权限,而不仅仅是 AD 权限。我必须通过 GUI 手动将服务帐户添加到 FIM/MIM 管理下设置的管理员。
    猜你喜欢
    • 2011-02-26
    • 2016-05-10
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多