清理 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 语句,但我认为这对您来说看起来更干净。