从Invoke-Command追加或批量添加记录的脚本

时间:2019-03-09 20:41:16

标签: powershell powershell-remoting invoke-command

我对Powershell相当陌生。以下是我尝试通过invoke-command返回系统列表上的软件记录的尝试。确实有效。但是,似乎所有结果都存储在内存中,然后一次全部导出到CSV。相反,我想分批或在返回结果时分载结果。以最简单的方法为准。这样,我可以从服务器上运行类似的CMD,而不会陷入正在运行脚本的服务器的阻塞,该服务器的内存当前负载为99%,然后在脚本完成卸载任务后,CPU跳至99%。结果。

$IC_ScriptBlock = {
    Get-itemproperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\currentversion\Uninstall* |
        Select Publisher, DisplayName, DisplayVersion, installDate
        }
$IC_Params = @{
    ThrottleLimit = 100
    ScriptBlock = $IC_ScriptBlock
    ComputerName = (Get-Content "C:\Users\JT\Desktop\Scripts\laptops.txt")
    }
Invoke-Command @IC_Params |
    Export-csv -NoTypeInformation -Path "C:\Users\JT\Desktop\Scripts\laptops.csv" -Delimiter ";"

1 个答案:

答案 0 :(得分:1)

看起来像下面是我所需要的。

 $Computers = Get-Content "C:\Desktop\workstations.txt" -ReadCount 20
    FOREACH ($Computer in $Computers) {
    Invoke-Command -ComputerName $Computer -ScriptBlock {
    Get-itemproperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\currentversion\Uninstall\* | 
    Select @{Name="HostName";Expression={$Computer}}, Publisher, DisplayName, DisplayVersion, installDate} |
    Export-csv -NoTypeInformation -Path "C:\Desktop\results.csv" -Delimiter ";" -Append
    } 
    {
    Start-Sleep 1
    }