在编写Powershell脚本以构建服务器列表然后对每个服务器执行一些维护活动之后,我决定将其分为两部分。内部脚本,称为scriptB,在传入其名称的服务器上执行其操作;外部脚本scriptA构建服务器列表并在每个脚本上运行scriptB。想法是scriptA有一天能够针对每个服务器运行脚本选择 - 例如scriptB或scriptC - 具体取决于控制参数。维护脚本(B或C)也可以自己运行,即通过传递目标服务器的名称。
我使用带有-filepath选项的invoke-command从scriptA调用scriptB,这似乎工作正常。除此之外,对于每次迭代,scriptB的内容都出现在输出中。如果我调用它三次,那么我在输出中有三个scriptB副本。我已经在scriptB中有写输出语句来解释发生了什么,但是在所有噪声中很难发现这些消息。
我尝试将输出分配给变量,例如:
$ eatthis = invoke-command -computername sqlbox -filepath c:\ dba \ scriptB.ps1
然后它很安静,但变量吃了好的输出以及不需要的列表...而且它足够大,我宁愿不解析它。我试着阅读溪流,但这看起来也不是一个有希望的方向。此时我已准备好将scriptB转换为函数并放弃将其作为独立脚本的好处,但是如果有人知道一种简单的方法来抑制通过-filepath指定的invoke-command scriptblock的列表那么那就是很有帮助。
或者,欢迎使用谷歌来表达这一点的好方法。像“列表”,“回声”和“抑制”这样的搜索词并没有让我得到我需要的东西。
答案 0 :(得分:0)
将脚本转换为高级功能。它们可以存储在单独的文件中,并在主脚本中进行点源。这会加载该功能并使其可用。
e.g。
c:\scripts\ComplicatedProcessfunctions.ps1
(其中包含function Run-FunctionB {...}
及更晚function RunFunctionC {...}
)
然后调用函数
$dataResults = RunFunctionA
甚至
$dataResults += RunFunctionA
如果您在循环中运行并构建结果集合。这听起来像你可能。
确保每个函数将其数据作为对象或对象集合返回。可能是您创建的自定义PowerShell对象。
然后主脚本处理结果。
我会推荐Get-Help about_advanced_functions
,脚本人博客和Powershell Scripting Games网站,以获取有关如何构建高级功能以及如何正确执行此操作的信息。