2017-08-31 84 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

好!會嘗試 –