在编写Powershell脚本以构建服务器列表,然后在每个服务器上执行一些维护 Activity 之后,我决定将其分为两部分。内部脚本称为scriptB,它在传入名称的服务器上执行操作。外部脚本scriptA构建服务器列表并在每个服务器上运行scriptB。这个想法是,脚本A有一天将能够根据控制参数对每个服务器运行选择的脚本-例如,脚本B或脚本C。维护脚本(B或C)也可以自己运行,即,将目标服务器的名称传递给它。
我使用带有-filepath选项的invoke-command从scriptA调用scriptB,这似乎工作正常。除此之外,对于每次迭代,scriptB的内容都会出现在输出中。如果我调用它三次,那么输出中将有三个scriptB副本。我已经在scriptB中有写输出语句来解释发生了什么,但是在所有杂音中很难发现这些消息。
我尝试将输出分配给变量,例如:
$ eatthis =调用命令-计算机名sqlbox-文件路径c:\ dba \ scriptB.ps1
然后它很安静,但是该变量却获得了不错的输出以及不需要的列表……而且它足够大,我不想解析它。我尝试阅读流,但这也不是一个有希望的方向。至此,我准备将scriptB转换为函数,并放弃将其作为独立脚本的好处,但是如果有人知道抑制通过-filepath指定的调用命令脚本块列表的简便方法,那会有所帮助。
另外,欢迎您为Google提出一个好方法。诸如“列表”,“回声”和“抑制”之类的搜索字词无法满足我的需求。
最佳答案
将您的脚本转换为高级功能。它们可以存储在单独的文件中,也可以在主脚本中以dotsource开头。这将加载该函数并使它可用。
例如
c:\scripts\ComplicatedProcessfunctions.ps1
(其中包含
function Run-FunctionB {...}
和更高的function RunFunctionC {...}
)然后调用函数
$dataResults = RunFunctionA
甚至
$dataResults += RunFunctionA
如果您正在循环内运行并构建结果集合。听起来你可能是。
确保每个函数将其数据作为对象或对象集合返回。可能是您创建的自定义Powershell对象。
然后,主脚本处理结果。
我将推荐
Get-Help about_advanced_functions
,脚本专家博客和Powershell Scripting Games网站,以获取有关如何构建高级功能以及如何正确执行操作的信息。关于powershell - 使用文件路径禁止来自invoke-command的内容列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29379327/