PowerShellのmkdir
は、デフォルトで出力される作成済みディレクトリを返します。インタラクティブなPowerShellセッションでは、そのデフォルトによって少し混乱します。もちろん、出力を$null
にリダイレクトすることで、印刷をオフにすることができます。
mkdir $env:temp\foo > $null
ディレクトリを作成するたびにリダイレクトを記述したくないので、インタラクティブなPowerShellセッション中にコマンドレットがオブジェクトを返さないように設定できるオプションがあるかどうか疑問に思っています。
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]
_この場合、Microsoftはこの関数を作成するときにsteppablePipeline
を使用したため、機能しません。
これにより、次のコードが残ります。
_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セッションで実行できます。
Alias プロファイルでこれらの関数を実行し、次のように本当に必要な場合にのみ実行できます。
_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
}
_