windows 作为远程命令运行后,写入主机加倍

pzfprimi  于 2022-11-26  发布在  Windows
关注(0)|答案(2)|浏览(104)

我正在尝试运行远程代码:

$servers = @("myserver.local")
Invoke-Command -ScriptBlock {
#############
Write-Host "Test1:" "xxx";
hostname
Write-Host "Test2:" "yyy";
#############
} -ComputerName $servers

并得到以下输出:

Test1: xxx
Test1: xxx
myserver
Test2: yyy
Test2: yyy

预期输出:

Test1: xxx
myserver
Test2: yyy

正如你所看到的,Write-Host的输出是双倍的,但是hostname是可以的。为什么?

mrfwxfqh

mrfwxfqh1#

这不是问题。您的输出是双倍的,因为您在两个服务器上执行它。如果您增加它,那么输出也会增加。
这里的问题是,输出没有分别按照每个主机来,这意味着存在格式/顺序问题。
下面是根据你的评论所做的示例。我已经将一个参数传递到远程系统的脚本块中,并将输出捕获到正在运行的PS会话中。

$hostname= 'RemoteComputer' #Input parameter

$results= Invoke-Command -ScriptBlock {param($hostname)Write-Host "Test1:" "xxx"; #taken the same input inside the script block using param
    $out=hostname #Stored the result in the $out variable
    Write-Host "Test2:" "yyy";
    $out #printed the result
} -ComputerName $servers -ArgumentList $hostname  #Passed the parameter in the scriptblock argument so that it can go inside as param

$results

为了便于理解,我在每一行都用注解解释了这些行。

uqzxnwby

uqzxnwby2#

我不知道你是否仍然有这个问题,但我遇到了同样的问题,问题似乎是一个输出来自Write-Host和其他来自Invoke-Command作为命令的结果。
这两个中的一个需要被抑制,不管是哪一个,下面的示例代码抑制了Invoke-Command的输出

$servers = @("myserver.local")
Invoke-Command -ScriptBlock {
#############
Write-Host "Test1:" "xxx";
hostname
Write-Host "Test2:" "yyy";
#############
} -ComputerName $servers 6>$null

注意,6>$nullInvoke-Command使重复信息流为空,并且只打印一个:
测试1:xxx
我的服务器
测试2:年

相关问题