如何从Powershell导出屏幕详细结果

时间:2014-10-29 23:16:29

标签: powershell

我正在尝试禁用计算机帐户,然后将成功/失败结果导出到文件。但我尝试了export-csv,out-file和其他方法。结果都有一个空文件。任何线索?

谢谢!

$MyDN= (Get-ADComputer testmachine).DistinguishedName
Disable-ADAccount -Identity $MyDN -Verbose |Out-File c:\result.txt

3 个答案:

答案 0 :(得分:0)

直接来自about_Redirection

  Operator  Description                Example  
  --------  ----------------------     ------------------------------
  4>        Sends verbose output to    Import-Module * -Verbose 4> Verbose.txt
            the specified file.

  4>>       Appends verbose output     Import-Module * -Verbose 4>> Save-Verbose.txt
            to the contents of the 
            specified file.

  4>&1      Sends verbose output (4)   Import-Module * -Verbose 4>&1
            and success output (1)    
            to the success output
            stream.              

编辑:您可能需要考虑使用-PassThrough参数,或者如果这两个选项都没有为您提供所需内容,那么Try / Catch可以提供它。

答案 1 :(得分:0)

检查帐户是否实际已禁用,并将结果写入文件:

$MyDN= (Get-ADComputer testmachine).DistinguishedName
Disable-ADAccount -Identity $MyDN

$comp = Get-ADComputer -Identity $MyDN -Properties Enabled
"{0} disabled: {1}" -f $comp.Name, (!$comp.Enabled) | Out-File 'C:\result.txt'

-f是PowerShell的格式运算符。它需要一个字符串数组(或可以转换为字符串的对象),并用它们替换格式字符串中的占位符(基本上就像Python的%运算符)。

<format string with placeholders> -f <string>, <string>, ...

占位符是大括号中的从零开始的数字({0}{1},...),每个数字指的是带有替换字符串的数组的索引。这样,您可以在格式字符串中的多个位置插入相同的字符串:

PS C:\> "{0}: {1}" -f 'foo', 'bar'
foo: bar
PS C:\> "{0}: {1}-{0}" -f 'foo', 'bar'
foo: bar-foo

格式字符串还允许您通过向占位符添加修饰符来以特定方式格式化参数,例如用于将数字打印为十六进制数字,货币或百分比值:

PS C:\> "0x{0:X}" -f 255
0xFF
PS C:\> "{0:p}" -f 0.23
23.00 %
PS C:\> "{0:c}" -f 42
$ 42.00

格式化小数:

PS C:\> "{0:n4}" -f (1/7)
0.1429

或对齐输出:

PS C:\> "{0,10:n2}`n{1,10:n2}`n{2,10:n2}" -f 13.5, 1402, 5.1491
     13.50
  1,402.00
      5.15

有关使用此运算符格式化字符串的详细信息,请参阅here

答案 2 :(得分:0)

虽然来自Disable-Account的详细输出但它没有提供您正在寻找的答案。一个简单的try / catch块可能会为您解决这个问题

$accounts = "jpilot","notexist"
$results = @()

ForEach($account in $accounts){
    try{
        Disable-ADAccount $user -ErrorAction Stop
        $results += "$user was disabled"
    } catch {
        $results += "Unable to disable $($user):  $($_.Exception.Message)"
    }
}

$results | Out-File c:\result.txt -Encoding Ascii

基本上尝试并禁用构建结果数组的帐户。如果没有错误,您可以认为它已被禁用。如果确实想确定您可以使用Get-AduserGet-AdComputer再次检查,但这似乎是多余的。 -ErrorAction Stop会导致任何失败被catch捕获。如果是这种情况输出失败的原因,以便以后可以检查。