是否有一个选项是 mkdir 在交互式 PowerShell 会话期间不返回对象?

是否有一个选项是 mkdir 在交互式 PowerShell 会话期间不返回对象?

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

}

相关内容