2017-08-31 112 views
0

我正在运行一个脚本来获取下面给出的磁盘级别信息。使用winrm截断输出

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不这样做,因为当我使用PowerShell执行脚本时,我能够获得整个输出。

回答

0

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

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

我明白了..但格式表需要脚本执行的一部分或脚本内? –

+0

它是PowerShell代码,显然它需要成为PowerShell代码的一部分,而不是Python代码。 –

+0

好!会尝试 –