我不确定如何在标题中描述这个问题,所以这里是。我从另一个脚本中的脚本调用一个函数。在那个函数中,我有一个 while 循环,它基本上一直循环通过一组 ip 并查找它们的主机名。当 while 循环超时或我们拥有所有主机名时。它返回主机名。
我的问题是返回值包含我在该函数中执行的每一个 Write-Host。
我知道这是因为 Write-Host 将东西放在管道上,而返回只是返回它所拥有的任何东西。
我该如何解决这个问题?我运行的整个脚本都记录在一个日志文件中,这就是为什么我想要一些详细的日志记录。
| write-host 上的 out-null 修复了该问题,但它不会在脚本中打印 write-host 值。
在 main.psm1 我有这样的功能:
$nodes = @("ip1", "ip2", "ip3", "ip4")
$nodesnames = DoStuff -nodes $nodes
然后在functions.psm1中我有如下功能:
Function DoStuff
{
param($nodes)
$timeout = 300
$timetaken = 0
$sleepseconds = 5
$nodenames = @("$env:COMPUTERNAME")
while(($nodenames.count -lt $nodes.count) -and ($timetaken -lt $timeout))
{
try
{
Write-Host "Stuff"
foreach($node in $nodes)
{
$nodename = SuperawesomeFunction $node
Write-Host "$nodename"
if($nodenames -notcontains $nodename)
{
$nodenames += @($nodename)
}
}
}
catch
{
Write-Host "DoStuff Failed because $_"
}
Start-Sleep $sleepseconds
$timetaken += $sleepseconds
}
return $nodenames
}
Function SuperawesomeFunction
{
param($node)
$nodename = [System.Net.Dns]::GetHostEntry("$node")
return $nodename
}
谢谢。