是否有办法自动将cmdlet的管道输出发送到out-null,除非它已明确分配给变量或通过管道传输到out-host?
例如,假设我有一个包含许多cmdlet的脚本,这些cmdlet将一个不关心对象转储到您不想保存或查看的控制台:
mkdir dir1 | out-null
mkdir dir2 | out-null
mkdir dir3 | out-null
我发现解决这个问题的唯一方法是将输出管道输出为null或将其分配给我丢弃的变量。我想要做的是,在我的脚本顶部将out-default重新分配为out-null以获得上述效果。我只是认为总是需要在每行上放置“out-null”以避免使用powershell:“自动将cmdlet的管道输出发送到out-null,除非它明确地分配给变量或管道输出到主机” “
可能吗?
答案 0 :(得分:1)
您可以使用默认参数。每次调用New-Item
(mkdir
别名为
$PSDefaultParameterValues = @{
'New-Item:OutVariable' = 'Null'
'Disabled' = $False
}
经过测试,上述方法不应该工作,所以您可以选择在脚本开头创建一个函数:
Function New-Dir
{
Param([Parameter(Mandatory,Position=0)][String]$Path)
#force creates subfolders if they don't exist
New-Item -Path $Path -ItemType Directory -Force >$Null
}
答案 1 :(得分:1)
我发现它可能,但它仍然有点破碎。例如:
PS> function out-default {$input | out-null}
#ok. Works great
PS> mkdir xyz
# output directory object is sent to null and not displayed to out-host
#now explictly asking for the object to override out-default
PS> mkdir xyz123 | out-host
Directory: C:\Users\john\sandbox\tmp
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz123
问题在于它运行得很好,因为我们假设你想将对象保存到返回的varable中。
PS> $dir = mkdir xyz2
PS> $dir
#nothing to returned!
从积极的方面来说,超出默认值的覆盖很容易删除:
PS> del function:out-default
现在可以恢复预期的默认行为:
PS> $dir = mkdir xyz3
PS> $dir
Directory: C:\Users\john\sandbox\tmp2
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz3
PS> mkdir xyz4
Directory: C:\Users\john\sandbox\tmp2
Mode LastWriteTime Length Name
--- ------------- ------ ----
--- 12/19/2017 1:26 PM xyz4
如果分配变量与out-default分开,那将会很好。因为那样你就可以将out-default指定为out-null,而不必担心破坏脚本。