使用winrm截断输出

时间:2017-08-31 09:39:05

标签: python powershell winrm pywin

我正在运行一个脚本来获取磁盘级别信息,如下所示。

disk.ps1:

Get-WmiObject Win32_DiskDrive | % {
    $disk = $_
    $partitions = "ASSOCIATORS OF " +
                  "{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " +
                  "WHERE AssocClass = Win32_DiskDriveToDiskPartition"
    Get-WmiObject -Query $partitions | % {
        $partition = $_
        $drives = "ASSOCIATORS OF " +
                  "{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " +
                  "WHERE AssocClass = Win32_LogicalDiskToPartition"
        Get-WmiObject -Query $drives | % {
            New-Object -Type PSCustomObject -Property @{
                Disk   = $disk.SerialNumber
                Letter = $_.DeviceID
            }
        }
    }
}

当我在Windows机器上执行上述代码片段时,输出为:

Letter        Disk
------        ----
    H:        XXX_46_0_80987_XXXXX_b2fd_47bb_bc36_aaf4f3029a00
    L:        XXX_46_0_80987_XXXXX_b2fd_47bb_bc36_aaf4f3029a00
    Q:        XXX_46_0_80987_41a13cd9_b2fd_47bb_bc36_aaf4f3029a00

现在我尝试使用pywinrm执行相同的脚本。

disk.py:

complete = <string which is equivalent to above script>
winrm_connector = winrm.Session('*.X.X.X', auth=('XXXX','XXXXXX.1'))
response = winrm_connector.run_ps(complete)
print response.std_out

执行此操作我得到的输出为:

Letter      Disk
------      ----
    H:      XXX_46_0_80987_XXXXX_b2fd_47bb_b...
    L:      XXX_46_0_80987_XXXXX_b2fd_47bb_b...
    Q:      XXX_46_0_80987_41a13cd9_b2fd_47bb_b...

请详细说明WinRM是否截断输出或shell是否截断输出。

我认为shell没有这样做,因为当我使用PowerShell执行脚本时,我能够获得整个输出。

1 个答案:

答案 0 :(得分:0)

PowerShell会自动截断宽列。为避免这种情况,您可以通过在PowerShell代码中通过Format-Table -AutoSize管道传输数据来使用自动调整大小的列。由于您是通过Python调用该命令(不知道PowerShell对象),因此您可能还希望通过Format-TableOut-String输出转换为字符串(具有较大的值)线长)。

... | Format-Table -AutoSize | Out-String -Width 4096