在多台计算机上使用Invoke命令.需要将一些结果导出到invoke命令运行的位置,并为每个文件命名唯一的名称



我在许多服务器上运行invoke命令来并行收集信息。然后,我在运行invoke命令的服务器上本地导出数据。当我并行运行invoke命令时,我遇到的问题是将每个作业导出为其唯一的$server.txt文件。

servers.txt文件的内容服务器1服务器2服务器3

这是我当前的代码。。

icm -ComputerName (Get-Content c:tempservers.txt) -ErrorAction SilentlyContinue -ThrottleLimit 15 -ScriptBlock{
$A=get some local server info
$B=get some local server info
$C=get some local server info
echo $A,$B,$C} | out-file c:temp$server.txt

我遇到的问题是,我想将结果导出为一个文件名,该文件名是脚本运行的服务器名称,并且在使用invoke命令并行运行这些作业时,我无法获得$server变量。我不想使用foreach循环,因为它不是并行的。

我希望每个发球的输出都在这样的唯一文件中。C: \temp\server1.textC: \temp\server2.txtC: \temp\server3.txt

编辑:我想我的另一个问题或解决方法是,有没有办法在外部调用命令循环中使用变量?我正在invoke命令中收集机器名称,但需要使用它来设置导出文件的文件名。

谢谢

invoke-command -ComputerName (Get-Content c:tempservers.txt) -ErrorAction SilentlyContinue -ThrottleLimit 15 -ScriptBlock{
$data = @(
get some local server info
get some local server info
get some local server info
)
$server = $env:computername
$data | set-content c:temp$server.txt
}

应该做到这一点,但你也可以直接接收数据:

$result = invoke-command -ComputerName (Get-Content c:tempservers.txt) -ErrorAction SilentlyContinue -ThrottleLimit 15 -ScriptBlock{
$data = @(
get some local server info
get some local server info
get some local server info
)
return $data
}
$result | export-csv C:data.csv -delimiter ";" -noclobber -notypeinformation

我会返回一个对象,然后在.上添加pscomputername属性

icm localhost,localhost,localhost {  # elevated prompt for this example
$A,$B,$C=1,2,3
[pscustomobject]@{A=$A;B=$B;C=$C}
} | ft

A B C PSComputerName RunspaceId
- - - -------------- ----------
1 2 3 localhost      40636f4b-0b65-494f-9912-82464e34c0f2
1 2 3 localhost      857d514c-8080-40ce-8848-d9b62088d75d
1 2 3 localhost      6ee0fd30-fb3a-4ad7-abba-bb2da0fbbece

相关内容

最新更新