我一直在尝试重新格式化这个命令,使其更简洁,但我似乎就是绕不开写输出。
Get-QARSOperation -ParentContainer 'somedomain.com/OU1/OU2' -TargetObjectType 'user' |
Where-Object {$_.Status -eq 'Completed' -and $_.Controls.ID -eq 'OperationReason'} |
ForEach-Object {Get-QARSApprovalTask -Operation $_.ID} |
ForEach-Object {
Write-OutPut ("Target: " + $_.Operation.TargetObjectInfo.DN.Replace("CN=","").Replace("cn=","").Replace("\","").Replace(",","").Replace("OU","").Split('=')[0]);
Write-OutPut ("Operation ID: "+ $_.Operation.ID);
Write-OutPut ("Approver: " + $_.CompletedBy.DN.Replace("CN=","").Replace("\","").Replace(",","").Replace("OU","").Split('=')[0]);
Write-OutPut ("StartedOn: " + $_.Created);
Write-OutPut ("Completed: " + $_.Completed);
Write-OutPut ("Comments: " + $_.CompletionReason);
Write-OutPut ("Operation Type: " + $_.Operation.Type);
Write-OutPut ""
}此外,导出为csv时的格式不会将数据放入列中。你有什么建议可以让这个脚本看起来更整洁?
谢谢!
发布于 2018-02-28 07:28:05
按照注释中的建议,正确的做法是使用Export-Csv生成CSV文件。至于创建您想要导出的对象并使其易于在代码中读取,您可以做一些与您已有的类似的操作,并使用它创建一个自定义对象,然后将该对象通过管道传输到Export-Csv。另外,我认为你的整个.Replace("CN=","").Replace("cn=","").Replace("\","").Replace(",","").Replace("OU","").Split('=')[0]都可以简化为.Split('=,')[1]。字符串的.Split()方法接受多个要拆分的字符,并且它将拆分所提供的任何字符。这是我的建议,你需要在最后更新路径,如果我的路径对你不起作用,你可能不得不恢复到更长的.Replace位。
Get-QARSOperation -ParentContainer 'somedomain.com/OU1/OU2' -TargetObjectType 'user' |
Where-Object {$_.Status -eq 'Completed' -and $_.Controls.ID -eq 'OperationReason'} |
ForEach-Object {Get-QARSApprovalTask -Operation $_.ID} |
ForEach-Object {
[PSCustomObject][Ordered]@{
"Target" = $_.Operation.TargetObjectInfo.DN.Split('=,')[1]
"Operation ID" = $_.Operation.ID
"Approver" = $_.CompletedBy.DN.Split('=,')[1]
"StartedOn" = $_.Created
"Completed" = $_.Completed
"Comments" = $_.CompletionReason
"Operation Type" = $_.Operation.Type
}
} |
Export-Csv C:\Path\To\File.csv -NoTypeInformation您可以使用Select语句,但我认为这对您来说更简洁。
https://stackoverflow.com/questions/49015514
复制相似问题