csv powershell命令输出

0mkxixxg  于 2022-12-15  发布在  Shell
关注(0)|答案(1)|浏览(150)

如果我安装了一些应用程序,现在脚本返回txt文件结果,我使用此脚本检查多台计算机。(格式主机名\n是/否)。我如何更改返回结果在csv文件中的2列; 1.主机名; 2.结果如何?

actual result.txt

hostname
YES / NO

desired csv export

Hostname | Result
hostname | YES / NO / OFFLINE

脚本

$Computers = Get-Content -Path C:\Users\m\Desktop\ip.txt | Where-Object { $_ -match '\S' }

foreach($Computer in $Computers){
Write-Host $Computer

    $User = "ussr"
    $Password = "pssd"
    $Command = 'hostname && if exist "C:\LdApp.exe" (echo YES) else (echo NO)'

    $secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Credentials = New-Object System.Management.Automation.PSCredential($User, $secpasswd)

Get-SSHTrustedHost | Remove-SSHTrustedHost

try{

$SessionID = New-SSHSession -ComputerName $Computer -Credential $Credentials -AcceptKey:$true

Invoke-SSHCommand -Index $sessionid.sessionid -Command $Command | Select -Expand Output | Add-Content -Path result.txt}

catch {Add-Content -Path result.txt -Value "$Computer conectare esuata!"}
}

谢谢你,

2vuwiymt

2vuwiymt1#

我已经修改了你的代码,但没有测试它。我会做一些这样的事情

$result = Get-Content -Path C:\Users\m\Desktop\ip.txt | ForEach-Object {
    $computer = $_
    try {
        Write-Host $Computer
        $User = "ussr"
        $Password = "pssd"
        $Command = 'if exist "C:\LdApp.exe" (echo YES) else (echo NO)'
        $secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
        $Credentials = New-Object System.Management.Automation.PSCredential($User, $secpasswd)
        Get-SSHTrustedHost | Remove-SSHTrustedHost
        $SessionID = New-SSHSession -ComputerName $Computer -Credential $Credentials -AcceptKey:$true
        $output = if ($SessionID) {
            (Invoke-SSHCommand -Index $sessionid.sessionid -Command $Command).Output
        }
        else {
            "Offline" 
        }
    }
    catch {
        { 
            Write-Host "$Computer conectare esuata!"
            $output = "conectare esuata!"
        }
    }
    [PsCustomObject]@{
        'Hostname' = $computer
        'Status'   = $output
    }
}
$result | Export-csv -Path "C:\Users\m\Desktop\result.csv" -NoTypeInformation

**Answer2:**用于多个命令和捕获结果,但仍未测试:(

Get-Content -Path C:\Users\m\Desktop\ip.txt | ForEach-Object {
    $computer = $_
    try {
        Write-Host $Computer
        $User = "ussr"
        $Password = "pssd"
        $Command = 'hostname && if exist "C:\LdApp.exe" (echo YES) else (echo NO)'
        $secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
        $Credentials = New-Object System.Management.Automation.PSCredential($User, $secpasswd)
        Get-SSHTrustedHost | Remove-SSHTrustedHost
        $SessionID = New-SSHSession -ComputerName $Computer -Credential $Credentials -AcceptKey:$true
        if ($SessionID) {
            $Output = (Invoke-SSHCommand -Index $sessionid.sessionid -Command $Command).Output
            $result = $Output.split("`n")
            [PSCustomObject]@{
                "HostName" = $result[0]
                "IPAddress" = $result[1] # Print $result to verify the exact index of this value.
                "Status"   = $result[2]
            }
        }
        else {
            [PSCustomObject]@{
                "HostName"  = $computer
                "IPAddress" = "NA"
                "Status"    = "offline"
            }
        }
    }
    catch {
        { 
            Write-Host "$Computer conectare esuata!"
        }
    }

} | Export-csv -Path "C:\Users\m\Desktop\result.csv" -NoTypeInformation

相关问题