mkdir
在 PowerShell 中返回默认打印的已创建目录。在交互式 PowerShell 会话中,我对该默认设置感到有些不安。当然,我可以通过重定向输出到以下位置来关闭打印$null
:
mkdir $env:temp\foo > $null
由于我不想在每次创建目录时都写入重定向,因此我想知道是否可以设置一个选项来防止 cmdlet 在交互式 PowerShell 会话期间返回对象。
答案1
由于mkdir
是一个环绕的函数New-Item
,您可以通过从中获取它来编辑该函数function PSProvider
,更改它并保存它。
此命令显示运行时执行的内容mkdir
:
Get-Item function:mkdir | Select-Object -ExpandProperty ScriptBlock
然后您可以实际更改脚本块并再次保存它。
mkdir
环绕的线New-Item
是这样的:
$scriptCmd = {& $wrappedCmd -Type Directory @PSBoundParameters }
所以我们只需添加一个| Out-Null
,它就会产生神奇的效果。所有其他输出抑制方法,如:
null =
> null
[void]
在这种情况下不起作用,因为 MicrosoftsteppablePipeline
在创建此功能时与...合作了。
这给我们留下了以下代码:
function Set-Mkdir {
[string]$Mkdir = Get-Item function:mkdir | Select-Object -ExpandProperty ScriptBlock
$NewMkdir = $Mkdir.Replace('$scriptCmd = {& $wrappedCmd -Type Directory @PSBoundParameters }','$scriptCmd = {& $wrappedCmd -Type Directory @PSBoundParameters | Out-Null }')
$NewMkdir = [ScriptBlock]::Create($NewMkdir)
Set-item -Path function:mkdir -Value $NewMkdir
}
我把它放在一个函数中,你可以把它放在你的PowerShell 配置文件,因为当您关闭并重新打开 PowerShell 时,此方法不会保留。如果您将其放入配置文件中,则可以在需要时在交互式 PowerShell 会话中运行它。
你可以别名在您的个人资料中使用这些功能,并且仅在真正需要时运行它们,例如:
Set-Alias smkdir -Value Set-Mkdir
Set-Alias rmkdir -Value Restore-Mkdir
编辑:
如果您想恢复“旧的”,mkdir
您只需切换参数.Replace()
并再次运行它,这里还有另一个功能:
function Restore-Mkdir {
[string]$Mkdir = Get-Item function:mkdir | Select-Object -ExpandProperty ScriptBlock
$NewMkdir = $Mkdir.Replace('$scriptCmd = {& $wrappedCmd -Type Directory @PSBoundParameters | Out-Null }','$scriptCmd = {& $wrappedCmd -Type Directory @PSBoundParameters }')
$NewMkdir = [ScriptBlock]::Create($NewMkdir)
Set-item -Path function:mkdir -Value $NewMkdir
}