清理 PowerShell 命令
Cleanup PowerShell Command
我一直在尝试通过使其更清晰来重新格式化此命令,但我似乎无法绕过写入输出。
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 时的格式不会将数据放入列中。您有什么建议可以使此脚本看起来更整洁?
谢谢!
正如评论中所建议的那样,正确的做法是使用 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
语句,但我认为这对您来说看起来更干净。
我一直在尝试通过使其更清晰来重新格式化此命令,但我似乎无法绕过写入输出。
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 时的格式不会将数据放入列中。您有什么建议可以使此脚本看起来更整洁?
谢谢!
正如评论中所建议的那样,正确的做法是使用 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
语句,但我认为这对您来说看起来更干净。